diff --git a/core/src/test/java/org/springframework/ws/endpoint/interceptor/PayloadValidatingInterceptorTest.java b/core/src/test/java/org/springframework/ws/endpoint/interceptor/PayloadValidatingInterceptorTest.java index d6263953..5d8ad94b 100644 --- a/core/src/test/java/org/springframework/ws/endpoint/interceptor/PayloadValidatingInterceptorTest.java +++ b/core/src/test/java/org/springframework/ws/endpoint/interceptor/PayloadValidatingInterceptorTest.java @@ -16,6 +16,7 @@ package org.springframework.ws.endpoint.interceptor; +import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.Locale; import javax.xml.XMLConstants; @@ -26,7 +27,9 @@ import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamSource; -import junit.framework.TestCase; +import org.apache.axiom.soap.SOAPFactory; +import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory; +import org.custommonkey.xmlunit.XMLTestCase; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.ws.MockWebServiceMessage; @@ -35,13 +38,16 @@ import org.springframework.ws.context.DefaultMessageContext; import org.springframework.ws.context.MessageContext; import org.springframework.ws.soap.SoapMessage; import org.springframework.ws.soap.SoapVersion; +import org.springframework.ws.soap.axiom.AxiomSoapMessage; import org.springframework.ws.soap.saaj.SaajSoapMessage; import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; import org.springframework.ws.soap.saaj.support.SaajUtils; import org.springframework.ws.soap.soap11.Soap11Fault; import org.springframework.ws.soap.soap12.Soap12Fault; +import org.xml.sax.SAXParseException; +import org.xml.sax.helpers.LocatorImpl; -public class PayloadValidatingInterceptorTest extends TestCase { +public class PayloadValidatingInterceptorTest extends XMLTestCase { private PayloadValidatingInterceptor interceptor; @@ -248,4 +254,25 @@ public class PayloadValidatingInterceptorTest extends TestCase { boolean result = interceptor.handleResponse(context, null); assertTrue("Invalid response from interceptor", result); } + + public void testCreateRequestValidationFaultAxiom() throws Exception { + SOAPFactory soapFactory = new SOAP11Factory(); + AxiomSoapMessage message = new AxiomSoapMessage(soapFactory); + LocatorImpl locator = new LocatorImpl(); + locator.setLineNumber(0); + locator.setColumnNumber(0); + SAXParseException[] exceptions = new SAXParseException[]{new SAXParseException("Message 1", locator), + new SAXParseException("Message 2", locator),}; + interceptor.createRequestValidationFault(message, exceptions); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + message.writeTo(os); + assertXMLEqual("" + + "" + "" + "" + "soapenv:Client" + + "Validation error" + "" + + "Message 1" + + "Message 2" + + "" + "" + "" + "", os.toString()); + + } + } \ No newline at end of file diff --git a/core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11BodyTest.java b/core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11BodyTest.java index c1f1a2da..ad7beef9 100644 --- a/core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11BodyTest.java +++ b/core/src/test/java/org/springframework/ws/soap/axiom/AxiomSoap11BodyTest.java @@ -1,39 +1,73 @@ package org.springframework.ws.soap.axiom; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import javax.xml.namespace.QName; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Result; +import javax.xml.transform.dom.DOMSource; + import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.soap.SOAPFactory; import org.springframework.ws.soap.SoapBody; +import org.springframework.ws.soap.SoapVersion; import org.springframework.ws.soap.soap11.AbstractSoap11BodyTestCase; +import org.springframework.ws.soap.soap11.Soap11Body; +import org.springframework.ws.soap.soap11.Soap11Fault; +import org.springframework.xml.transform.StringResult; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; public class AxiomSoap11BodyTest extends AbstractSoap11BodyTestCase { + private AxiomSoapMessage axiomSoapMessage; + + private DocumentBuilder documentBuilder; + protected SoapBody createSoapBody() throws Exception { SOAPFactory axiomFactory = OMAbstractFactory.getSOAP11Factory(); - AxiomSoapMessage axiomSoapMessage = new AxiomSoapMessage(axiomFactory); + axiomSoapMessage = new AxiomSoapMessage(axiomFactory); + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + documentBuilderFactory.setNamespaceAware(true); + documentBuilder = documentBuilderFactory.newDocumentBuilder(); return axiomSoapMessage.getSoapBody(); } - public void testAddMustUnderstandFault() throws Exception { - // Overriden because of http://issues.apache.org/jira/browse/WSCOMMONS-38 - } - - public void testAddClientFault() throws Exception { - // Overriden because of http://issues.apache.org/jira/browse/WSCOMMONS-38 - } - - public void testAddServerFault() throws Exception { - // Overriden because of http://issues.apache.org/jira/browse/WSCOMMONS-38 - } - public void testAddFault() throws Exception { - // Overriden because of http://issues.apache.org/jira/browse/WSCOMMONS-38 + QName faultCode = new QName("http://www.springframework.org", "fault", "spring"); + String faultString = "faultString"; + Soap11Fault fault = ((Soap11Body) soapBody).addFault(faultCode, faultString, null); + assertNotNull("Null returned", fault); + assertTrue("SoapBody has no fault", soapBody.hasFault()); + assertNotNull("SoapBody has no fault", soapBody.getFault()); + assertEquals("Invalid fault code", faultCode, fault.getFaultCode()); + assertEquals("Invalid fault string", faultString, fault.getFaultString()); + String actor = "http://www.springframework.org/actor"; + fault.setFaultActorOrRole(actor); + assertEquals("Invalid fault actor", actor, fault.getFaultActorOrRole()); + assertPayloadEqual("" + "spring:fault" + + "" + faultString + "" + "" + actor + "" + + ""); } - public void testAddFaultWithDetail() throws Exception { - // Overriden because of http://issues.apache.org/jira/browse/WSCOMMONS-38 - } - - public void testAddFaultWithDetailResult() throws Exception { - // Overriden because of http://issues.apache.org/jira/browse/WSCOMMONS-38 + /** + * Overriden because of http://issues.apache.org/jira/browse/WSCOMMONS-38. Axiom does not return valid xml + */ + protected void assertPayloadEqual(String expectedPayload) throws Exception { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + axiomSoapMessage.writeTo(os); + Document document = documentBuilder.parse(new ByteArrayInputStream(os.toByteArray())); + NodeList nodes = document.getElementsByTagNameNS(SoapVersion.SOAP_11.getEnvelopeNamespaceUri(), "Body"); + assertEquals("No Body found", 1, nodes.getLength()); + assertEquals("No Body found", Node.ELEMENT_NODE, nodes.item(0).getNodeType()); + Element bodyElement = (Element) nodes.item(0); + Element firstChild = (Element) bodyElement.getFirstChild(); + Result result = new StringResult(); + transformer.transform(new DOMSource(firstChild), result); + assertXMLEqual("Invalid payload contents", expectedPayload, result.toString()); } } diff --git a/core/src/test/java/org/springframework/ws/soap/soap11/AbstractSoap11BodyTestCase.java b/core/src/test/java/org/springframework/ws/soap/soap11/AbstractSoap11BodyTestCase.java index e047e6b3..a4eb26c0 100644 --- a/core/src/test/java/org/springframework/ws/soap/soap11/AbstractSoap11BodyTestCase.java +++ b/core/src/test/java/org/springframework/ws/soap/soap11/AbstractSoap11BodyTestCase.java @@ -45,7 +45,7 @@ public abstract class AbstractSoap11BodyTestCase extends AbstractSoapBodyTestCas assertEquals("Invalid fault code", new QName("http://schemas.xmlsoap.org/soap/envelope/", "MustUnderstand"), fault.getFaultCode()); assertPayloadEqual("" + - "SOAP-ENV:MustUnderstand" + + "" + soapBody.getName().getPrefix() + ":MustUnderstand" + "SOAP Must Understand Error"); } @@ -54,8 +54,8 @@ public abstract class AbstractSoap11BodyTestCase extends AbstractSoapBodyTestCas assertEquals("Invalid fault code", new QName("http://schemas.xmlsoap.org/soap/envelope/", "Client"), fault.getFaultCode()); assertPayloadEqual("" + - "SOAP-ENV:Client" + "faultString" + - ""); + "" + soapBody.getName().getPrefix() + ":Client" + + "faultString" + ""); } public void testAddServerFault() throws Exception { @@ -63,18 +63,18 @@ public abstract class AbstractSoap11BodyTestCase extends AbstractSoapBodyTestCas assertEquals("Invalid fault code", new QName("http://schemas.xmlsoap.org/soap/envelope/", "Server"), fault.getFaultCode()); assertPayloadEqual("" + - "SOAP-ENV:Server" + "faultString" + - ""); + "" + soapBody.getName().getPrefix() + ":Server" + + "faultString" + ""); } public void testAddFault() throws Exception { QName faultCode = new QName("http://www.springframework.org", "fault", "spring"); - Soap11Fault fault = ((Soap11Body) soapBody).addFault(faultCode, "faultString", Locale.ENGLISH); + String faultString = "faultString"; + Soap11Fault fault = ((Soap11Body) soapBody).addFault(faultCode, faultString, Locale.ENGLISH); assertNotNull("Null returned", fault); assertTrue("SoapBody has no fault", soapBody.hasFault()); assertNotNull("SoapBody has no fault", soapBody.getFault()); assertEquals("Invalid fault code", faultCode, fault.getFaultCode()); - String faultString = "faultString"; assertEquals("Invalid fault string", faultString, fault.getFaultString()); assertEquals("Invalid fault string locale", Locale.ENGLISH, fault.getFaultStringLocale()); String actor = "http://www.springframework.org/actor"; @@ -87,18 +87,25 @@ public abstract class AbstractSoap11BodyTestCase extends AbstractSoapBodyTestCas } public void testAddFaultWithDetail() throws Exception { - SoapFault fault = ((Soap11Body) soapBody) - .addFault(new QName("namespace", "localPart", "prefix"), "Fault", null); + QName faultCode = new QName("http://www.springframework.org", "fault", "spring"); + String faultString = "faultString"; + SoapFault fault = ((Soap11Body) soapBody).addFault(faultCode, faultString, null); SoapFaultDetail detail = fault.addFaultDetail(); - SoapFaultDetailElement detailElement = - detail.addFaultDetailElement(new QName("namespace", "localPart", "prefix")); + QName detailName = new QName("http://www.springframework.org", "detailEntry", "spring"); + SoapFaultDetailElement detailElement1 = detail.addFaultDetailElement(detailName); StringSource detailContents = new StringSource(""); - transformer.transform(detailContents, detailElement.getResult()); - assertPayloadEqual("" + - "prefix:localPart" + - "Fault" + - "" + - ""); + transformer.transform(detailContents, detailElement1.getResult()); + SoapFaultDetailElement detailElement2 = detail.addFaultDetailElement(detailName); + detailContents = new StringSource(""); + transformer.transform(detailContents, detailElement2.getResult()); + assertPayloadEqual( + "" + + "spring:fault" + "" + faultString + "" + + "" + + "" + + "" + + "" + ""); + } public void testAddFaultWithDetailResult() throws Exception {