You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2022/04/10 17:07:29 UTC
[syncope] branch master updated: A few Batch processing improvements (#337)
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push:
new 68d14f6333 A few Batch processing improvements (#337)
68d14f6333 is described below
commit 68d14f63337d0595c4e238a5c9741ee58b5435be
Author: Francesco Chicchiriccò <il...@users.noreply.github.com>
AuthorDate: Sun Apr 10 19:07:23 2022 +0200
A few Batch processing improvements (#337)
---
.../syncope/common/rest/api/batch/BatchItem.java | 4 ++--
.../common/rest/api/batch/BatchRequestItem.java | 11 +++++++++++
.../common/rest/api/batch/BatchResponseItem.java | 9 +++++++++
.../core/rest/cxf/RestServiceExceptionMapper.java | 16 +++++++++-------
.../syncope/core/rest/cxf/batch/BatchProcess.java | 22 +++++++++++-----------
5 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchItem.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchItem.java
index 3a0bc6833e..2c3c2a6f49 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchItem.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchItem.java
@@ -29,9 +29,9 @@ public abstract class BatchItem implements Serializable {
private static final long serialVersionUID = -1393976266651766259L;
- private final Map<String, List<Object>> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ protected final Map<String, List<Object>> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
- private String content;
+ protected String content;
public Map<String, List<Object>> getHeaders() {
return headers;
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchRequestItem.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchRequestItem.java
index 834b0fe8d9..5a9739a62f 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchRequestItem.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchRequestItem.java
@@ -51,4 +51,15 @@ public class BatchRequestItem extends BatchItem {
public void setQueryString(final String queryString) {
this.queryString = queryString;
}
+
+ @Override
+ public String toString() {
+ return "BatchRequestItem{"
+ + "method=" + method + " ,"
+ + "requestURI=" + requestURI + " ,"
+ + "queryString=" + queryString + " ,"
+ + "headers=" + headers + ", "
+ + "content=" + content + " ,"
+ + '}';
+ }
}
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchResponseItem.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchResponseItem.java
index e989b65712..8c6f902d41 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchResponseItem.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/batch/BatchResponseItem.java
@@ -31,4 +31,13 @@ public class BatchResponseItem extends BatchItem {
public void setStatus(final int status) {
this.status = status;
}
+
+ @Override
+ public String toString() {
+ return "BatchResponseItem{"
+ + "status=" + status + ", "
+ + "headers=" + headers + ", "
+ + "content=" + content
+ + '}';
+ }
}
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
index 71243cc955..189c98d538 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
@@ -29,6 +29,7 @@ import javax.persistence.EntityExistsException;
import javax.persistence.PersistenceException;
import javax.persistence.RollbackException;
import javax.validation.ValidationException;
+import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
@@ -129,17 +130,18 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception> {
header(RESTHeaders.ERROR_CODE, ClientExceptionType.RESTValidation.name()).
header(RESTHeaders.ERROR_INFO, ClientExceptionType.RESTValidation.getInfoHeaderValue(
ExceptionUtils.getRootCauseMessage(ex)));
-
- ErrorTO error = new ErrorTO();
- error.setStatus(ClientExceptionType.RESTValidation.getResponseStatus().getStatusCode());
- error.setType(ClientExceptionType.RESTValidation);
- error.getElements().add(ExceptionUtils.getRootCauseMessage(ex));
-
- builder.entity(error);
+ }
+ // process web application exceptions
+ if (builder == null && ex instanceof WebApplicationException) {
+ builder = builder(((WebApplicationException) ex).getResponse()).
+ header(RESTHeaders.ERROR_CODE, ClientExceptionType.Unknown.name()).
+ header(RESTHeaders.ERROR_INFO, ClientExceptionType.Unknown.getInfoHeaderValue(
+ ExceptionUtils.getRootCauseMessage(ex)));
}
// ...or just report as InternalServerError
if (builder == null) {
builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).
+ header(RESTHeaders.ERROR_CODE, ClientExceptionType.Unknown.name()).
header(RESTHeaders.ERROR_INFO, ClientExceptionType.Unknown.getInfoHeaderValue(
ExceptionUtils.getRootCauseMessage(ex)));
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchProcess.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchProcess.java
index 2c130956b6..5b9e3fa61e 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchProcess.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/batch/BatchProcess.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.apache.cxf.transport.http.DestinationRegistry;
import org.apache.syncope.common.rest.api.batch.BatchPayloadGenerator;
@@ -93,7 +94,7 @@ public class BatchProcess implements Runnable {
List<BatchResponseItem> batchResponseItems = new ArrayList<>(batchRequestItems.size());
batchRequestItems.forEach(reqItem -> {
- LOG.debug("Batch item:\n{}", reqItem);
+ LOG.debug("Batch Request item:\n{}", reqItem);
AbstractHTTPDestination dest = destinationRegistry.getDestinationForPath(reqItem.getRequestURI(), true);
if (dest == null) {
@@ -101,34 +102,33 @@ public class BatchProcess implements Runnable {
}
LOG.debug("Destination found for {}: {}", reqItem.getRequestURI(), dest);
+ BatchResponseItem resItem = new BatchResponseItem();
+ batchResponseItems.add(resItem);
if (dest == null) {
- BatchResponseItem resItem = new BatchResponseItem();
- resItem.setStatus(404);
- batchResponseItems.add(resItem);
+ resItem.setStatus(HttpServletResponse.SC_NOT_FOUND);
} else {
BatchItemRequest request = new BatchItemRequest(basePath, servletRequest, reqItem);
BatchItemResponse response = new BatchItemResponse();
try {
dest.invoke(servletConfig, servletConfig.getServletContext(), request, response);
- LOG.debug("Returned:\nstatus: {}\nheaders: {}\nbody:\n{}", response.getStatus(),
- response.getHeaders(), new String(response.getUnderlyingOutputStream().toByteArray()));
- BatchResponseItem resItem = new BatchResponseItem();
resItem.setStatus(response.getStatus());
resItem.setHeaders(response.getHeaders());
String output = new String(response.getUnderlyingOutputStream().toByteArray());
if (output.length() > 0) {
resItem.setContent(output);
}
- batchResponseItems.add(resItem);
+
+ LOG.debug("Returned:\nstatus: {}\nheaders: {}\nbody:\n{}",
+ response.getStatus(), response.getHeaders(), output);
} catch (IOException e) {
LOG.error("Invocation of {} failed", dest.getPath(), e);
- BatchResponseItem resItem = new BatchResponseItem();
- resItem.setStatus(404);
- batchResponseItems.add(resItem);
+ resItem.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
+
+ LOG.debug("Batch Response item:\n{}", resItem);
});
String results = BatchPayloadGenerator.generate(batchResponseItems, JAXRSService.DOUBLE_DASH + boundary);