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