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 gd...@apache.org on 2003/04/22 19:40:16 UTC

cvs commit: xml-axis/java/test/functional TestJAXMSamples.java

gdaniels    2003/04/22 10:40:16

  Modified:    java/src/org/apache/axis/encoding
                        DeserializationContextImpl.java
               java/src/org/apache/axis/encoding/ser ArrayDeserializer.java
               java/src/org/apache/axis/handlers/soap SOAPService.java
               java/src/org/apache/axis/i18n resource.properties
               java/src/org/apache/axis/message RPCElement.java
               java/src/org/apache/axis/utils JavaUtils.java
               java/src/org/apache/axis/wsdl/fromJava Emitter.java
                        Types.java
               java/test/RPCDispatch Service.java TestSerializedRPC.java
               java/test/functional TestJAXMSamples.java
  Log:
  Fix bugs:
  
  http://nagoya.apache.org/bugzilla/show_bug.cgi?id=18848
  http://nagoya.apache.org/bugzilla/show_bug.cgi?id=19095
  http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16519
  
  * Types.java
  
    Carry serviceDesc around so we can keep track of style, and
    use that info to decide whether to put in the schema import
    of the SOAP-ENC namespace.
  
  * TestSerializedRPC.java / Service.java
  
    Add a test to ensure that String -> String[] conversion will
    NOT occur for encoded arrays, since it's illegal.
  
  * TestJAXMSamples.java
  
    Temporarily comment out testUDDIPing(), since there seems to
    be a timeout problem with the server?
  
  * SOAPService.java
  
    Remove old TODO comment
  
  * JavaUtils.java / RPCElement.java
  
    Change isConvertable() to take a boolean which indicates
    whether we're in an encoded context.  If so, we should
    NOT allow a conversion from a component type to an array
    of that type.  This code needs to be cleaned up further
    post-1.1.
  
  * Emitter.java
  
    Set style in serviceDesc2 from style in serviceDesc if
    appropriate.  Ensure a namespace is always present when
    writing params for non-RPC services.  If no namespace in
    the serviceDesc, use a default one.
  
  * ArrayDeserializer.java
  
    Throw a fault if non-whitespace characters are encountered
    in an array which should only have child elements.
  
  Revision  Changes    Path
  1.75      +15 -1     xml-axis/java/src/org/apache/axis/encoding/DeserializationContextImpl.java
  
  Index: DeserializationContextImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/DeserializationContextImpl.java,v
  retrieving revision 1.74
  retrieving revision 1.75
  diff -u -r1.74 -r1.75
  --- DeserializationContextImpl.java	18 Feb 2003 13:19:37 -0000	1.74
  +++ DeserializationContextImpl.java	22 Apr 2003 17:39:55 -0000	1.75
  @@ -413,7 +413,21 @@
               } else if (localName.equals(Constants.SOAP_BYTE.getLocalPart())) {
                   typeQName = Constants.SOAP_BYTE;
               }
  -
  +        }
  +        
  +        // If we still have no luck, check to see if there's an arrayType
  +        // (itemType for SOAP 1.2) attribute, in which case this is almost
  +        // certainly an array.
  +        
  +        if (typeQName == null && attrs != null) {
  +            String encURI = getSOAPConstants().getEncodingURI();
  +            String itemType = getSOAPConstants().getAttrItemType();
  +            for (int i = 0; i < attrs.getLength(); i++) {
  +                if (encURI.equals(attrs.getURI(i)) &&
  +                        itemType.equals(attrs.getLocalName(i))) {
  +                    return new QName(encURI, "Array");
  +                }
  +            }
           }
   
           return typeQName;
  
  
  
  1.36      +7 -0      xml-axis/java/src/org/apache/axis/encoding/ser/ArrayDeserializer.java
  
  Index: ArrayDeserializer.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/ArrayDeserializer.java,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- ArrayDeserializer.java	24 Feb 2003 19:54:01 -0000	1.35
  +++ ArrayDeserializer.java	22 Apr 2003 17:39:56 -0000	1.36
  @@ -512,6 +512,13 @@
           return (SOAPHandler)dSer;
       }
   
  +    public void characters(char[] chars, int i, int i1) throws SAXException {
  +        for (int idx = i; i < i1; i++) {
  +            if (!Character.isWhitespace(chars[idx]))
  +                throw new SAXException(Messages.getMessage("charsInArray"));            
  +        }
  +    }
  +
       /**
        * set is called during deserialization to assign
        * the Object value to the array position indicated by hint.
  
  
  
  1.96      +4 -2      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.95
  retrieving revision 1.96
  diff -u -r1.95 -r1.96
  --- SOAPService.java	8 Apr 2003 02:22:37 -0000	1.95
  +++ SOAPService.java	22 Apr 2003 17:39:57 -0000	1.96
  @@ -161,6 +161,8 @@
           }
           return acts;
       }
  +    
  +    
   
       /**
        * SOAPResponseHandler is used to inject SOAP semantics just before
  @@ -245,7 +247,6 @@
           initHashtable();
   
           // For now, always assume we're the ultimate destination.
  -        // TODO : Handle SOAP 1.2 ultimateDestination actor as well
           actors.add("");
       }
   
  @@ -271,7 +272,7 @@
       {
           init(null, null, serviceHandler, new SOAPResponseHandler(), null);
       }
  -
  +    
       /** Tell this service which engine it's deployed to.
        *
        */
  @@ -475,6 +476,7 @@
           if (handlerImpl != null) {
               result = handlerImpl.handleRequest(msgContext);
           }
  +        
           if (result) {
               super.invoke(msgContext);
           } else {
  
  
  
  1.54      +3 -1      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.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- resource.properties	10 Apr 2003 12:44:22 -0000	1.53
  +++ resource.properties	22 Apr 2003 17:39:59 -0000	1.54
  @@ -1139,4 +1139,6 @@
   
   badSOAPHeader00=a SOAPHeader may only have SOAPHeaderElement as its immediate children
   badSOAPBodyElement00=a SOAPBody may only have SOAPBodyElement as its immediate children
  -noNamespace00=Attempted to write schema for bad QName (no namespace) : {0}
  \ No newline at end of file
  +noNamespace00=Attempted to write schema for bad QName (no namespace) : {0}
  +charsInArray=Found character data inside an array element while deserializing
  +
  
  
  
  1.87      +2 -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.86
  retrieving revision 1.87
  diff -u -r1.86 -r1.87
  --- RPCElement.java	18 Apr 2003 14:23:42 -0000	1.86
  +++ RPCElement.java	22 Apr 2003 17:39:59 -0000	1.87
  @@ -214,6 +214,7 @@
                           (operation.getNumInParams() >= numParams) :
                           (operation.getNumInParams() == numParams))) {
   
  +                    boolean isEncoded = operation.getUse() == Use.ENCODED;
                       rpcHandler.setOperation(operation);
                       try {
                           // If no operation name and more than one
  @@ -256,7 +257,7 @@
   
                                   // Get the type in the signature (java type or its holder)
                                   Class sigType = paramDesc.getJavaType();
  -                                if(!JavaUtils.isConvertable(value, sigType))
  +                                if(!JavaUtils.isConvertable(value, sigType, isEncoded))
                                       match = false;
                               }
                           }
  
  
  
  1.98      +8 -6      xml-axis/java/src/org/apache/axis/utils/JavaUtils.java
  
  Index: JavaUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/JavaUtils.java,v
  retrieving revision 1.97
  retrieving revision 1.98
  diff -u -r1.97 -r1.98
  --- JavaUtils.java	14 Mar 2003 15:36:06 -0000	1.97
  +++ JavaUtils.java	22 Apr 2003 17:40:04 -0000	1.98
  @@ -485,6 +485,11 @@
   
       public static boolean isConvertable(Object obj, Class dest)
       {
  +        return isConvertable(obj, dest, false);
  +    }
  +
  +    public static boolean isConvertable(Object obj, Class dest, boolean isEncoded)
  +    {
           Class src = null;
           
           if (obj != null) {
  @@ -528,8 +533,9 @@
                    isConvertable(src.getComponentType(), dest.getComponentType())))
                       return true;
               
  -            // If destination is an array, and src is a component, we're good.
  -            if (dest.isArray() &&
  +            // If destination is an array, and src is a component, we're good
  +            // if we're not encoded!
  +            if (!isEncoded && dest.isArray() &&
                   !dest.getComponentType().equals(Object.class) &&
                   dest.getComponentType().isAssignableFrom(src)) 
                   return true;
  @@ -538,10 +544,6 @@
                   (src == byte[].class && dest == HexBinary.class))
                   return true;
               
  -            // Allow mapping of HashMaps to Hashtables
  -            if (src == HashMap.class && dest == Hashtable.class)
  -                return true;
  -
               // Allow mapping of Calendar to Date
               if (Calendar.class.isAssignableFrom(src) && dest == Date.class)
                   return true;
  
  
  
  1.88      +10 -2     xml-axis/java/src/org/apache/axis/wsdl/fromJava/Emitter.java
  
  Index: Emitter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/fromJava/Emitter.java,v
  retrieving revision 1.87
  retrieving revision 1.88
  diff -u -r1.87 -r1.88
  --- Emitter.java	8 Apr 2003 00:25:49 -0000	1.87
  +++ Emitter.java	22 Apr 2003 17:40:04 -0000	1.88
  @@ -504,6 +504,7 @@
                   serviceDesc2.setStopClasses(stopClasses);
                   serviceDesc2.setAllowedMethods(allowedMethods);
                   serviceDesc2.setDisallowedMethods(disallowedMethods);
  +                serviceDesc2.setStyle(style);                
               }
           }
   
  @@ -611,7 +612,7 @@
           throws IOException, WSDLException, SAXException,
                  ParserConfigurationException {
           types = new Types(def, tm, defaultTM, namespaces,
  -                          intfNS, stopClasses);
  +                          intfNS, stopClasses, serviceDesc);
           if (inputWSDL != null) {
               types.loadInputTypes(inputWSDL);
           }
  @@ -1218,7 +1219,14 @@
               // Write the part
               ParameterDesc retParam = new ParameterDesc();
               if (desc.getReturnQName() == null) {
  -                retParam.setName(desc.getName()+"Return");
  +                String ns = "";
  +                if (desc.getStyle() != Style.RPC) {
  +                    ns = getServiceDesc().getDefaultNamespace();
  +                    if (ns == null || "".equals(ns)) {
  +                        ns = "http://ws.apache.org/axis/defaultNS";
  +                    }
  +                }
  +                retParam.setQName(new QName(ns, desc.getName()+"Return"));
               } else {
                   retParam.setQName(desc.getReturnQName());
               }
  
  
  
  1.74      +13 -6     xml-axis/java/src/org/apache/axis/wsdl/fromJava/Types.java
  
  Index: Types.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/fromJava/Types.java,v
  retrieving revision 1.73
  retrieving revision 1.74
  diff -u -r1.73 -r1.74
  --- Types.java	10 Apr 2003 12:44:22 -0000	1.73
  +++ Types.java	22 Apr 2003 17:40:05 -0000	1.74
  @@ -59,6 +59,8 @@
   import org.apache.axis.AxisFault;
   import org.apache.axis.Constants;
   import org.apache.axis.InternalException;
  +import org.apache.axis.enum.Style;
  +import org.apache.axis.description.ServiceDesc;
   import org.apache.axis.components.logger.LogFactory;
   import org.apache.axis.encoding.Serializer;
   import org.apache.axis.encoding.SerializerFactory;
  @@ -119,6 +121,7 @@
       HashMap wrapperMap = new HashMap();
       List stopClasses = null;
       List beanCompatErrs = new ArrayList();
  +    ServiceDesc serviceDesc = null;
   
       /**
        * This class serailizes a <code>Class</code> to XML Schema. The constructor
  @@ -134,8 +137,10 @@
                    TypeMapping defaultTM,
                    Namespaces namespaces,
                    String targetNamespace,
  -                 List stopClasses) {
  +                 List stopClasses,
  +                 ServiceDesc serviceDesc) {
           this.def = def;
  +        this.serviceDesc = serviceDesc;
           createDocumentFragment();
           this.tm = tm;
           this.defaultTM = defaultTM;
  @@ -671,11 +676,13 @@
               schemaElem.setAttribute("xmlns", Constants.URI_DEFAULT_SCHEMA_XSD);
               schemaElem.setAttribute("targetNamespace", namespaceURI);
   
  -            // Add SOAP-ENC namespace import
  -            Element importElem = docHolder.createElement("import");
  -            schemaElem.appendChild(importElem);
  -            importElem.setAttribute("namespace", Constants.URI_DEFAULT_SOAP_ENC);
  -
  +            // Add SOAP-ENC namespace import if necessary
  +            if (serviceDesc.getStyle() == Style.RPC) {
  +                Element importElem = docHolder.createElement("import");
  +                schemaElem.appendChild(importElem);
  +                importElem.setAttribute("namespace", Constants.URI_DEFAULT_SOAP_ENC);
  +            }
  +            
               writeTypeNamespace(qName);
           }
           schemaElem.appendChild(element);
  
  
  
  1.14      +9 -0      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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Service.java	9 Sep 2002 14:50:35 -0000	1.13
  +++ Service.java	22 Apr 2003 17:40:06 -0000	1.14
  @@ -2,6 +2,7 @@
   
   import org.apache.axis.Message;
   import org.apache.axis.MessageContext;
  +import org.apache.axis.AxisFault;
   import org.apache.axis.message.RPCElement;
   import org.apache.axis.utils.DOM2Writer;
   import org.w3c.dom.Node;
  @@ -114,6 +115,14 @@
       public String overloaded(int i, String s)
       {
           return i + s;
  +    }
  +    
  +    /**
  +     * Echo a string array (this is for testing that String->String[]
  +     * conversions do NOT happen when using encoded arrays)
  +     */ 
  +    public void arrayMethod(String [] arg) throws AxisFault {
  +        throw new AxisFault("You shouldn't have called me!");
       }
   
       /**
  
  
  
  1.38      +19 -11    xml-axis/java/test/RPCDispatch/TestSerializedRPC.java
  
  Index: TestSerializedRPC.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/RPCDispatch/TestSerializedRPC.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- TestSerializedRPC.java	17 Oct 2002 04:40:19 -0000	1.37
  +++ TestSerializedRPC.java	22 Apr 2003 17:40:06 -0000	1.38
  @@ -252,18 +252,26 @@
                        expected,
                        rpc("overloaded", arg, true));
       }
  +    
  +    public void testEncodedArrayConversion() throws Exception {
  +        String arg = "<arg0>a simple string</arg0>";
  +        AxisFault fault = (AxisFault)rpc("arrayMethod", arg, true);
  +        assertTrue("Erroneous conversion occurred!",
  +                !fault.getFaultString().equals("You shouldn't have called me!"));
  +    }
   
       public static void main(String args[]) {
  -      try {
  -        TestSerializedRPC tester = new TestSerializedRPC("Test Serialized RPC");
  -        tester.testSerReverseString();
  -        tester.testSerReverseData();
  -        tester.testReverseDataWithUntypedParam();
  -        tester.testArgAsDOM();
  -        tester.testOverloadedMethodDispatch();
  -          tester.testOutOfOrderParams();
  -      } catch (Exception e) {
  -        e.printStackTrace();
  -      }
  +        try {
  +            TestSerializedRPC tester = new TestSerializedRPC("Test Serialized RPC");
  +            tester.testEncodedArrayConversion();
  +            tester.testSerReverseString();
  +            tester.testSerReverseData();
  +            tester.testReverseDataWithUntypedParam();
  +            tester.testArgAsDOM();
  +            tester.testOverloadedMethodDispatch();
  +            tester.testOutOfOrderParams();
  +        } catch (Exception e) {
  +            e.printStackTrace();
  +        }
       }
   }
  
  
  
  1.20      +30 -28    xml-axis/java/test/functional/TestJAXMSamples.java
  
  Index: TestJAXMSamples.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/functional/TestJAXMSamples.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- TestJAXMSamples.java	11 Dec 2002 22:40:16 -0000	1.19
  +++ TestJAXMSamples.java	22 Apr 2003 17:40:16 -0000	1.20
  @@ -95,33 +95,35 @@
           }
       }
   
  -    public void testUddiPing() throws Exception {
  -        try {
  -            log.info("Testing JAXM UddiPing sample.");
  -            UddiPing.searchUDDI("IBM", "http://www-3.ibm.com/services/uddi/testregistry/inquiryapi");
  -            log.info("Test complete.");
  -        } catch (javax.xml.soap.SOAPException e) {
  -            Throwable t = e.getCause();
  -            if (t != null) {
  -                t.printStackTrace();
  -                if (t instanceof AxisFault) {
  -                    AxisFault af = (AxisFault) t;
  -                    if ((af.detail instanceof SocketException) ||
  -                        (af.getFaultCode().getLocalPart().equals("HTTP")) ) {
  -                        System.out.println("Connect failure caused JAXM UddiPing to be skipped.");
  -                        return;
  -                    }
  -                }
  -                throw new Exception("Fault returned from test: " + t);
  -            } else {
  -                e.printStackTrace();
  -                throw new Exception("Exception returned from test: " + e);
  -            }
  -        } catch (Throwable t) {
  -            t.printStackTrace();
  -            throw new Exception("Fault returned from test: " + t);
  -        }
  -    } // testGetQuote
  +//    // This is timing out for some reason - removed for the nonce.
  +//    // -- gdaniels, 4/21/2003
  +//    public void testUddiPing() throws Exception {
  +//        try {
  +//            log.info("Testing JAXM UddiPing sample.");
  +//            UddiPing.searchUDDI("IBM", "http://www-3.ibm.com/services/uddi/testregistry/inquiryapi");
  +//            log.info("Test complete.");
  +//        } catch (javax.xml.soap.SOAPException e) {
  +//            Throwable t = e.getCause();
  +//            if (t != null) {
  +//                t.printStackTrace();
  +//                if (t instanceof AxisFault) {
  +//                    AxisFault af = (AxisFault) t;
  +//                    if ((af.detail instanceof SocketException) ||
  +//                        (af.getFaultCode().getLocalPart().equals("HTTP")) ) {
  +//                        System.out.println("Connect failure caused JAXM UddiPing to be skipped.");
  +//                        return;
  +//                    }
  +//                }
  +//                throw new Exception("Fault returned from test: " + t);
  +//            } else {
  +//                e.printStackTrace();
  +//                throw new Exception("Exception returned from test: " + e);
  +//            }
  +//        } catch (Throwable t) {
  +//            t.printStackTrace();
  +//            throw new Exception("Fault returned from test: " + t);
  +//        }
  +//    } // testGetQuote
   
       public void testDelayedStockQuote() throws Exception {
           try {
  @@ -175,7 +177,7 @@
   
       public static void main(String args[]) throws Exception {
           TestJAXMSamples tester = new TestJAXMSamples("tester");
  -        tester.testUddiPing();
  +        //tester.testUddiPing();
       } // main
   }