diff options
Diffstat (limited to 'pdf-as-web/src/main/java/at')
| -rw-r--r-- | pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/filter/ExceptionCatchFilter.java | 12 | ||||
| -rw-r--r-- | pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/servlets/SoapServiceServlet.java | 63 |
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(); } } |
