From cb9a76eaafd37f921006822bcfe043655288bc63 Mon Sep 17 00:00:00 2001 From: Christof Rabensteiner Date: Mon, 22 Jul 2019 13:02:19 +0200 Subject: Test Flow of DeliveryRequest from "End-To-End" & Fix Bugs Schema Changes: - Remove mzs:DeliveryRequest/TnvzMetaData because all metadata fields can be collected from DeliveryRequest and redundancy is not needed. Fixes and Refactoring in preprocess: - MzsDeliveryRequestValidator: Instead of returning false, throw an exception when a condition is not met, and explain which condition is not met / why it is not met in the exception's message. - Integrate interface change in ConfigProfileGenerator and DeliveryRequestAugmenter. - Rewrite and simplify DeliveryRequestAugmenter's augmentation. - ConfigUtil Fixes: Ensure that we do not override the wrong parameters while merging. This error appeared in tnvz / msg client, connection / receive timeout, key / trust store, and lax hostname verification / trust all. Fix Bugs in Interceptor / SoapUtils: - Problem: DOM access and information extraction was implemented somewhat sloppy. - SolutioN: Change DOM access interface to access DOM more efficiently. Add boundary checks and handle edge cases while extracting information from SOAP Messages. - Test those changes properly. Testing: - Implement Delivery Request Flow in ITEndToEndTest. - Start application on random port instead of fixed port when running integration tests. - Add assertions to tests in ITMzsServiceTest suite. Others Bug Fixes: - ServicesConfig: Ensure that mzs service and msg service run on different endpoint addresses (/msg and /mzs). - DeliveryRequestBackend: Throw exception when binary message is missing. Don't wrap the exception. - SaveResponseToFileSink: Wrap Response in JAXB Element (otherwise, marshaller does not recognize it) --- .../java/at/gv/egiz/moazs/util/EndpointFactory.java | 8 ++++---- .../StoreSOAPBodyBinaryInRepositoryInterceptor.java | 20 +++++++++----------- 2 files changed, 13 insertions(+), 15 deletions(-) (limited to 'src/main/java/at/gv/egiz/moazs/util') diff --git a/src/main/java/at/gv/egiz/moazs/util/EndpointFactory.java b/src/main/java/at/gv/egiz/moazs/util/EndpointFactory.java index 24321e1..9d31596 100644 --- a/src/main/java/at/gv/egiz/moazs/util/EndpointFactory.java +++ b/src/main/java/at/gv/egiz/moazs/util/EndpointFactory.java @@ -20,13 +20,13 @@ public class EndpointFactory { this.bus = bus; } - public Endpoint create(Object implementor, Service service) { - return create(implementor, service, null); + public Endpoint create(Object implementor, Service service, String route) { + return create(implementor, service, route, null); } - public Endpoint create(Object implementor, Service service, Interceptor interceptor) { + public Endpoint create(Object implementor, Service service, String route, Interceptor interceptor) { EndpointImpl endpoint = new EndpointImpl(bus, implementor); - endpoint.setAddress("/"); + endpoint.setAddress(route); endpoint.setServiceName(service.getServiceName()); endpoint.setWsdlLocation(service.getWSDLDocumentLocation().toString()); endpoint.publish(); diff --git a/src/main/java/at/gv/egiz/moazs/util/StoreSOAPBodyBinaryInRepositoryInterceptor.java b/src/main/java/at/gv/egiz/moazs/util/StoreSOAPBodyBinaryInRepositoryInterceptor.java index 88ab7e0..d4aa75a 100644 --- a/src/main/java/at/gv/egiz/moazs/util/StoreSOAPBodyBinaryInRepositoryInterceptor.java +++ b/src/main/java/at/gv/egiz/moazs/util/StoreSOAPBodyBinaryInRepositoryInterceptor.java @@ -13,6 +13,7 @@ import org.w3c.dom.Element; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Map; @@ -46,25 +47,22 @@ public class StoreSOAPBodyBinaryInRepositoryInterceptor extends AbstractPhaseInt try { byte[] content = messageUtils.copyContent(message); - if(log.isTraceEnabled()) { - log.trace("Interceptor received this SOAP message: {}. ", new String(content, StandardCharsets.UTF_8)); - } - if (content.length <= 0) { return; } Element document = soapUtils.toDOM(content); - byte[] response = soapUtils.unwrapSoapEnvelope(document); - String appDeliveryID = soapUtils.getAppDeliveryIDFrom(document); - String rootTag = document.getTagName(); + var rootTagNode = soapUtils.getChildElementOfSoapBody(document); + var rootTagLocalName = rootTagNode.getLocalName(); - if (!idGenerators.containsKey(rootTag)) { - log.trace("Will not store message of type {}. ", rootTag); + if (!idGenerators.containsKey(rootTagLocalName)) { + log.trace("Child element {} of is unknown. Will not store message.", rootTagLocalName); return; } - var id = idGenerators.get(rootTag).apply(appDeliveryID); + String appDeliveryID = soapUtils.getAppDeliveryIDFrom(document); + var id = idGenerators.get(rootTagLocalName).apply(appDeliveryID); + byte[] response = soapUtils.toBytes(rootTagNode); repository.store(id, response); if(log.isTraceEnabled()) { @@ -72,7 +70,7 @@ public class StoreSOAPBodyBinaryInRepositoryInterceptor extends AbstractPhaseInt appDeliveryID, new String(response, StandardCharsets.UTF_8)); } - } catch (ParserConfigurationException | SAXException | IOException | NullPointerException e) { + } catch (ParserConfigurationException | SAXException | IOException | NullPointerException | TransformerException e) { throw moaZSException("Could not extract signed data from message.", e); } } -- cgit v1.2.3