package be.error.wsproxy.interceptors.internalchain; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.testng.Assert; import org.testng.annotations.Test; import be.error.wsproxy.interceptors.logging.WebServiceMessageXPathExpressionMetaData; import be.error.wsproxy.interceptors.logging.WebServiceMessageXPathExtractor; import be.error.wsproxy.interceptors.logging.WebServiceMessageXPathExpressionMetaData.XPathExpressionScope; import be.error.wsproxy.interceptors.logging.WebServiceMessageXPathExpressionMetaData.XPathExpressionType; @Test public class WebServiceMessageXPathExtractorTest { private final WebServiceMessageXPathExtractor xpathExtractor = new WebServiceMessageXPathExtractor(); private final String soapEnvelopedXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:common=\"http://common.error.be\" xmlns:service=" + "\"http://service.error.be\"><soapenv:Header><common:OwnOtherElement>ownOtherBogusValue</common:OwnOtherElement><common:SomeId>12345</common:SomeId><SomeElement>" + "bogusValue</SomeElement></soapenv:Header><soapenv:Body><service:SomeService><FirstElement><FirstElementFirstChild>val</FirstElementFirstChild></FirstElement>" + "<SecondElement>123</SecondElement></service:SomeService></soapenv:Body></soapenv:Envelope>"; public void testXpathExtractorExtractValues() throws Exception { Map<WebServiceMessageXPathExpressionMetaData, String> result = xpathExtractor.extractXPath( new WebServiceMessageXPathExpressionMetaData( "//*[local-name()='SomeService']/*[local-name()='SecondElement']", "someKey"), WebserviceTestSupport.createSoapWebServiceMessage(soapEnvelopedXml)); Assert.assertEquals(result.size(), 1); Assert.assertEquals(result.entrySet().iterator().next().getKey().getXPathKey(), "someKey"); Assert.assertEquals(result.entrySet().iterator().next().getValue(), "123"); WebServiceMessageXPathExpressionMetaData webServiceMessageIdentifiableXPathExpression = new WebServiceMessageXPathExpressionMetaData( "//*[local-name()='Envelope']/*[local-name()='Body']/*" + "[local-name()='SomeService']/*[local-name()='FirstElement']/*[local-name()='FirstElementFirstChild']", "someKey"); webServiceMessageIdentifiableXPathExpression.setXPathExpressionScope(XPathExpressionScope.SOAP_ENVELOPE); result = xpathExtractor.extractXPath(webServiceMessageIdentifiableXPathExpression, WebserviceTestSupport.createSoapWebServiceMessage(soapEnvelopedXml)); Assert.assertEquals(result.size(), 1); Assert.assertEquals(result.entrySet().iterator().next().getKey().getXPathKey(), "someKey"); Assert.assertEquals(result.entrySet().iterator().next().getValue(), "val"); webServiceMessageIdentifiableXPathExpression = new WebServiceMessageXPathExpressionMetaData( "//*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='SomeService']/*[local-name()='NonExistingElement']", "someKey"); webServiceMessageIdentifiableXPathExpression.setXPathExpressionScope(XPathExpressionScope.SOAP_ENVELOPE); result = xpathExtractor.extractXPath(webServiceMessageIdentifiableXPathExpression, WebserviceTestSupport.createSoapWebServiceMessage(soapEnvelopedXml)); Assert.assertEquals(result.size(), 1); Assert.assertEquals(result.entrySet().iterator().next().getKey().getXPathKey(), "someKey"); Assert.assertTrue(StringUtils.isEmpty(result.entrySet().iterator().next().getValue())); webServiceMessageIdentifiableXPathExpression = new WebServiceMessageXPathExpressionMetaData( "*[local-name()='Envelope']/*[local-name()='Header']/*[local-name()='SomeId']", "someId"); webServiceMessageIdentifiableXPathExpression.setXPathExpressionScope(XPathExpressionScope.SOAP_ENVELOPE); result = xpathExtractor.extractXPath(webServiceMessageIdentifiableXPathExpression, WebserviceTestSupport.createSoapWebServiceMessage(soapEnvelopedXml)); Assert.assertEquals(result.size(), 1); Assert.assertEquals(result.entrySet().iterator().next().getKey().getXPathKey(), "someId"); Assert.assertEquals(result.entrySet().iterator().next().getValue(), "12345"); } public void testXpathExtractorExtractNode() throws Exception { WebServiceMessageXPathExpressionMetaData webServiceMessageIdentifiableXPathExpression = new WebServiceMessageXPathExpressionMetaData( "//*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='SomeService']", "someKey"); webServiceMessageIdentifiableXPathExpression.setXPathExpressionScope(XPathExpressionScope.SOAP_ENVELOPE); webServiceMessageIdentifiableXPathExpression.setXPathExpressionType(XPathExpressionType.NODE); Map<WebServiceMessageXPathExpressionMetaData, String> result = xpathExtractor.extractXPath( webServiceMessageIdentifiableXPathExpression, WebserviceTestSupport.createSoapWebServiceMessage(soapEnvelopedXml)); Assert.assertEquals(result.size(), 1); Assert.assertEquals(result.entrySet().iterator().next().getKey().getXPathKey(), "someKey"); Assert.assertEquals( result.entrySet().iterator().next().getValue(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?><service:SomeService xmlns:service=\"http://service.error.be\">" + "<FirstElement><FirstElementFirstChild>val</FirstElementFirstChild></FirstElement><SecondElement>123" + "</SecondElement></service:SomeService>"); } }