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 {