package test.outparams2; 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.description.ServiceDesc; import org.apache.axis.description.OperationDesc; import org.apache.axis.description.ParameterDesc; import org.apache.axis.configuration.DefaultEngineConfigurationFactory; import org.apache.axis.configuration.SimpleProvider; 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; import javax.xml.rpc.holders.StringHolder; import javax.xml.namespace.QName; public class TestOutParams extends TestCase { /** A fixed message, with no parameters */ private final String message = "\n" + "" + "\n" + " \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 TestOutParams(String name) { super(name); server.init(); } public TestOutParams() { 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.TestOutParams"); service.setOption("allowedMethods", "serviceMethod"); 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(); // test invocation. test Holder parameter defaults to INOUT type client.invoke(env); // method was succesfully invoked assertTrue(called); ServiceDesc description = null; OperationDesc operation = null; ParameterDesc parameter = null; description = service.getServiceDescription(); operation = description.getOperationByName("serviceMethod"); parameter = operation.getParamByQName(new QName("", "out1")); assertEquals(ParameterDesc.INOUT, parameter.getMode()); // Changing output parameter to OUT type. parameter.setMode(ParameterDesc.OUT); // rest called called = false; // invoke again client.invoke(env); assertTrue(this.called); } public void serviceMethod(String in1, StringHolder out1) { called = true; } public static void main(String args[]) { try { TestOutParams tester = new TestOutParams("OutParams Test"); tester.testOutputParams(); } catch (Exception e) { e.printStackTrace(); } } }