package test.outparams;
import junit.framework.TestCase;
import org.apache.axis.Constants;
import org.apache.axis.Handler;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.configuration.SimpleProvider;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.handlers.soap.SOAPService;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.server.AxisServer;
import org.apache.axis.transport.local.LocalTransport;
import javax.xml.namespace.QName;
import java.util.Map;
/**
* Test org.apache.axis.handlers.RPCDispatcher
*
* @author Sam Ruby <rubys@us.ibm.com>
*/
public class TestOutParams extends TestCase {
private final String serviceURN = "urn:X-test-outparams";
/** A fixed message, since the return is hardcoded */
private final String message =
"<?xml version=\"1.0\"?>\n" +
"<soap:Envelope " +
"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
"xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\" " +
"xmlns:xsi=\"" + Constants.URI_DEFAULT_SCHEMA_XSI + "\" " +
"xmlns:xsd=\"" + Constants.URI_DEFAULT_SCHEMA_XSD + "\">\n" +
"<soap:Body>\n" +
"<ns:someMethod xmlns:ns=\"" + serviceURN + "\"/>\n" +
"</soap:Body>\n" +
"</soap:Envelope>\n";
private Service s_service = null ;
private Call client = null ;
private SimpleProvider provider = new SimpleProvider();
private AxisServer server = new AxisServer(provider);
public TestOutParams(String name) {
super(name);
server.init();
}
/**
* Test returning output params
*/
public void testOutputParams() throws Exception {
// Register the service
Handler h = new ServiceHandler();
s_service = new Service();
client = (Call) s_service.createCall();
// ??? Do we need to register the handler?
SOAPService service = new SOAPService(h);
provider.deployService(serviceURN, service);
// Make sure the local transport uses the server we just configured
client.setTransport(new LocalTransport(server));
// Create the message context
MessageContext msgContext = new MessageContext(server);
// Construct the soap request
SOAPEnvelope envelope = new SOAPEnvelope();
msgContext.setRequestMessage(new Message(envelope));
client.addParameter(
new QName("", "string"),
XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
client.addParameter(
new QName("", "out1"),
XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.OUT);
client.addParameter(
new QName("", "out2"),
XMLType.XSD_FLOAT,
javax.xml.rpc.ParameterMode.OUT);
client.setReturnType(XMLType.XSD_INT);
// Invoke the Axis server
Object ret = client.invoke(serviceURN, "method",
new Object [] { "test" });
Map outParams = client.getOutputParams();
assertNotNull("No output Params returned!", outParams);
Object param = outParams.get(new QName(null, "out1"));
assertEquals("Param out1 does not equal expected value", ServiceHandler.OUTPARAM1, param);
param = outParams.get(new QName(null, "out2"));
assertEquals("Param out2 does not equal expected value", ServiceHandler.OUTPARAM2, param);
assertEquals("Return value does not equal expected value", ((Integer)ret).intValue(), ServiceHandler.RESPONSE.intValue());
}
public static void main(String args[])
{
try {
TestOutParams tester = new TestOutParams("RPC test");
tester.testOutputParams();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|