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 =
"<?xml version=\"1.0\"?>\n" +
"<soapenv:Envelope " +
"xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
"<soapenv:Body>\n" +
"<ns1:serviceMethod soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" " +
"xmlns:ns1=\"outParamsTest\"> </ns1:serviceMethod>\n" +
"</soapenv:Body></soapenv:Envelope>\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();
}
}
}
|