gdaniels    2002/12/04 12:12:05

  Modified:    java/src/org/apache/axis MessageContext.java
               java/src/org/apache/axis/client Call.java
               java/src/org/apache/axis/configuration SimpleProvider.java
               java/src/org/apache/axis/description ServiceDesc.java
               java/src/org/apache/axis/encoding
                        SerializationContextImpl.java
               java/src/org/apache/axis/handlers/soap SOAPService.java
               java/src/org/apache/axis/i18n resource.properties
               java/src/org/apache/axis/message SOAPBody.java
               java/src/org/apache/axis/server server-config.wsdd
               java/test GenericLocalTest.java
               java/test/encoding TestArrayListConversions.java
               java/test/functional TestJWSGlobalTypes.java
  Added:       java/test/encoding TestGlobalTypeMappings.java
  Log:
  Start a simple test to confirm global type mappings work in both
  RPC and Document scenarios.  Along the way, did a bunch of
  cleanup.
  
  * Make Call.setReturnClass() do more - in particular it now sets
    the return XML type if possible.  This means you need to call
    addParameter() if using it, just like for setReturnType().
  
  * Throw an IllegalArgumentException if trying to pass null to
    SOAPService.setEngine()
  
  * Make sure we delegate to the engine's registry in setEngine()
  
  * Remove the separate fields for Use and Style in the MC, as
    discussed on the list earlier.  The MC now uses the versions in
    the OperationDesc/ServiceDesc.
  
  * Default Use based on Style, so if you set Style=DOCUMENT for
    a ServiceDesc, the default Use changes to LITERAL automatically.
  
  * Remove unused stuff in server-config.wsdd per Doug's email
  
  * Make sure we don't bother with multirefs if the MessageContext
    isEncoded() method returns false (SerializationContextImpl)
  
  * Style-enable GenericLocalTest
  
  * Random bits of cleanup (unused imports, etc)
  
  Revision  Changes    Path
  1.125     +21 -38    xml-axis/java/src/org/apache/axis/MessageContext.java
  
  Index: MessageContext.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/MessageContext.java,v
  retrieving revision 1.124
  retrieving revision 1.125
  diff -u -r1.124 -r1.125
  --- MessageContext.java       9 Oct 2002 19:06:28 -0000       1.124
  +++ MessageContext.java       4 Dec 2002 20:12:03 -0000       1.125
  @@ -186,9 +186,7 @@
        */
       private String  username       = null;
       private String  password       = null;
  -    private Style   operationStyle = Style.RPC;
  -    private Use     operationUse   = Use.ENCODED;
  -    private String  encodingStyle  = operationUse.getEncoding();
  +    private String  encodingStyle  = Use.ENCODED.getEncoding();
       private boolean useSOAPAction  = false;
       private String  SOAPActionURI  = null;
   
  @@ -248,8 +246,6 @@
               ServiceDesc desc = serviceHandler.getInitializedServiceDesc(this);
   
               if (desc != null) {
  -                setOperationStyle(desc.getStyle());
  -                setOperationUse(desc.getUse());
                   if (desc.getStyle() != Style.DOCUMENT) {
                       possibleOperations = desc.getOperationsByQName(qname);
                   } else {
  @@ -434,7 +430,7 @@
        * Encoding
        */
       public boolean isEncoded() {
  -        return (operationUse == Use.ENCODED);
  +        return (getOperationUse() == Use.ENCODED);
           //return soapConstants.getEncodingURI().equals(encodingStyle);
       }
   
  @@ -644,11 +640,9 @@
           serviceHandler = sh;
           if (sh != null) {
               targetService = sh.getName();
  -            SOAPService service = (SOAPService)sh;
  +            SOAPService service = sh;
               TypeMappingRegistry tmr = service.getTypeMappingRegistry();
               setTypeMappingRegistry(tmr);
  -            setOperationStyle(service.getStyle());
  -            setOperationUse(service.getUse());
   
               // styles are not "soap version aware" so compensate...
               setEncodingStyle(service.getUse().getEncoding());
  @@ -798,19 +792,6 @@
               }
               setMaintainSession(((Boolean) value).booleanValue());
           }
  -        else if (name.equals(Call.OPERATION_STYLE_PROPERTY)) {
  -            if (!(value instanceof String)) {
  -                throw new IllegalArgumentException(
  -                        Messages.getMessage("badProp00", new String[] {
  -                        name, "java.lang.String", value.getClass().getName()}));
  -            }
  -            setOperationStyle(Style.getStyle((String)value, Style.DEFAULT));
  -            if (getOperationStyle() == Style.RPC) {
  -                setOperationUse(Use.ENCODED);
  -            } else if (getOperationStyle() == Style.DOCUMENT) {
  -                setOperationUse(Use.LITERAL);
  -            }
  -        }
           else if (name.equals(Call.SOAPACTION_USE_PROPERTY)) {
               if (!(value instanceof Boolean)) {
                   throw new IllegalArgumentException(
  @@ -940,31 +921,33 @@
       } // getPassword
   
       /**
  -     * Set the operation style.
  -     */
  -    public void setOperationStyle(Style operationStyle) {
  -        this.operationStyle = operationStyle;
  -    } // setOperationStyle
  -
  -    /**
        * Get the operation style.
        */
       public Style getOperationStyle() {
  -        return operationStyle;
  -    } // getOperationStyle
  +        if (currentOperation != null) {
  +            return currentOperation.getStyle();
  +        }
   
  -    /**
  -     * Set the operation use.
  -     */
  -    public void setOperationUse(Use operationUse) {
  -        this.operationUse = operationUse;
  -    } // setOperationUse
  +        if (serviceHandler != null) {
  +            return serviceHandler.getStyle();
  +        }
  +
  +        return Style.RPC;
  +    } // getOperationStyle
   
       /**
        * Get the operation use.
        */
       public Use getOperationUse() {
  -        return operationUse;
  +        if (currentOperation != null) {
  +            return currentOperation.getUse();
  +        }
  +
  +        if (serviceHandler != null) {
  +            return serviceHandler.getUse();
  +        }
  +
  +        return Use.ENCODED;
       } // getOperationUse
   
       /**
  
  
  
  1.193     +13 -2     xml-axis/java/src/org/apache/axis/client/Call.java
  
  Index: Call.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/Call.java,v
  retrieving revision 1.192
  retrieving revision 1.193
  diff -u -r1.192 -r1.193
  --- Call.java 3 Nov 2002 16:51:49 -0000       1.192
  +++ Call.java 4 Dec 2002 20:12:03 -0000       1.193
  @@ -1087,6 +1087,19 @@
        * @param cls the desired return class.
        */
       public void setReturnClass(Class cls) {
  +        if (operationSetManually) {
  +            throw new RuntimeException(
  +                    Messages.getMessage("operationAlreadySet"));
  +        }
  +
  +        if (operation == null)
  +            operation = new OperationDesc();
  +
  +        operation.setReturnClass(cls);
  +        TypeMapping tm = getTypeMapping();
  +        operation.setReturnType(tm.getTypeQName(cls));
  +        parmAndRetReq = true;
  +
           returnJavaType = cls;
       }
   
  @@ -2273,8 +2286,6 @@
               operation.setStyle(getOperationStyle());
               operation.setUse(getOperationUse());
           }
  -        msgContext.setOperationStyle(getOperationStyle());
  -        msgContext.setOperationUse(getOperationUse());
   
           if (useSOAPAction) {
               msgContext.setUseSOAPAction(true);
  
  
  
  1.8       +2 -2      
xml-axis/java/src/org/apache/axis/configuration/SimpleProvider.java
  
  Index: SimpleProvider.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/configuration/SimpleProvider.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SimpleProvider.java       11 Jun 2002 14:53:52 -0000      1.7
  +++ SimpleProvider.java       4 Dec 2002 20:12:03 -0000       1.8
  @@ -70,7 +70,6 @@
   import java.util.HashMap;
   import java.util.Iterator;
   import java.util.ArrayList;
  -import java.util.Set;
   
   /**
    * A SimpleProvider is an EngineConfiguration which contains a simple
  @@ -243,7 +242,8 @@
       public void deployService(QName qname, SOAPService service)
       {
           services.put(qname, service);
  -        service.setEngine(engine);
  +        if (engine != null)
  +            service.setEngine(engine);
       }
   
       public void deployService(String name, SOAPService service)
  
  
  
  1.68      +10 -0     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.67
  retrieving revision 1.68
  diff -u -r1.67 -r1.68
  --- ServiceDesc.java  14 Oct 2002 20:02:21 -0000      1.67
  +++ ServiceDesc.java  4 Dec 2002 20:12:03 -0000       1.68
  @@ -116,6 +116,11 @@
       private Style style = Style.RPC;
       private Use   use   = Use.ENCODED;
   
  +    // Style and Use are related.  By default, if Style==RPC, Use should be
  +    // ENCODED.  But if Style==DOCUMENT, Use should be LITERAL.  So we want
  +    // to keep the defaults synced until someone explicitly sets the Use.
  +    private boolean useSet = false;
  +
       /** Implementation class */
       private Class implClass = null;
   
  @@ -191,6 +196,10 @@
   
       public void setStyle(Style style) {
           this.style = style;
  +        if (!useSet) {
  +            // Use hasn't been explicitly set, so track style
  +            use = style == Style.RPC ? Use.ENCODED : Use.LITERAL;
  +        }
       }
   
       /**
  @@ -202,6 +211,7 @@
       }
   
       public void setUse(Use use) {
  +        useSet = true;
           this.use = use;
       }
   
  
  
  
  1.82      +2 -1      
xml-axis/java/src/org/apache/axis/encoding/SerializationContextImpl.java
  
  Index: SerializationContextImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/SerializationContextImpl.java,v
  retrieving revision 1.81
  retrieving revision 1.82
  diff -u -r1.81 -r1.82
  --- SerializationContextImpl.java     2 Dec 2002 19:12:12 -0000       1.81
  +++ SerializationContextImpl.java     4 Dec 2002 20:12:04 -0000       1.82
  @@ -681,7 +681,8 @@
           // hashCode() and equals() methods have been overloaded to make two
           // Objects appear equal.
   
  -        if (doMultiRefs && (value != forceSer) && !isPrimitive(value)) {
  +        if (doMultiRefs && (msgContext == null || msgContext.isEncoded()) &&
  +                (value != forceSer) && !isPrimitive(value)) {
               if (multiRefIndex == -1)
                   multiRefValues = new HashMap();
   
  
  
  
  1.89      +5 -0      xml-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java
  
  Index: SOAPService.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java,v
  retrieving revision 1.88
  retrieving revision 1.89
  diff -u -r1.88 -r1.89
  --- SOAPService.java  19 Nov 2002 23:28:08 -0000      1.88
  +++ SOAPService.java  4 Dec 2002 20:12:04 -0000       1.89
  @@ -276,7 +276,12 @@
        */
       public void setEngine(AxisEngine engine)
       {
  +        if (engine == null)
  +            throw new IllegalArgumentException(
  +                    Messages.getMessage("nullEngine"));
  +
           this.engine = engine;
  +        getTypeMappingRegistry().delegate(engine.getTypeMappingRegistry());
       }
   
       public AxisEngine getEngine() {
  
  
  
  1.35      +1 -0      xml-axis/java/src/org/apache/axis/i18n/resource.properties
  
  Index: resource.properties
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/i18n/resource.properties,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- resource.properties       2 Dec 2002 19:12:12 -0000       1.34
  +++ resource.properties       4 Dec 2002 20:12:04 -0000       1.35
  @@ -1079,3 +1079,4 @@
   cantLoadByecode=Unable to load bytecode for class "{0}"
   
   wsdlFileMissing=Unable to find WSDL file or resource {0}
  +nullEngine=Null engine passed to SOAPService.setEngine()!
  
  
  
  1.35      +1 -1      xml-axis/java/src/org/apache/axis/message/SOAPBody.java
  
  Index: SOAPBody.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPBody.java,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- SOAPBody.java     20 Nov 2002 03:13:42 -0000      1.34
  +++ SOAPBody.java     4 Dec 2002 20:12:04 -0000       1.35
  @@ -143,7 +143,7 @@
               // Output this body element.
           }
           
  -        // Output multi-refs
  +        // Output multi-refs if appropriate
           context.outputMultiRefs();
           
           // Output </SOAP-ENV:Body>
  
  
  
  1.14      +1 -3      xml-axis/java/src/org/apache/axis/server/server-config.wsdd
  
  Index: server-config.wsdd
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/server/server-config.wsdd,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- server-config.wsdd        6 Sep 2002 01:21:08 -0000       1.13
  +++ server-config.wsdd        4 Dec 2002 20:12:05 -0000       1.14
  @@ -26,9 +26,7 @@
      -->
    </globalConfiguration>
   
  - <handler type="java:org.apache.axis.providers.java.RPCProvider" 
name="RPCDispatcher"/>
    <handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>
  - <handler type="java:org.apache.axis.providers.java.MsgProvider" 
name="MsgDispatcher"/>
    <handler type="java:org.apache.axis.transport.local.LocalResponder" 
name="LocalResponder"/>
    <handler type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" 
name="Authenticate"/>
   
  @@ -53,7 +51,7 @@
   
    <transport name="local">
     <responseFlow>
  -   <handler type="java:org.apache.axis.transport.local.LocalResponder"/>
  +   <handler type="LocalResponder"/>
     </responseFlow>
    </transport>
   
  
  
  
  1.2       +5 -2      xml-axis/java/test/GenericLocalTest.java
  
  Index: GenericLocalTest.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/GenericLocalTest.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- GenericLocalTest.java     1 Dec 2002 19:48:17 -0000       1.1
  +++ GenericLocalTest.java     4 Dec 2002 20:12:05 -0000       1.2
  @@ -61,6 +61,7 @@
   import org.apache.axis.transport.local.LocalTransport;
   import org.apache.axis.configuration.SimpleProvider;
   import org.apache.axis.configuration.BasicServerConfig;
  +import org.apache.axis.enum.Style;
   import junit.framework.TestCase;
   
   /**
  @@ -129,7 +130,7 @@
        * Convenience method to deploy ourselves as a service
        */ 
       public void deploy() {
  -        deploy("service", this.getClass());
  +        deploy("service", this.getClass(), Style.RPC);
       }
   
       /**
  @@ -139,10 +140,12 @@
        * @param serviceName the name under which to deploy the service.
        * @param target class of the service.
        */ 
  -    public void deploy(String serviceName, Class target) {
  +    public void deploy(String serviceName, Class target, Style style) {
           String className = target.getName();
   
           SOAPService service = new SOAPService(new RPCProvider());
  +        service.setStyle(style);
  +
           service.setOption("className", className);
           service.setOption("allowedMethods", "*");
   
  
  
  
  1.22      +2 -1      xml-axis/java/test/encoding/TestArrayListConversions.java
  
  Index: TestArrayListConversions.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/encoding/TestArrayListConversions.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- TestArrayListConversions.java     6 Aug 2002 03:55:05 -0000       1.21
  +++ TestArrayListConversions.java     4 Dec 2002 20:12:05 -0000       1.22
  @@ -8,10 +8,10 @@
   import org.apache.axis.server.AxisServer;
   import org.apache.axis.transport.local.LocalTransport;
   import org.apache.axis.configuration.SimpleProvider;
  -import org.apache.axis.encoding.DefaultTypeMappingImpl;
   import org.apache.axis.description.ServiceDesc;
   
   import javax.xml.namespace.QName;
  +import javax.xml.rpc.ParameterMode;
   import java.util.Iterator;
   import java.util.LinkedList;
   import java.util.List;
  @@ -124,6 +124,7 @@
           l.add("This will be a SOAP Array then a Vector!");
   
           call.setOperationName(new QName(SERVICE_NAME, "echoArray"));
  +        call.addParameter("arg0", null, LinkedList.class, ParameterMode.IN);
           call.setReturnClass(Vector.class);
           Object ret = call.invoke(new Object[]{l});
           assertEquals("Return wasn't a Vector!", Vector.class, ret.getClass());
  
  
  
  1.1                  xml-axis/java/test/encoding/TestGlobalTypeMappings.java
  
  Index: TestGlobalTypeMappings.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 test.GenericLocalTest;
  import org.apache.axis.encoding.TypeMapping;
  import org.apache.axis.encoding.ser.BeanSerializerFactory;
  import org.apache.axis.encoding.ser.BeanDeserializerFactory;
  import org.apache.axis.enum.Style;
  import org.apache.axis.client.Call;
  
  import javax.xml.namespace.QName;
  import javax.xml.rpc.ParameterMode;
  
  /**
   * Confirm that global type mappings work in both RPC and Document
   * contexts.
   *
   * @author Glen Daniels ([EMAIL PROTECTED])
   */
  public class TestGlobalTypeMappings extends GenericLocalTest {
      private QName TYPE_QNAME = new QName("ns", "dataType");
  
      public TestGlobalTypeMappings() {
          super("service");
      }
  
      public TestGlobalTypeMappings(String s) {
          super(s);
      }
  
      protected void setUp() throws Exception {
          super.setUp(false); // don't deploy here
          TypeMapping tm = (TypeMapping)config.getTypeMappingRegistry().
                  getDefaultTypeMapping();
          tm.register(Data.class, TYPE_QNAME,
                      new BeanSerializerFactory(Data.class, TYPE_QNAME),
                      new BeanDeserializerFactory(Data.class, TYPE_QNAME));
      }
  
      public void testDocLit() throws Exception {
          deploy("service", this.getClass(), Style.WRAPPED);
          Call call = getCall();
          call.setOperationStyle("wrapped");
          call.setOperationUse("literal");
          call.setEncodingStyle("");
          call.registerTypeMapping(Data.class, TYPE_QNAME,
                      new BeanSerializerFactory(Data.class, TYPE_QNAME),
                      new BeanDeserializerFactory(Data.class, TYPE_QNAME));
          call.setReturnClass(Data.class);
          call.addParameter("arg0", TYPE_QNAME, ParameterMode.IN);
          Data data = new Data();
          data.stringMember = "doc lit test";
          data.floatMember = new Float(451.0F);
          call.invoke("echoData", new Object [] { data });
      }
  
      /**
       * Our service method.  We'll deploy this several ways.
       *
       * @param data
       * @return
       */
      public Data echoData(Data data) {
          return data;
      }
  }
  
  
  
  1.5       +0 -1      xml-axis/java/test/functional/TestJWSGlobalTypes.java
  
  Index: TestJWSGlobalTypes.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/functional/TestJWSGlobalTypes.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestJWSGlobalTypes.java   11 Jun 2002 14:54:03 -0000      1.4
  +++ TestJWSGlobalTypes.java   4 Dec 2002 20:12:05 -0000       1.5
  @@ -1,7 +1,6 @@
   /*
    * The Apache Software License, Version 1.1
    *
  - *
    * Copyright (c) 2002 The Apache Software Foundation.  All rights
    * reserved.
    *
  
  
  


Reply via email to