TestSerializedRPCpublic class TestSerializedRPC extends org.custommonkey.xmlunit.XMLTestCase Test org.apache.axis.handlers.RPCDispatcher |
Fields Summary |
---|
private final String | header | private final String | footer | private org.apache.axis.configuration.SimpleProvider | provider | private org.apache.axis.server.AxisServer | engine | QName | firstParamName | QName | secondParamName | private String | SOAPAction |
Constructors Summary |
---|
public TestSerializedRPC(String name)
super(name);
engine.init();
// And deploy the type mapping
Class javaType = Data.class;
QName xmlType = new QName("urn:foo", "Data");
BeanSerializerFactory sf = new BeanSerializerFactory(javaType, xmlType);
BeanDeserializerFactory df = new BeanDeserializerFactory(javaType, xmlType);
TypeMappingRegistry tmr = engine.getTypeMappingRegistry();
TypeMapping tm =
tmr.getOrMakeTypeMapping(Constants.URI_DEFAULT_SOAP_ENC);
tm.register(javaType, xmlType, sf, df);
// Register the reverseString service
SOAPService reverse = new SOAPService(new RPCProvider());
reverse.setOption("className", "test.RPCDispatch.Service");
reverse.setOption("allowedMethods", "*");
JavaServiceDesc desc = new JavaServiceDesc();
desc.loadServiceDescByIntrospection(Service.class, tm);
reverse.setServiceDescription(desc);
provider.deployService(SOAPAction, reverse);
// Now we've got the service description loaded up. We're going to
// be testing parameter dispatch by name, so if debug info isn't
// compiled into the Service class, the names are going to be "in0",
// etc. Make sure they match.
OperationDesc oper = desc.getOperationByName("concatenate");
assertNotNull(oper);
firstParamName = oper.getParameter(0).getQName();
secondParamName = oper.getParameter(1).getQName();
|
Methods Summary |
---|
private final java.lang.Object | rpc(java.lang.String method, java.lang.String bodyStr, boolean setService)Invoke a given RPC method, and return the result
// Create the message context
MessageContext msgContext = new MessageContext(engine);
// Set the dispatch either by SOAPAction or methodNS
String methodNS = "urn:dont.match.me";
if (setService) {
msgContext.setTargetService(SOAPAction);
} else {
methodNS = SOAPAction;
}
String bodyElemHead = "<m:" + method + " xmlns:m=\"" +
methodNS + "\">";
String bodyElemFoot = "</m:" + method + ">";
// Construct the soap request
String msgStr = header + bodyElemHead + bodyStr +
bodyElemFoot + footer;
msgContext.setRequestMessage(new Message(msgStr));
msgContext.setTypeMappingRegistry(engine.getTypeMappingRegistry());
// Invoke the Axis engine
engine.invoke(msgContext);
// Extract the response Envelope
Message message = msgContext.getResponseMessage();
assertNotNull("Response message was null!", message);
SOAPEnvelope envelope = message.getSOAPEnvelope();
assertNotNull("SOAP envelope was null", envelope);
// Extract the body from the envelope
RPCElement body = (RPCElement)envelope.getFirstBody();
assertNotNull("SOAP body was null", body);
// Extract the list of parameters from the body
Vector arglist = body.getParams();
assertNotNull("SOAP argument list was null", arglist);
assertTrue("param.size()<=0 {Should be > 0}", arglist.size()>0);
// Return the first parameter
RPCParam param = (RPCParam) arglist.get(0);
return param.getObjectValue();
| public void | testArgAsDOM()Test DOM round tripping
// invoke the service and verify the result
String arg = "<arg0 xmlns:foo=\"urn:foo\">";
arg += "<field1>5</field1><field2>abc</field2><field3>3</field3>";
arg += "</arg0>";
// invoke the service and verify the result
engine.setOption(AxisEngine.PROP_SEND_XSI, Boolean.FALSE);
assertXMLEqual("Did not echo arg correctly.", arg, rpc("argAsDOM", arg, true).toString());
| public void | testOutOfOrderParams()Test out-of-order parameters, using the names to match
String body = "<" + secondParamName.getLocalPart() + " xmlns=\""+ secondParamName.getNamespaceURI() + "\">world!</" +
secondParamName.getLocalPart() + ">" +
"<" + firstParamName.getLocalPart() + " xmlns=\""+ firstParamName.getNamespaceURI() + "\">Hello, </" +
firstParamName.getLocalPart() + ">";
String expected = "Hello, world!";
assertEquals("Concatenated value was wrong",
expected,
rpc("concatenate", body, true));
| public void | testOverloadedMethodDispatch()Test overloaded method dispatch without the benefit of xsi:types
// invoke the service for each overloaded method, and verify the results
// boolean
String arg = "<arg0>true</arg0>";
Object expected = Boolean.TRUE;
assertEquals("Overloaded method test failed with a boolean",
expected,
rpc("overloaded", arg, true));
// boolean, string
arg = "<arg0>true</arg0><arg1>hello world</arg1>";
expected = Boolean.TRUE + "hello world";
assertEquals("Overloaded method test failed with boolean, string",
expected,
rpc("overloaded", arg, true));
// string, boolean
arg = "<arg0>hello world</arg0><arg1>true</arg1>";
expected = "hello world" + Boolean.TRUE;
assertEquals("Overloaded method test failed with string, boolean",
expected,
rpc("overloaded", arg, true));
// int
arg = "<arg0>5</arg0>";
expected = new Integer(5);
assertEquals("Overloaded method test failed with an int",
expected,
rpc("overloaded", arg, true));
// int, string
arg = "<arg0>5</arg0><arg1>hello world</arg1>";
expected = 5 + "hello world";
assertEquals("Overloaded method test failed with int, string",
expected,
rpc("overloaded", arg, true));
| public void | testReverseDataWithUntypedParam()Test a method that reverses a data structure
// invoke the service and verify the result
String arg = "<arg0 xmlns:foo=\"urn:foo\">";
arg += "<field1>5</field1><field2>abc</field2><field3>3</field3>";
arg += "</arg0>";
Data expected = new Data(3, "cba", 5);
assertEquals("Did not reverse data as expected", expected, rpc("reverseData", arg, true));
| public void | testSerReverseBodyDispatch()
String arg = "<arg0 xsi:type=\"xsd:string\">abc</arg0>";
// invoke the service and verify the result
assertEquals("Did not reverse the string as expected", "cba", rpc("reverseString", arg, false));
| public void | testSerReverseData()Test a method that reverses a data structure
// invoke the service and verify the result
String arg = "<arg0 xmlns:foo=\"urn:foo\" xsi:type=\"foo:Data\">";
arg += "<field1>5</field1><field2>abc</field2><field3>3</field3>";
arg += "</arg0>";
Data expected = new Data(3, "cba", 5);
assertEquals("Did not reverse data as expected", expected, rpc("reverseData", arg, true));
| public void | testSerReverseString()Test a simple method that reverses a string
String arg = "<arg0 xsi:type=\"xsd:string\">abc</arg0>";
// invoke the service and verify the result
assertEquals("Did not reverse the string as expected", "cba", rpc("reverseString", arg, true));
| public void | testWrappedTypes()
// boolean
String arg = "<arg0>true</arg0>";
Object expected = Boolean.TRUE;
assertEquals("method test failed with a boolean",
expected,
rpc("testBoolean", arg, true));
// boolean
arg = "<arg0>1</arg0>";
expected = Boolean.TRUE;
assertEquals("method test failed with a boolean",
expected,
rpc("testBoolean", arg, true));
// float
arg = "<arg0>NaN</arg0>";
expected = new Float(Float.NaN);
assertEquals("method test failed with a float",
expected,
rpc("testFloat", arg, true));
arg = "<arg0>INF</arg0>";
expected = new Float(Float.POSITIVE_INFINITY);
assertEquals("method test failed with a float",
expected,
rpc("testFloat", arg, true));
arg = "<arg0>-INF</arg0>";
expected = new Float(Float.NEGATIVE_INFINITY);
assertEquals("method test failed with a float",
expected,
rpc("testFloat", arg, true));
// double
arg = "<arg0>NaN</arg0>";
expected = new Double(Double.NaN);
assertEquals("method test failed with a double",
expected,
rpc("testDouble", arg, true));
arg = "<arg0>INF</arg0>";
expected = new Double(Double.POSITIVE_INFINITY);
assertEquals("method test failed with a double",
expected,
rpc("testDouble", arg, true));
arg = "<arg0>-INF</arg0>";
expected = new Double(Double.NEGATIVE_INFINITY);
assertEquals("method test failed with a double",
expected,
rpc("testDouble", arg, true));
|
|