gdaniels    02/04/23 09:25:39

  Modified:    java/samples/message MessageService.java
               java/samples/misc TestClient.java
               java/src/org/apache/axis/description ServiceDesc.java
               java/src/org/apache/axis/message RPCElement.java
               java/src/org/apache/axis/providers/java MsgProvider.java
               java/src/org/apache/axis/utils Admin.java
               java/test/encoding PackageTests.java
  Added:       java/test/encoding TestOmittedValues.java
  Log:
  * Fix http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8193
  
  * Add unit test for omitted value == null
  
  * Remove search for method with MessageContext argument from
    MsgProvider, and fix the services that used to use it.
  
  * Javadoc cleanup
  
  Revision  Changes    Path
  1.2       +1 -1      xml-axis/java/samples/message/MessageService.java
  
  Index: MessageService.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/samples/message/MessageService.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MessageService.java       17 Dec 2001 00:57:41 -0000      1.1
  +++ MessageService.java       23 Apr 2002 16:25:38 -0000      1.2
  @@ -5,7 +5,7 @@
   import java.util.Vector ;
   
   public class MessageService {
  -    public Element[] echoElements(MessageContext msgC, Vector elems) {
  +    public Element[] echoElements(Vector elems) {
           Element[]  result = new Element[elems.size()];
   
           for ( int i = 0 ; i < elems.size() ; i++ )
  
  
  
  1.17      +1 -1      xml-axis/java/samples/misc/TestClient.java
  
  Index: TestClient.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/samples/misc/TestClient.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- TestClient.java   8 Feb 2002 22:14:11 -0000       1.16
  +++ TestClient.java   23 Apr 2002 16:25:38 -0000      1.17
  @@ -84,7 +84,7 @@
        * Send a hardcoded message to the server, and print the response.
        *
        * @param args the command line arguments (mainly for specifying URL)
  -     * @param service an optional service argument, which will be used for
  +     * @param op an optional service argument, which will be used for
        * specifying the transport-level service
        */
       public static String doTest (String args[], String op) throws Exception {
  
  
  
  1.20      +3 -2      xml-axis/java/src/org/apache/axis/description/ServiceDesc.java
  
  Index: ServiceDesc.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/description/ServiceDesc.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- ServiceDesc.java  19 Apr 2002 14:03:14 -0000      1.19
  +++ ServiceDesc.java  23 Apr 2002 16:25:38 -0000      1.20
  @@ -675,12 +675,13 @@
           // Make an OperationDesc, fill in common stuff
           OperationDesc operation = new OperationDesc();
           operation.setName(method.getName());
  +        String defaultNS = "";
           if (namespaceMappings != null && !namespaceMappings.isEmpty()) {
               // If we have a default namespace mapping, require callers to
               // use that namespace.
  -            String defaultNS = (String)namespaceMappings.get(0);
  -            operation.setElementQName(new QName(defaultNS, method.getName()));
  +            defaultNS = (String)namespaceMappings.get(0);
           }
  +        operation.setElementQName(new QName(defaultNS, method.getName()));
           operation.setMethod(method);
           Class retClass = method.getReturnType();
           operation.setReturnClass(retClass);
  
  
  
  1.55      +1 -1      xml-axis/java/src/org/apache/axis/message/RPCElement.java
  
  Index: RPCElement.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/RPCElement.java,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- RPCElement.java   23 Apr 2002 03:54:26 -0000      1.54
  +++ RPCElement.java   23 Apr 2002 16:25:38 -0000      1.55
  @@ -174,7 +174,7 @@
   
               for (int i = 0; i < operations.length; i++) {
                   OperationDesc operation = operations[i];
  -                if (operation.getNumInParams() == numParams) {
  +                if (operation.getNumInParams() >= numParams) {
                       // Set the operation so the RPCHandler can get at it
                       rpcHandler.setOperation(operation);
                       try {
  
  
  
  1.24      +1 -44     
xml-axis/java/src/org/apache/axis/providers/java/MsgProvider.java
  
  Index: MsgProvider.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/providers/java/MsgProvider.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- MsgProvider.java  20 Feb 2002 18:59:21 -0000      1.23
  +++ MsgProvider.java  23 Apr 2002 16:25:39 -0000      1.24
  @@ -57,7 +57,6 @@
   
   import org.apache.axis.Handler;
   import org.apache.axis.MessageContext;
  -import org.apache.axis.AxisFault;
   import org.apache.axis.message.SOAPBodyElement;
   import org.apache.axis.message.SOAPEnvelope;
   import org.apache.axis.utils.JavaUtils;
  @@ -66,7 +65,6 @@
   import org.w3c.dom.Element;
   
   import java.lang.reflect.Method;
  -import java.lang.reflect.InvocationTargetException;
   import java.util.Vector;
   
   /**
  @@ -84,7 +82,6 @@
                                   SOAPEnvelope reqEnv,
                                   SOAPEnvelope resEnv,
                                   JavaClass jc,
  -                    
                                   Object obj)
           throws Exception
       {
  @@ -115,9 +112,7 @@
               Vector                bodies  = reqEnv.getBodyElements();
               SOAPBodyElement       reqBody = reqEnv.getFirstBody();
               NoSuchMethodException exp2 = null ;
  -            Object                anElement = 
  -                                    clsLoader.loadClass("org.w3c.dom.Element");
  -            
  +
               doc = reqBody.getAsDOM().getOwnerDocument();
   
               Vector newBodies = new Vector();
  @@ -154,28 +149,6 @@
               catch( NoSuchMethodException exp ) {exp2 = exp;}
   
               if ( method == null ) {
  -              // Try again with a msgContext first
  -              /////////////////////////////////////////////////////////////////
  -                argClasses = new Class[2];
  -                argObjects = new Object[2];
  -                argClasses[0] = 
clsLoader.loadClass("org.apache.axis.MessageContext");
  -                argClasses[1] = clsLoader.loadClass("java.util.Vector");
  -                argObjects[0] = msgContext ;
  -                argObjects[1] = bodies ;
  -
  -                try {
  -                    method = jc.getJavaClass().getMethod( methodName, argClasses );
  -                    Element[] result = (Element[]) method.invoke( obj, argObjects 
);        
  -                    if ( result != null ) {
  -                        for ( int i = 0 ; i < result.length ; i++ )
  -                            resEnv.addBodyElement( new SOAPBodyElement(result[i]));
  -                    }
  -                    return ;
  -                }
  -                catch( NoSuchMethodException exp ) {exp2 = exp;}
  -            }
  -
  -            if ( method == null ) {
                 // Try the the simplest case first - just Document as the param 
                 /////////////////////////////////////////////////////////////////
                   argClasses = new Class[1];
  @@ -183,22 +156,6 @@
                   argClasses[0] = clsLoader.loadClass("org.w3c.dom.Document");
                   argObjects[0] = doc ;
   
  -                try {
  -                    method = jc.getJavaClass().getMethod( methodName, argClasses );
  -                }
  -                catch( NoSuchMethodException exp ) {exp2 = exp;}
  -            }
  -
  -            if ( method == null ) {
  -              // Ok, no match - so now add MessageContext as the first param
  -              // and try it again
  -              ///////////////////////////////////////////////////////////////
  -                argClasses = new Class[2];
  -                argObjects = new Object[2];
  -                argClasses[0] = 
clsLoader.loadClass("org.apache.axis.MessageContext");
  -                argClasses[1] = clsLoader.loadClass("org.w3c.dom.Document");
  -                argObjects[0] = msgContext ;
  -                argObjects[1] = doc ;
                   try {
                       method = jc.getJavaClass().getMethod( methodName, argClasses );
                   }
  
  
  
  1.107     +2 -1      xml-axis/java/src/org/apache/axis/utils/Admin.java
  
  Index: Admin.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/Admin.java,v
  retrieving revision 1.106
  retrieving revision 1.107
  diff -u -r1.106 -r1.107
  --- Admin.java        29 Mar 2002 15:05:21 -0000      1.106
  +++ Admin.java        23 Apr 2002 16:25:39 -0000      1.107
  @@ -168,9 +168,10 @@
       /**
        * Process a given XML document - needs cleanup.
        */
  -    public Element[] AdminService(MessageContext msgContext, Vector xml)
  +    public Element[] AdminService(Vector xml)
           throws Exception
       {
  +        MessageContext msgContext = MessageContext.getCurrentContext();
           log.debug(JavaUtils.getMessage("enter00", "Admin:AdminService") );
           Document doc = process( msgContext, (Element) xml.get(0) );
           Element[] result = new Element[1];
  
  
  
  1.16      +1 -0      xml-axis/java/test/encoding/PackageTests.java
  
  Index: PackageTests.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/encoding/PackageTests.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- PackageTests.java 21 Mar 2002 18:05:28 -0000      1.15
  +++ PackageTests.java 23 Apr 2002 16:25:39 -0000      1.16
  @@ -34,6 +34,7 @@
           suite.addTestSuite(TestAttributes.class);
           suite.addTestSuite(TestBeanDeser.class);
           suite.addTestSuite(TestRoundTrip.class);
  +        suite.addTestSuite(TestOmittedValues.class);
   
           return suite;
       }
  
  
  
  1.1                  xml-axis/java/test/encoding/TestOmittedValues.java
  
  Index: TestOmittedValues.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package test.encoding;
  
  import junit.framework.TestCase;
  import org.apache.axis.Message;
  import org.apache.axis.Constants;
  import org.apache.axis.MessageContext;
  import org.apache.axis.message.SOAPEnvelope;
  import org.apache.axis.message.RPCElement;
  import org.apache.axis.message.RPCParam;
  import org.apache.axis.description.ServiceDesc;
  import org.apache.axis.description.OperationDesc;
  import org.apache.axis.description.ParameterDesc;
  import org.apache.axis.providers.java.RPCProvider;
  import org.apache.axis.handlers.soap.SOAPService;
  import org.apache.axis.transport.local.LocalTransport;
  import org.apache.axis.configuration.BasicServerConfig;
  import org.apache.axis.server.AxisServer;
  import org.apache.axis.client.Call;
  import org.apache.axis.client.Service;
  
  import javax.xml.rpc.namespace.QName;
  
  /**
   * A test which confirms that we can correctly call methods where null arguments
   * are represented by omission from the SOAP envelope.
   *
   * @author Glen Daniels ([EMAIL PROTECTED])
   */
  public class TestOmittedValues extends TestCase {
      String header =
          "<?xml version=\"1.0\"?>\n" +
          "<soap:Envelope " +
            "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"; " +
            "xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"; " +
            "xmlns:me=\"urn:me\" " +
            "xmlns:xsi=\"" + Constants.URI_2001_SCHEMA_XSI + "\" " +
            "xmlns:xsd=\"" + Constants.URI_2001_SCHEMA_XSD + "\">\n" +
            "<soap:Body>\n" +
              "<method>\n";
  
      String missingParam2 =
            "   <param1 xsi:type=\"xsd:string\">One</param1>\n" +
            "   <param3 xsi:type=\"xsd:string\">Three</param3>\n";
  
      String footer =
              "</method>\n" +
            "</soap:Body>\n" +
          "</soap:Envelope>\n";
  
      public TestOmittedValues(String s) {
          super(s);
      }
  
      public TestOmittedValues() {
          super("service version");
      }
  
      public void testOmittedValue() throws Exception {
          // Set up a server and deploy our service
          BasicServerConfig config = new BasicServerConfig();
          AxisServer server = new AxisServer(config);
  
          SOAPService service = new SOAPService(new RPCProvider());
          service.setOption("className", "test.encoding.TestOmittedValues");
          service.setOption("allowedMethods", "*");
  
          ServiceDesc desc = service.getServiceDescription();
          // We need parameter descriptors to make sure we can match by name
          // (the only way omitted==null can work).
          ParameterDesc [] params = new ParameterDesc [] {
              new ParameterDesc(new QName("", "param1"), ParameterDesc.IN, null),
              new ParameterDesc(new QName("", "param2"), ParameterDesc.IN, null),
              new ParameterDesc(new QName("", "param3"), ParameterDesc.IN, null),
          };
          OperationDesc oper = new OperationDesc("method", params, null);
          desc.addOperationDesc(oper);
          config.deployService("testOmittedValue", service);
  
          String msg = header + missingParam2 + footer;
          Message message = new Message(msg);
          MessageContext context = new MessageContext(server);
          context.setRequestMessage(message);
  
          Call call = new Call(new Service());
  
          LocalTransport transport = new LocalTransport(server);
          transport.setRemoteService("testOmittedValue");
  
          call.setTransport(transport);
  
          SOAPEnvelope resEnv = call.invoke(message.getSOAPEnvelope());
          RPCElement rpcElem = (RPCElement)resEnv.getFirstBody();
          RPCParam param = (RPCParam)rpcElem.getParams().get(0);
          assertEquals("OK!", param.getValue());
      }
  
      // Server-side test method for omitting values
      public String method(String p1, String p2, String p3) {
          if (p1.equals("One") && p2 == null && p3.equals("Three")) {
              return "OK!";
          }
          return "Bad arguments!";
      }
  }
  
  
  


Reply via email to