1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
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;
import org.custommonkey.xmlunit.XMLUnit;
public class TestSOAPFaults extends AxisTestBase {
public TestSOAPFaults(String name) {
super(name);
}
public void testQuick() throws Exception {
MessageFactory msgfactory = MessageFactory.newInstance();
SOAPFactory factory = SOAPFactory.newInstance();
SOAPMessage outputmsg = msgfactory.createMessage();
String valueCode = "faultcode";
String valueString = "faultString";
SOAPFault fault = outputmsg.getSOAPPart().getEnvelope().getBody().addFault();
fault.setFaultCode(valueCode);
fault.setFaultString(valueString);
Detail d;
d = fault.addDetail();
d.addDetailEntry(factory.createName("Hello"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (outputmsg != null) {
if (outputmsg.saveRequired()) {
outputmsg.saveChanges();
}
outputmsg.writeTo(baos);
}
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());
boolean ws = XMLUnit.getIgnoreWhitespace();
try {
XMLUnit.setIgnoreWhitespace(true);
assertXMLEqual(xml,xml2);
} finally {
XMLUnit.setIgnoreWhitespace(ws);
}
}
public static void main(String[] args) throws Exception {
TestSOAPFaults detailTest = new TestSOAPFaults("TestSOAPFaults");
detailTest.testQuick();
}
}
|