aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/filter/ExceptionCatchFilter.java12
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SoapServiceServlet.java63
2 files changed, 52 insertions, 23 deletions
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/filter/ExceptionCatchFilter.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/filter/ExceptionCatchFilter.java
index 15b8f61b..dc85936a 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/filter/ExceptionCatchFilter.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/filter/ExceptionCatchFilter.java
@@ -113,13 +113,11 @@ public class ExceptionCatchFilter implements Filter {
chain.doFilter(request, response);
} finally {
- if (response instanceof HttpServletResponse) {
- HttpServletResponse resp = (HttpServletResponse) response;
- log.debug("Got response status: {}", resp.getStatus());
-
- } else {
- log.warn("Response is not a HttpServletResponse!");
-
+ if (response instanceof HttpServletResponse) {
+ HttpServletResponse resp = (HttpServletResponse) response;
+ log.debug("Got response status: {}", resp.getStatus());
+ } else {
+ log.warn("Response is not a HttpServletResponse!");
}
}
} catch (Throwable e) {
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SoapServiceServlet.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SoapServiceServlet.java
index f79e5640..af395aee 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SoapServiceServlet.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SoapServiceServlet.java
@@ -3,13 +3,22 @@ package at.gv.egiz.pdfas.web.servlets;
import jakarta.servlet.ServletConfig;
import jakarta.xml.ws.Endpoint;
+import lombok.extern.slf4j.Slf4j;
+import lombok.val;
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
+import org.apache.cxf.jaxws.EndpointImpl;
+import org.apache.cxf.logging.FaultListener;
+import org.apache.cxf.message.Message;
import org.apache.cxf.transport.servlet.CXFNonSpringServlet;
import at.gv.egiz.pdfas.web.ws.PDFASSigningImpl;
import at.gv.egiz.pdfas.web.ws.PDFASVerificationImpl;
+import java.util.LinkedList;
+import java.util.List;
+
+@Slf4j
public class SoapServiceServlet extends CXFNonSpringServlet {
/**
@@ -17,24 +26,46 @@ public class SoapServiceServlet extends CXFNonSpringServlet {
*/
private static final long serialVersionUID = -8903883276191902043L;
+ @Slf4j
+ public static class Faults implements FaultListener {
+ @Override
+ public boolean faultOccurred(Exception exception, String description, Message message) {
+ String operation = "-";
+ if (message != null && message.getExchange() != null) {
+ val boi = message.getExchange().getBindingOperationInfo();
+ if (boi != null && boi.getName() != null) {
+ operation = boi.getName().toString();
+ }
+ }
+
+ log.error("Unhandled SOAP fault in operation {}: {}", operation, description, exception);
+ return false;
+ }
+ }
+
+ private final List<EndpointImpl> endpoints = new LinkedList<>();
@Override
protected void loadBus(ServletConfig sc) {
- super.loadBus(sc);
-
// You could add the endpoint publish codes here
- Bus bus = this.getBus();
- BusFactory.setDefaultBus(bus);
- Endpoint signEp = Endpoint.publish("/wssign", new PDFASSigningImpl());
- /*
- * SOAPBinding signBinding = (SOAPBinding)signEp.getBinding();
- signBinding.setMTOMEnabled(true);
- */
-
- Endpoint verifyEp = Endpoint.publish("/wsverify", new PDFASVerificationImpl());
- /*
- SOAPBinding verifyBinding = (SOAPBinding)verifyEp.getBinding();
- verifyBinding.setMTOMEnabled(true);
- */
-
+ Bus bus = BusFactory.newInstance(BusFactory.DEFAULT_BUS_FACTORY).createBus();
+ bus.setProperty(FaultListener.class.getName(), new Faults());
+ setBus(bus);
+
+ val signingEndpoint = new EndpointImpl(bus, new PDFASSigningImpl());
+ endpoints.add(signingEndpoint);
+ signingEndpoint.publish("/wssign");
+
+ val verificationEndpoint = new EndpointImpl(bus, new PDFASVerificationImpl());
+ endpoints.add(verificationEndpoint);
+ verificationEndpoint.publish("/wsverify");
+ }
+
+ @Override
+ public void destroyBus() {
+ endpoints.forEach(p -> {
+ try { p.close(); } catch (Exception e) { log.warn("Failed to close endpoint cleanly", e); }
+ });
+ endpoints.clear();
+ super.destroyBus();
}
}