package test.outparams2; import javax.xml.rpc.holders.StringHolder; import junit.framework.TestCase; import org.apache.axis.EngineConfiguration; import org.apache.axis.Message; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.configuration.DefaultEngineConfigurationFactory; import org.apache.axis.configuration.SimpleProvider; import org.apache.axis.description.JavaServiceDesc; import org.apache.axis.description.OperationDesc; import org.apache.axis.description.ParameterDesc; import org.apache.axis.description.ServiceDesc; import org.apache.axis.handlers.soap.SOAPService; import org.apache.axis.message.SOAPEnvelope; import org.apache.axis.providers.java.RPCProvider; import org.apache.axis.server.AxisServer; import org.apache.axis.transport.local.LocalTransport; /** * Test if operation is invoked with parameters in good order when out parameter * is not the last parameter.
* It makes sure that bug described at * http://issues.apache.org/jira/browse/AXIS-1975 is corrected. * * @author Cedric Chabanois (cchabanois@natsystem.fr) */ public class TestOutParams2 extends TestCase { /** A fixed message, with one parameter */ private final String message = "\n" + "" + "\n" + "18\n" + "\n"; private Service s_service = null; private Call client = null; private SimpleProvider provider = new SimpleProvider(); private AxisServer server = new AxisServer(provider); private static boolean called = false; public TestOutParams2(String name) { super(name); server.init(); } public TestOutParams2() { super("Test Out Params"); } public void testOutputParams() throws Exception { // Register the service s_service = new Service(); client = (Call) s_service.createCall(); SOAPService service = new SOAPService(null, new RPCProvider(), null); service.setName("TestOutParamsService"); service.setOption("className", "test.outparams2.TestOutParams2"); service.setOption("allowedMethods", "serviceMethod"); ServiceDesc description = new JavaServiceDesc(); OperationDesc operation = new OperationDesc(); operation.setName("serviceMethod"); ParameterDesc out1 = new ParameterDesc(); out1.setName("out1"); out1.setMode(ParameterDesc.OUT); operation.addParameter(out1); ParameterDesc in1 = new ParameterDesc(); in1.setName("in1"); in1.setMode(ParameterDesc.IN); operation.addParameter(in1); description.addOperationDesc(operation); service.setServiceDescription(description); EngineConfiguration defaultConfig = (new DefaultEngineConfigurationFactory()) .getServerEngineConfig(); SimpleProvider config = new SimpleProvider(defaultConfig); config.deployService("outParamsTest", service); provider.deployService("outParamsTest", service); // Make sure the local transport uses the server we just configured client.setTransport(new LocalTransport(server)); Message msg = new Message(message, false); SOAPEnvelope env = msg.getSOAPEnvelope(); // invoke client.invoke(env); assertTrue(this.called); } public void serviceMethod(StringHolder out1, byte in1) { called = true; } public static void main(String args[]) { try { TestOutParams2 tester = new TestOutParams2("OutParams Test"); tester.testOutputParams(); } catch (Exception e) { e.printStackTrace(); } } }