You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ru...@apache.org on 2001/05/22 02:07:51 UTC
cvs commit: xml-axis/java/test/RPCDispatch Data.java Service.java TestRPC.java
rubys 01/05/21 17:07:51
Modified: java/test/RPCDispatch Service.java TestRPC.java
Added: java/test/RPCDispatch Data.java
Log:
Add a unit test for a more complex data structure
Revision Changes Path
1.2 +12 -1 xml-axis/java/test/RPCDispatch/Service.java
Index: Service.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/RPCDispatch/Service.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Service.java 2001/05/21 19:14:50 1.1
+++ Service.java 2001/05/22 00:07:49 1.2
@@ -8,9 +8,20 @@
/**
* Reverse the order of characters in a string
*/
- public String reverse(String input) throws Exception {
+ public String reverseString(String input) throws Exception {
String result = "";
for (int i=input.length(); i>0; ) result+=input.charAt(--i);
+ return result;
+ }
+
+ /**
+ * Reverse the order of a struct
+ */
+ public Data reverseData(Data input) throws Exception {
+ Data result = new Data();
+ result.setField1(input.getField3());
+ result.setField2(reverseString(input.getField2()));
+ result.setField3(input.getField1());
return result;
}
}
1.2 +65 -35 xml-axis/java/test/RPCDispatch/TestRPC.java
Index: TestRPC.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/RPCDispatch/TestRPC.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestRPC.java 2001/05/21 19:14:50 1.1
+++ TestRPC.java 2001/05/22 00:07:49 1.2
@@ -4,6 +4,7 @@
import org.apache.axis.*;
import org.apache.axis.handlers.soap.*;
+import org.apache.axis.encoding.*;
import org.apache.axis.message.*;
import org.apache.axis.server.*;
import org.apache.axis.registries.*;
@@ -34,11 +35,16 @@
private AxisServer engine = new AxisServer();
private HandlerRegistry hr;
private Handler RPCDispatcher;
+ private TypeMappingRegistry tmr;
+ private String SOAPAction = "urn:reverse";
+ private String methodNS = null;
+
public TestRPC(String name) {
super(name);
engine.init();
- hr = (HandlerRegistry) engine.getOption(Constants.HANDLER_REGISTRY);
+ hr = (HandlerRegistry) engine.getOption(Constants.HANDLER_REGISTRY);
+ tmr = (TypeMappingRegistry)engine.getOption(Constants.TYPEMAP_REGISTRY);
RPCDispatcher = hr.find("RPCDispatcher");
// Debug.setDebugLevel(5);
}
@@ -49,57 +55,81 @@
* @param request XML body of the request
* @return Deserialized result
*/
- private final Object rpc(String soapAction, String request) {
+ private final Object rpc(String method, Object[] parms) {
- // Wrap request in a SOAP envelope
- Message reqMessage = new Message(header+request+footer, "String");
+ // Construct the soap request
+ SOAPEnvelope envelope = new SOAPEnvelope();
+ RPCElement body = new RPCElement(method);
+ body.setNamespaceURI(methodNS);
+ envelope.addBodyElement(body);
+ for (int i=0; i<parms.length; i++) {
+ body.addParam(new RPCParam("arg"+i, parms[i]));
+ }
// Create a message context with the action and message
MessageContext msgContext = new MessageContext();
- msgContext.setRequestMessage(reqMessage);
- msgContext.setTargetService(soapAction);
+ msgContext.setRequestMessage(new Message(envelope, "SOAPEnvelope"));
+ msgContext.setTargetService(SOAPAction);
+ // Invoke the Axis engine
try {
- // Invoke the Axis engine
engine.invoke(msgContext);
-
- // Extract the response Envelope
- Message message = msgContext.getResponseMessage();
- SOAPEnvelope envelope = (SOAPEnvelope)message.getAs("SOAPEnvelope");
- assertNotNull("envelope", envelope);
-
- // Extract the body from the envelope
- RPCElement body = (RPCElement)envelope.getFirstBody();
- assertNotNull("body", body);
-
- // Extract the list of parameters from the body
- Vector arglist = body.getParams();
- assertNotNull("arglist", arglist);
- assert("param.size()>0", arglist.size()>0);
-
- // Return the first parameter
- RPCParam param = (RPCParam) arglist.get(0);
- return param.getValue();
} catch (AxisFault af) {
return af;
}
+
+ // Extract the response Envelope
+ Message message = msgContext.getResponseMessage();
+ envelope = (SOAPEnvelope)message.getAs("SOAPEnvelope");
+ assertNotNull("envelope", envelope);
+
+ // Extract the body from the envelope
+ body = (RPCElement)envelope.getFirstBody();
+ assertNotNull("body", body);
+
+ // Extract the list of parameters from the body
+ Vector arglist = body.getParams();
+ assertNotNull("arglist", arglist);
+ assert("param.size()>0", arglist.size()>0);
+
+ // Return the first parameter
+ RPCParam param = (RPCParam) arglist.get(0);
+ return param.getValue();
}
/**
* Test a simple method that reverses a string
+ */
+ public void testReverseString() throws Exception {
+ // Register the reverseString service
+ SOAPService reverse = new SOAPService(RPCDispatcher, "RPCDispatcher");
+ reverse.addOption("className", "test.RPCDispatch.Service");
+ reverse.addOption("methodName", "reverseString");
+ hr.add(SOAPAction, reverse);
+
+ // invoke the service and verify the result
+ assertEquals("cba", rpc("reverseString", new Object[] {"abc"}));
+ }
+
+ /**
+ * Test a method that reverses a data structure
*/
- public void testReverse() {
- // Register the reverse service
+ public void testReverseData() throws Exception {
+ // Register the reverseData service
SOAPService reverse = new SOAPService(RPCDispatcher, "RPCDispatcher");
reverse.addOption("className", "test.RPCDispatch.Service");
- reverse.addOption("methodName", "reverse");
- hr.add("urn:reverse", reverse);
-
- // Invoke the service
- Object response =
- rpc("urn:reverse", "<reverse><arg>abc</arg></reverse>");
+ reverse.addOption("methodName", "reverseData");
+ hr.add(SOAPAction, reverse);
- // Verify the result
- assertEquals("cba", response);
+ // register the Data class
+ QName qn = new QName("http://xml.apache.org/Axis", "TestRPC");
+ Class cls = Data.class;
+ tmr.addSerializer(cls, qn, new BeanSerializer(cls));
+ tmr.addDeserializerFactory(qn, cls, BeanSerializer.getFactory(cls));
+
+ // invoke the service and verify the result
+ Data input = new Data(5, "abc", 3);
+ Data expected = new Data(3, "cba", 5);
+ assertEquals(expected, rpc("reverseData", new Object[] {input}));
}
}
1.1 xml-axis/java/test/RPCDispatch/Data.java
Index: Data.java
===================================================================
package test.RPCDispatch;
/**
* Test structure used by the RPCDispatch test
*
* @author Sam Ruby <ru...@us.ibm.com>
*/
public class Data {
// items of the structure. Defined as Objects so as to permit nulls
private int field1;
private String field2;
private int field3;
/**
* null constructor
*/
public Data() {}
/**
* convenience constructor that sets all of the fields
*/
public Data(int field1, String field2, int field3) {
this.field1=field1;
this.field2=field2;
this.field3=field3;
}
/**
* bean getter for field1
*/
public int getField1() {
return field1;
}
/**
* bean setter for field1
*/
public void setField1 (int field1) {
this.field1=field1;
}
/**
* bean getter for field2
*/
public String getField2() {
return field2;
}
/**
* bean setter for field2
*/
public void setField2 (String field2) {
this.field2=field2;
}
/**
* bean getter for field3
*/
public int getField3() {
return field3;
}
/**
* bean setter for field3
*/
public void setField3 (int field3) {
this.field3=field3;
}
/**
* Equality comparison.
*/
public boolean equals(Object object) {
if (!(object instanceof Data)) return false;
Data that= (Data) object;
if (this.field1 != that.field1) return false;
if (this.field3 != that.field3) return false;
if (this.field2 == null) {
if (that.field2 != null) return false;
} else {
if (!this.field2.equals(that.field2)) return false;
}
return true;
};
}