1 package org.codehaus.xfire.fault; 2 3 import java.io.ByteArrayOutputStream; 4 import java.io.StringReader; 5 6 import org.codehaus.xfire.AbstractXFireTest; 7 import org.codehaus.xfire.MessageContext; 8 import org.codehaus.xfire.SOAPConstants; 9 import org.codehaus.xfire.handler.BadHandler; 10 import org.codehaus.xfire.service.SimpleService; 11 import org.codehaus.xfire.util.DOMUtils; 12 import org.dom4j.Document; 13 import org.dom4j.io.SAXReader; 14 import org.w3c.dom.Element; 15 16 /*** 17 * XFireTest 18 * 19 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a> 20 */ 21 public class XFireFaultTest 22 extends AbstractXFireTest 23 { 24 public void testFaults() 25 throws Exception 26 { 27 SOAP12FaultHandler soap12 = new SOAP12FaultHandler(); 28 29 XFireFault fault = new XFireFault(new Exception()); 30 fault.setSubCode("m:NotAvailable"); 31 Element details = fault.getDetailElement(); 32 Element e = details.getOwnerDocument().createElement("bah"); 33 DOMUtils.setText(e, "bleh"); 34 details.appendChild(e); 35 36 e = details.getOwnerDocument().createElementNS("urn:test2", "bah2"); 37 DOMUtils.setText(e, "bleh"); 38 details.appendChild(e); 39 40 fault.addNamespace("m", "urn:test"); 41 42 ByteArrayOutputStream out = new ByteArrayOutputStream(); 43 MessageContext context = 44 new MessageContext( "Echo", 45 null, 46 out, 47 null, 48 null ); 49 50 soap12.handleFault( fault, context); 51 52 SAXReader reader = new SAXReader(); 53 Document doc = reader.read( new StringReader(out.toString()) ); 54 printNode(doc); 55 addNamespace("s", SOAPConstants.SOAP12_ENVELOPE_NS); 56 assertValid("//s:SubCode/s:Value[text()='m:NotAvailable']", doc ); 57 addNamespace("t", "urn:test2"); 58 assertValid("//s:Detail/t:bah2[text()='bleh']", doc ); 59 } 60 61 62 public void testFaults11() 63 throws Exception 64 { 65 SOAP11FaultHandler soap11 = new SOAP11FaultHandler(); 66 67 XFireFault fault = new XFireFault(new Exception()); 68 Element details = fault.getDetailElement(); 69 Element e = details.getOwnerDocument().createElement("bah"); 70 DOMUtils.setText(e, "bleh"); 71 details.appendChild(e); 72 73 e = details.getOwnerDocument().createElementNS("urn:test2", "bah2"); 74 DOMUtils.setText(e, "bleh"); 75 details.appendChild(e); 76 77 fault.addNamespace("m", "urn:test"); 78 79 ByteArrayOutputStream out = new ByteArrayOutputStream(); 80 MessageContext context = 81 new MessageContext( "Echo", 82 null, 83 out, 84 null, 85 null ); 86 87 soap11.handleFault( fault, context ); 88 System.err.println(out.toString()); 89 SAXReader reader = new SAXReader(); 90 Document doc = reader.read( new StringReader(out.toString()) ); 91 printNode(doc); 92 addNamespace("s", SOAPConstants.SOAP12_ENVELOPE_NS); 93 addNamespace("t", "urn:test2"); 94 assertValid("//detail/t:bah2[text()='bleh']", doc ); 95 } 96 97 public void testSOAP12() 98 throws Exception 99 { 100 SOAP12FaultHandler soap12 = new SOAP12FaultHandler(); 101 102 testHandler( soap12 ); 103 } 104 105 public void testSOAP11() 106 throws Exception 107 { 108 SOAP11FaultHandler soap11 = new SOAP11FaultHandler(); 109 110 testHandler( soap11 ); 111 } 112 113 /*** 114 * @param soap11 115 */ 116 private void testHandler( FaultHandler soap11 ) 117 { 118 SimpleService service = new SimpleService(); 119 service.setName("Echo"); 120 service.setSoapVersion(SOAPConstants.SOAP12_ENVELOPE_NS); 121 service.setWSDLURL(getClass().getResource("/org/codehaus/xfire/echo11.wsdl").toString()); 122 123 service.setServiceHandler(new BadHandler()); 124 service.setFaultHandler(soap11); 125 126 getServiceRegistry().register(service); 127 128 ByteArrayOutputStream out = new ByteArrayOutputStream(); 129 MessageContext context = 130 new MessageContext( "Echo", 131 null, 132 out, 133 null, 134 null ); 135 136 getXFire().invoke( 137 getResourceAsStream( "/org/codehaus/xfire/echo11.xml" ), 138 context ); 139 140 System.out.println(out.toString()); 141 } 142 }