gdaniels 2002/09/25 14:29:00 Modified: java/src/org/apache/axis SimpleChain.java java/src/org/apache/axis/providers/java JavaProvider.java java/src/org/apache/axis/transport/http AxisServlet.java java/test/soap PackageTests.java TestHandler.java TestHeaderAttrs.java TestService.java Added: java/test/soap TestFaultHandler.java TestOnFaultHeaders.java Log: Fix for http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10944 We now take pains to preserve the response message once it has been set to a fault. This allows onFault() methods to change things, add headers, etc. and have them propagated back to the client. Revision Changes Path 1.55 +15 -4 xml-axis/java/src/org/apache/axis/SimpleChain.java Index: SimpleChain.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/SimpleChain.java,v retrieving revision 1.54 retrieving revision 1.55 diff -u -r1.54 -r1.55 --- SimpleChain.java 18 Sep 2002 16:10:31 -0000 1.54 +++ SimpleChain.java 25 Sep 2002 21:28:59 -0000 1.55 @@ -92,6 +92,9 @@ protected Vector handlers = new Vector(); protected boolean invoked = false; + + private String CAUGHTFAULT_PROPERTY = + "org.apache.axis.SimpleChain.caughtFaultInResponse"; public void init() { for ( int i = 0 ; i < handlers.size() ; i++ ) @@ -154,10 +157,18 @@ i++; } } catch( AxisFault f ) { - // Attach the fault to the response message; enabling access to the - // fault details while inside the handler onFault methods. - Message respMsg = new Message(f); - msgContext.setResponseMessage(respMsg); + // Something went wrong. If we haven't already put this fault + // into the MessageContext's response message, do so and make sure + // we only do it once. This allows onFault() methods to safely + // set headers and such in the response message without them + // getting stomped. + if (!msgContext.isPropertyTrue(CAUGHTFAULT_PROPERTY)) { + // Attach the fault to the response message; enabling access to the + // fault details while inside the handler onFault methods. + Message respMsg = new Message(f); + msgContext.setResponseMessage(respMsg); + msgContext.setProperty(CAUGHTFAULT_PROPERTY, Boolean.TRUE); + } while( --i >= 0 ) ((Handler) handlers.elementAt( i )).onFault( msgContext ); throw f; 1.82 +0 -1 xml-axis/java/src/org/apache/axis/providers/java/JavaProvider.java Index: JavaProvider.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/providers/java/JavaProvider.java,v retrieving revision 1.81 retrieving revision 1.82 diff -u -r1.81 -r1.82 --- JavaProvider.java 25 Sep 2002 20:16:05 -0000 1.81 +++ JavaProvider.java 25 Sep 2002 21:28:59 -0000 1.82 @@ -70,7 +70,6 @@ import org.apache.axis.message.SOAPEnvelope; import org.apache.axis.providers.BasicProvider; import org.apache.axis.utils.ClassUtils; -import org.apache.axis.utils.JavaUtils; import org.apache.axis.utils.Messages; import org.apache.axis.utils.cache.ClassCache; import org.apache.axis.utils.cache.JavaClass; 1.146 +9 -3 xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java Index: AxisServlet.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java,v retrieving revision 1.145 retrieving revision 1.146 diff -u -r1.145 -r1.146 --- AxisServlet.java 25 Sep 2002 20:54:36 -0000 1.145 +++ AxisServlet.java 25 Sep 2002 21:28:59 -0000 1.146 @@ -705,17 +705,23 @@ res.setHeader("WWW-Authenticate","Basic realm=\"AXIS\""); // TODO: less generic realm choice? res.setStatus(status); - responseMsg = new Message(e); + responseMsg = msgContext.getResponseMessage(); + if (responseMsg == null) + responseMsg = new Message(e); contentType = responseMsg.getContentType(msgContext.getSOAPConstants()); } catch (Exception e) { log.error(Messages.getMessage("exception00"), e); res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - responseMsg = new Message(AxisFault.makeFault(e)); + responseMsg = msgContext.getResponseMessage(); + if (responseMsg == null) + responseMsg = new Message(AxisFault.makeFault(e)); contentType = responseMsg.getContentType(msgContext.getSOAPConstants()); } } catch (AxisFault fault) { log.error(Messages.getMessage("axisFault00"), fault); - responseMsg = new Message(fault); + responseMsg = msgContext.getResponseMessage(); + if (responseMsg == null) + responseMsg = new Message(fault); contentType = responseMsg.getContentType(msgContext.getSOAPConstants()); } if( tlog.isDebugEnabled() ) { 1.3 +55 -0 xml-axis/java/test/soap/PackageTests.java Index: PackageTests.java =================================================================== RCS file: /home/cvs/xml-axis/java/test/soap/PackageTests.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- PackageTests.java 2 Apr 2002 22:05:19 -0000 1.2 +++ PackageTests.java 25 Sep 2002 21:28:59 -0000 1.3 @@ -1,3 +1,57 @@ +/* + * The Apache Software License, Version 1.1 + * + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Axis" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact [EMAIL PROTECTED] + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + */ package test.soap; import junit.framework.Test; @@ -16,6 +70,7 @@ TestSuite suite = new TestSuite("All axis.soap tests"); suite.addTest(TestHeaderAttrs.suite()); + suite.addTestSuite(TestOnFaultHeaders.class); return suite; } 1.2 +69 -6 xml-axis/java/test/soap/TestHandler.java Index: TestHandler.java =================================================================== RCS file: /home/cvs/xml-axis/java/test/soap/TestHandler.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- TestHandler.java 14 Jan 2002 21:17:47 -0000 1.1 +++ TestHandler.java 25 Sep 2002 21:28:59 -0000 1.2 @@ -1,10 +1,56 @@ /* - * Created by IntelliJ IDEA. - * User: gdaniels - * Date: Jan 14, 2002 - * Time: 2:13:08 PM - * To change template for new class use - * Code Style | Class Templates options (Tools | IDE Options). + * The Apache Software License, Version 1.1 + * + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Axis" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact [EMAIL PROTECTED] + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. */ package test.soap; @@ -12,6 +58,7 @@ import org.apache.axis.MessageContext; import org.apache.axis.AxisFault; import org.apache.axis.message.SOAPEnvelope; +import org.apache.axis.message.SOAPHeaderElement; /** * This is a test Handler which interacts with the TestService below in @@ -28,6 +75,22 @@ // Just the header's presence is enough - mark the property // so it can be picked up by the service (see below) msgContext.setProperty(TestHeaderAttrs.PROP_DOUBLEIT, Boolean.TRUE); + } + + if (env.getHeaderByName(TestOnFaultHeaders.TRIGGER_NS, + TestOnFaultHeaders.TRIGGER_NAME) != null) { + // Fault trigger header is there, so throw an Exception + throw new AxisFault("triggered exception"); + } + } + + public void onFault(MessageContext msgContext) { + try { + SOAPEnvelope env = msgContext.getResponseMessage().getSOAPEnvelope(); + SOAPHeaderElement header = new SOAPHeaderElement("ns", "local", "val"); + env.addHeader(header); + } catch (Exception e) { + throw new RuntimeException("Exception during onFault processing"); } } } 1.7 +55 -0 xml-axis/java/test/soap/TestHeaderAttrs.java Index: TestHeaderAttrs.java =================================================================== RCS file: /home/cvs/xml-axis/java/test/soap/TestHeaderAttrs.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- TestHeaderAttrs.java 10 Jul 2002 19:32:13 -0000 1.6 +++ TestHeaderAttrs.java 25 Sep 2002 21:28:59 -0000 1.7 @@ -1,3 +1,58 @@ +/* + * The Apache Software License, Version 1.1 + * + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Axis" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact [EMAIL PROTECTED] + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + */ + package test.soap; import junit.framework.TestCase; 1.2 +52 -6 xml-axis/java/test/soap/TestService.java Index: TestService.java =================================================================== RCS file: /home/cvs/xml-axis/java/test/soap/TestService.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- TestService.java 14 Jan 2002 21:17:47 -0000 1.1 +++ TestService.java 25 Sep 2002 21:28:59 -0000 1.2 @@ -1,10 +1,56 @@ /* - * Created by IntelliJ IDEA. - * User: gdaniels - * Date: Jan 14, 2002 - * Time: 2:12:43 PM - * To change template for new class use - * Code Style | Class Templates options (Tools | IDE Options). + * The Apache Software License, Version 1.1 + * + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Axis" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact [EMAIL PROTECTED] + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. */ package test.soap; 1.1 xml-axis/java/test/soap/TestFaultHandler.java Index: TestFaultHandler.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Axis" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package test.soap; import org.apache.axis.handlers.BasicHandler; import org.apache.axis.MessageContext; import org.apache.axis.AxisFault; import org.apache.axis.message.SOAPEnvelope; import org.apache.axis.message.SOAPHeaderElement; /** * This is a test Handler which interacts with the TestService below in * order to test header processing. This one runs before the TestHandler, * so when the TestHandler throws an Exception (triggered by a particular * header being sent from TestOnFaultHeaders), the onFault() method gets * called. In there, we get the response message and add a header to it. * This header gets picked up by the client, who checks that it looks right * and has successfully propagated from here to the top of the call stack. * * @author Glen Daniels ([EMAIL PROTECTED]) */ public class TestFaultHandler extends BasicHandler { public void invoke(MessageContext msgContext) throws AxisFault { } public void onFault(MessageContext msgContext) { try { SOAPEnvelope env = msgContext.getResponseMessage().getSOAPEnvelope(); SOAPHeaderElement header = new SOAPHeaderElement( TestOnFaultHeaders.TRIGGER_NS, TestOnFaultHeaders.RESP_NAME, "here's the value" ); env.addHeader(header); } catch (Exception e) { throw new RuntimeException("Exception during onFault processing"); } } } 1.1 xml-axis/java/test/soap/TestOnFaultHeaders.java Index: TestOnFaultHeaders.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Axis" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package test.soap; import org.apache.axis.handlers.soap.SOAPService; import org.apache.axis.providers.java.RPCProvider; import org.apache.axis.configuration.SimpleProvider; import org.apache.axis.server.AxisServer; import org.apache.axis.transport.local.LocalTransport; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.message.SOAPHeaderElement; import org.apache.axis.message.SOAPEnvelope; import org.apache.axis.SimpleChain; import junit.framework.TestCase; import java.util.Vector; /** * Confirm OnFault() header processing + additions work right. * * @author Glen Daniels ([EMAIL PROTECTED]) */ public class TestOnFaultHeaders extends TestCase { public static String TRIGGER_NS = "http://trigger-fault"; public static String TRIGGER_NAME = "faultPlease"; public static String RESP_NAME = "okHeresYourFault"; private SimpleProvider provider = new SimpleProvider(); private AxisServer engine = new AxisServer(provider); private LocalTransport localTransport = new LocalTransport(engine); static final String localURL = "local:///testService"; public TestOnFaultHeaders(String s) { super(s); } public void setUp() throws Exception { engine.init(); localTransport.setUrl(localURL); SimpleChain chain = new SimpleChain(); chain.addHandler(new TestFaultHandler()); chain.addHandler(new TestHandler()); SOAPService service = new SOAPService(chain, new RPCProvider(), null); service.setOption("className", TestService.class.getName()); service.setOption("allowedMethods", "*"); provider.deployService("testService", service); } /** * Add a header which will trigger a fault in the TestHandler, and * therefore trigger the onFault() in the TestFaultHandler. That should * put a header in the outgoing message, which we check for when we get * the fault. * * @throws Exception */ public void testOnFaultHeaders() throws Exception { Call call = new Call(new Service()); call.setTransport(localTransport); SOAPHeaderElement header = new SOAPHeaderElement(TRIGGER_NS, TRIGGER_NAME, "do it"); call.addHeader(header); try { call.invoke("countChars", new Object [] { "foo" }); } catch (Exception e) { SOAPEnvelope env = call.getResponseMessage().getSOAPEnvelope(); Vector headers = env.getHeaders(); assertEquals("Wrong # of headers in fault!", 1, headers.size()); SOAPHeaderElement respHeader = (SOAPHeaderElement)headers.get(0); assertEquals("Wrong namespace for header", TRIGGER_NS, respHeader.getNamespaceURI()); assertEquals("Wrong localName for response header", RESP_NAME, respHeader.getName()); return; } fail("We should have gotten a fault!"); } }