You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2004/07/06 21:00:55 UTC
cvs commit: ws-axis/java/test/saaj TestSOAPFaults.java
dims 2004/07/06 12:00:55
Modified: java/src/org/apache/axis/message Detail.java
DetailEntry.java SOAPFault.java
java/test/functional TestJAXMSamples.java
java/test/saaj TestSOAPFaults.java
Removed: java/samples/jaxm SOAPFaultTest.java
Log:
Fix for AXIS-1432 : Creating a SOAPFault with additional detail elements
Notes:
- moved a test case that was in samples/jaxm into test/saaj itself.
Revision Changes Path
1.10 +1 -20 ws-axis/java/src/org/apache/axis/message/Detail.java
Index: Detail.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/Detail.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Detail.java 25 Feb 2004 14:02:42 -0000 1.9
+++ Detail.java 6 Jul 2004 19:00:54 -0000 1.10
@@ -30,21 +30,9 @@
*
* @author Davanum Srinivas (dims@yahoo.com)
*/
-public class Detail extends SOAPFault implements javax.xml.soap.Detail {
-
- public Detail(String namespace, String localName, String prefix,
- Attributes attrs, DeserializationContext context)
- throws AxisFault
- {
- super(namespace, localName, prefix, attrs, context);
- }
+public class Detail extends SOAPFaultElement implements javax.xml.soap.Detail {
public Detail() {
- super(new AxisFault());
- }
-
- public Detail(AxisFault fault) {
- super(fault);
}
/**
@@ -57,13 +45,6 @@
public DetailEntry addDetailEntry(Name name) throws SOAPException {
org.apache.axis.message.DetailEntry entry = new org.apache.axis.message.DetailEntry(name);
addChildElement(entry);
- if(fault != null) {
- try {
- fault.addFaultDetail(entry.getAsDOM());
- } catch (Exception e) {
- throw new SOAPException(e);
- }
- }
return entry;
}
1.6 +0 -8 ws-axis/java/src/org/apache/axis/message/DetailEntry.java
Index: DetailEntry.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/DetailEntry.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DetailEntry.java 25 Feb 2004 14:02:42 -0000 1.5
+++ DetailEntry.java 6 Jul 2004 19:00:54 -0000 1.6
@@ -25,12 +25,4 @@
public DetailEntry(javax.xml.soap.Name name){
super(name);
}
-
- public javax.xml.soap.SOAPElement addTextNode(String text) throws javax.xml.soap.SOAPException {
- javax.xml.soap.SOAPElement element = super.addTextNode(text);
- org.apache.axis.message.Detail detail = (org.apache.axis.message.Detail)this.getParentElement();
- org.apache.axis.AxisFault fault = detail.getFault();
- fault.addFaultDetailString(text);
- return element;
- }
}
1.29 +13 -3 ws-axis/java/src/org/apache/axis/message/SOAPFault.java
Index: SOAPFault.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/SOAPFault.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- SOAPFault.java 27 Jun 2004 12:28:31 -0000 1.28
+++ SOAPFault.java 6 Jul 2004 19:00:54 -0000 1.29
@@ -36,6 +36,7 @@
import java.io.IOException;
import java.util.List;
import java.util.Locale;
+import java.util.Iterator;
/** A Fault body element.
*
@@ -48,6 +49,7 @@
protected AxisFault fault;
protected String prefix;
private java.util.Locale locale;
+ protected Detail detail = null;
public SOAPFault(String namespace, String localName, String prefix,
Attributes attrs, DeserializationContext context)
@@ -62,7 +64,7 @@
}
public void outputImpl(SerializationContext context)
- throws IOException
+ throws Exception
{
SOAPConstants soapConstants = context.getMessageContext() == null ?
SOAPConstants.SOAP11_CONSTANTS :
@@ -166,6 +168,13 @@
for (int i = 0; i < faultDetails.length; i++) {
context.writeDOMElement(faultDetails[i]);
}
+
+ if (detail!= null) {
+ for (Iterator it = detail.getChildren().iterator(); it.hasNext();) {
+ ((NodeImpl)it.next()).output(context);
+ }
+ }
+
context.endElement();
}
}
@@ -360,11 +369,12 @@
* @return a detail element contructed from the AxisFault details
* @throws SOAPException
*/
- private static Detail convertToDetail(AxisFault fault)
+ private Detail convertToDetail(AxisFault fault)
throws SOAPException
{
- Detail detail = new Detail(fault);
+ detail = new Detail();
Element[] darray = fault.getFaultDetails();
+ fault.setFaultDetail(new Element[]{});
for (int i = 0; i < darray.length; i++)
{
Element detailtEntryElem = darray[i];
1.23 +0 -11 ws-axis/java/test/functional/TestJAXMSamples.java
Index: TestJAXMSamples.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/functional/TestJAXMSamples.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- TestJAXMSamples.java 25 Feb 2004 14:02:55 -0000 1.22
+++ TestJAXMSamples.java 6 Jul 2004 19:00:55 -0000 1.23
@@ -21,8 +21,6 @@
import org.apache.axis.components.logger.LogFactory;
import org.apache.commons.logging.Log;
import samples.jaxm.DelayedStockQuote;
-import samples.jaxm.SOAPFaultTest;
-import samples.jaxm.UddiPing;
import javax.xml.messaging.URLEndpoint;
import javax.xml.soap.MessageFactory;
@@ -46,15 +44,6 @@
public TestJAXMSamples(String name) {
super(name);
} // ctor
-
- public void testSOAPFaultTest () throws Exception {
- try {
- SOAPFaultTest.main(new String[0]);
- } catch (Throwable t) {
- t.printStackTrace();
- throw new Exception("Fault returned from test: " + t);
- }
- }
// // This is timing out for some reason - removed for the nonce.
// // -- gdaniels, 4/21/2003
1.2 +130 -1 ws-axis/java/test/saaj/TestSOAPFaults.java
Index: TestSOAPFaults.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/saaj/TestSOAPFaults.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestSOAPFaults.java 10 Jun 2003 16:27:34 -0000 1.1
+++ TestSOAPFaults.java 6 Jul 2004 19:00:55 -0000 1.2
@@ -1,13 +1,24 @@
package test.saaj;
+import test.AxisTestBase;
+
import javax.xml.soap.Detail;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.DetailEntry;
+import javax.xml.soap.Name;
+import javax.xml.soap.SOAPPart;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPHeader;
+import javax.xml.soap.SOAPHeaderElement;
import java.io.ByteArrayOutputStream;
+import java.util.Iterator;
-public class TestSOAPFaults extends junit.framework.TestCase {
+public class TestSOAPFaults extends AxisTestBase {
public TestSOAPFaults(String name) {
super(name);
}
@@ -33,6 +44,124 @@
}
String xml = new String(baos.toByteArray());
assertTrue(xml.indexOf("Hello")!=-1);
+ }
+
+ public void testSOAPFaultSaveChanges() throws Exception {
+ MessageFactory msgFactory =
+ MessageFactory.newInstance();
+ SOAPMessage msg = msgFactory.createMessage();
+ SOAPEnvelope envelope =
+ msg.getSOAPPart().getEnvelope();
+ SOAPBody body = envelope.getBody();
+ SOAPFault fault = body.addFault();
+
+ fault.setFaultCode("Client");
+ fault.setFaultString(
+ "Message does not have necessary info");
+ fault.setFaultActor("http://gizmos.com/order");
+
+ Detail detail = fault.addDetail();
+
+ Name entryName = envelope.createName("order", "PO",
+ "http://gizmos.com/orders/");
+ DetailEntry entry = detail.addDetailEntry(entryName);
+ entry.addTextNode(
+ "quantity element does not have a value");
+
+ Name entryName2 = envelope.createName("confirmation",
+ "PO", "http://gizmos.com/confirm");
+ DetailEntry entry2 = detail.addDetailEntry(entryName2);
+ entry2.addTextNode("Incomplete address: no zip code");
+
+ msg.saveChanges();
+
+ // Now retrieve the SOAPFault object and its contents
+ //after checking to see that there is one
+
+ if (body.hasFault()) {
+ fault = body.getFault();
+ String code = fault.getFaultCode();
+ String string = fault.getFaultString();
+ String actor = fault.getFaultActor();
+
+ System.out.println("SOAP fault contains: ");
+ System.out.println(" fault code = " + code);
+ System.out.println(" fault string = " + string);
+ if (actor != null) {
+ System.out.println(" fault actor = " + actor);
+ }
+
+ detail = fault.getDetail();
+ if (detail != null) {
+ Iterator it = detail.getDetailEntries();
+ while (it.hasNext()) {
+ entry = (DetailEntry) it.next();
+ String value = entry.getValue();
+ System.out.println(" Detail entry = " + value);
+ }
+ }
+ }
+
+ }
+
+ public void testAxis1432() throws Exception {
+ String xml ="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:cwmp=\"http://cwmp.com\">\n" +
+ " <soapenv:Header>\n" +
+ " <cwmp:ID soapenv:mustUnderstand=\"1\">HEADERID-7867678</cwmp:ID>\n" +
+ " </soapenv:Header>\n" +
+ " <soapenv:Body>\n" +
+ " <soapenv:Fault>\n" +
+ " <faultcode>soapenv:Client</faultcode>\n" +
+ " <faultstring>CWMP fault</faultstring>\n" +
+ " <detail>\n" +
+ " <cwmp:Fault>\n" +
+ " <cwmp:FaultCode>This is the fault code</cwmp:FaultCode>\n" +
+ " <cwmp:FaultString>Fault Message</cwmp:FaultString>\n" +
+ " </cwmp:Fault>\n" +
+ " </detail>\n" +
+ " </soapenv:Fault>\n" +
+ " </soapenv:Body>\n" +
+ "</soapenv:Envelope>";
+
+ MessageFactory fac = MessageFactory.newInstance();
+ SOAPMessage faultMessage = fac.createMessage();
+
+ // Create the response to the message
+ faultMessage = fac.createMessage();
+ SOAPPart part = faultMessage.getSOAPPart();
+ SOAPEnvelope envelope = part.getEnvelope();
+ envelope.addNamespaceDeclaration("cwmp", "http://cwmp.com");
+ SOAPBody body = envelope.getBody();
+ SOAPHeader header = envelope.getHeader();
+ Name idName = envelope.createName("ID", "cwmp", "http://cwmp.com");
+ SOAPHeaderElement id = header.addHeaderElement(idName);
+ id.setMustUnderstand(true);
+ id.addTextNode("HEADERID-7867678");
+ id.setActor(null);
+
+ // Create the SOAPFault object
+ SOAPFault fault = body.addFault();
+ fault.setFaultCode("Client");
+ fault.setFaultString("CWMP fault");
+ fault.setFaultActor(null);
+
+ // Add Fault Detail information
+ Detail faultDetail = fault.addDetail();
+ Name cwmpFaultName = envelope.createName("Fault", "cwmp",
+ "http://cwmp.com");
+ DetailEntry cwmpFaultDetail =
+ faultDetail.addDetailEntry(cwmpFaultName);
+ SOAPElement e = cwmpFaultDetail.addChildElement("FaultCode");
+
+ e.addTextNode("This is the fault code");
+ SOAPElement e2 = cwmpFaultDetail.addChildElement(envelope.createName("FaultString", "cwmp", "http://cwmp.com"));
+ e2.addTextNode("Fault Message");
+ faultMessage.saveChanges();
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ faultMessage.writeTo(baos);
+ String xml2 = new String(baos.toByteArray());
+ assertXMLEqual(xml,xml2);
}
public static void main(String[] args) throws Exception {