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;
      };
  }