You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2004/08/18 13:33:58 UTC

cvs commit: ws-axis/java/test/encoding TestDeser2001.java

dims        2004/08/18 04:33:57

  Modified:    java/src/org/apache/axis/wsdl/symbolTable Utils.java
               java/src/org/apache/axis/wsdl/toJava
                        JavaGeneratorFactory.java JavaHolderWriter.java
                        JavaStubWriter.java JavaTestCaseWriter.java
                        Utils.java
               java/test/encoding TestDeser2001.java
  Log:
  Fix for AXIS-1191 - Incorrect mapping of local elements with minOccurs="0" maxOccurs="1"
  from Andrei Iltchenko <an...@nl.compuware.com>
  
  Notes:
  - I fixed a TZ failure that was happening on my machine here in India...
  
  Revision  Changes    Path
  1.40      +0 -37     ws-axis/java/src/org/apache/axis/wsdl/symbolTable/Utils.java
  
  Index: Utils.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/symbolTable/Utils.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- Utils.java	30 Mar 2004 11:36:02 -0000	1.39
  +++ Utils.java	18 Aug 2004 11:33:56 -0000	1.40
  @@ -79,43 +79,6 @@
       }
   
       /**
  -     * getNillableQName returns the QName to use if the nillable=true
  -     * attribute is used.
  -     * For example, in JAX-RPC:
  -     * The QName "xsd:int" maps to a java int.
  -     * However if an element with a type="xsd:int" also has the
  -     * "nillable=true" attribute, the type should be an Integer (not an int).
  -     * So in these circumstances, this routine is called with xsd:int to
  -     * get a suitable qname (soapenc:int) which maps to Integer.
  -     * 
  -     * @param qName QName
  -     * @return 
  -     */
  -    public static QName getNillableQName(QName qName) {
  -
  -        QName rc = qName;
  -
  -        if (Constants.isSchemaXSD(rc.getNamespaceURI())) {
  -            String localName = rc.getLocalPart();
  -
  -            if (localName.equals("int") || localName.equals("long")
  -                    || localName.equals("short") || localName.equals("float")
  -                    || localName.equals("double")
  -                    || localName.equals("boolean")
  -                    || localName.equals("byte")) {
  -                rc = findQName(Constants.URI_DEFAULT_SOAP_ENC,
  -                        qName.getLocalPart());
  -            } else if (localName.equals("base64Binary")) {
  -                rc = findQName(Constants.URI_DEFAULT_SOAP_ENC, "base64");
  -            } else if (localName.equals("hexBinary")) {
  -                rc = findQName(Constants.URI_DEFAULT_SCHEMA_XSD, "hexBinary");
  -            }
  -        }
  -
  -        return rc;
  -    }
  -
  -    /**
        * Given a node, return the value of the given attribute.
        * If the attribute does not exist, searching continues through ancestor nodes until found.
        * This method is useful for finding attributes that pertain to a group of contained
  
  
  
  1.54      +2 -6      ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaGeneratorFactory.java
  
  Index: JavaGeneratorFactory.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaGeneratorFactory.java,v
  retrieving revision 1.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- JavaGeneratorFactory.java	4 Aug 2004 02:54:29 -0000	1.53
  +++ JavaGeneratorFactory.java	18 Aug 2004 11:33:57 -0000	1.54
  @@ -1305,13 +1305,9 @@
               String javifiedName = Utils.xmlNameToJava(p.getName());
   
               if (p.getMode() == Parameter.IN) {
  -                signature = signature + Utils.getParameterTypeName(p) + " "
  -                        + javifiedName;
  +                signature += Utils.getParameterTypeName(p) + " " + javifiedName;
               } else {
  -                signature =
  -                        signature
  -                        + Utils.holder(p.getMIMEInfo(), p.getType(), emitter) + " "
  -                        + javifiedName;
  +                signature += Utils.holder(p, emitter) + " " + javifiedName;
               }
           }
   
  
  
  
  1.18      +1 -1      ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaHolderWriter.java
  
  Index: JavaHolderWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaHolderWriter.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- JavaHolderWriter.java	25 Feb 2004 14:02:52 -0000	1.17
  +++ JavaHolderWriter.java	18 Aug 2004 11:33:57 -0000	1.18
  @@ -36,7 +36,7 @@
        */
       protected JavaHolderWriter(Emitter emitter, TypeEntry type) {
   
  -        super(emitter, Utils.holder(null, type, emitter), "holder");
  +        super(emitter, Utils.holder(type, emitter), "holder");
   
           this.type = type;
       }    // ctor
  
  
  
  1.135     +3 -22     ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java
  
  Index: JavaStubWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java,v
  retrieving revision 1.134
  retrieving revision 1.135
  diff -u -r1.134 -r1.135
  --- JavaStubWriter.java	11 Aug 2004 16:58:36 -0000	1.134
  +++ JavaStubWriter.java	18 Aug 2004 11:33:57 -0000	1.135
  @@ -581,22 +581,12 @@
                   QName paramType = Utils.getXSIType(p);
   
                   // Set the javaType to the name of the type
  -                String javaType = null;
  -
  -                if (p.getMIMEInfo() != null) {
  -                    MimeInfo mimeInfo = p.getMIMEInfo();
  -
  -                    javaType = JavaUtils.mimeToJava(mimeInfo.getType())
  -                            + mimeInfo.getDimensions() + ".class, ";
  -                } else {
  -                    javaType = p.getType().getName();
  -
  +                String javaType = Utils.getParameterTypeName(p);
                       if (javaType != null) {
                           javaType += ".class, ";
                       } else {
                           javaType = "null, ";
                       }
  -                }
   
                   // Get the text representing newing a QName for the name and type
                   String paramNameText = Utils.getNewQNameWithLastLocalPart(p.getQName());
  @@ -620,21 +610,12 @@
                   QName returnType = Utils.getXSIType(parameters.returnParam);
   
                   // Get the javaType
  -                String javaType = null;
  -
  -                if (parameters.returnParam.getMIMEInfo() != null) {
  -                    MimeInfo mimeInfo = parameters.returnParam.getMIMEInfo();
  -
  -                    javaType = JavaUtils.mimeToJava(mimeInfo.getType())
  -                            + mimeInfo.getDimensions();
  -                } else {
  -                    javaType = parameters.returnParam.getType().getName();
  -                }
  +                String javaType = Utils.getParameterTypeName(parameters.returnParam);
   
                   if (javaType == null) {
                       javaType = "";
                   } else {
  -                    javaType = javaType + ".class";
  +                    javaType += ".class";
                   }
   
                   pw.println("        oper.setReturnType("
  
  
  
  1.61      +1 -5      ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaTestCaseWriter.java
  
  Index: JavaTestCaseWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaTestCaseWriter.java,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- JavaTestCaseWriter.java	11 Aug 2004 16:58:36 -0000	1.60
  +++ JavaTestCaseWriter.java	18 Aug 2004 11:33:57 -0000	1.61
  @@ -238,11 +238,7 @@
   
                   // if we have an out or in/out, we are passing in a holder
                   if (param.getMode() != Parameter.IN) {
  -                    pw.print(
  -                            "new "
  -                            + Utils.holder(
  -                                    param.getMIMEInfo(), param.getType(), emitter) + "(");
  -
  +                    pw.print("new " + Utils.holder(param, emitter) + "(");
                       suffix = ")";
                   }
   
  
  
  
  1.88      +30 -23    ws-axis/java/src/org/apache/axis/wsdl/toJava/Utils.java
  
  Index: Utils.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/Utils.java,v
  retrieving revision 1.87
  retrieving revision 1.88
  diff -u -r1.87 -r1.88
  --- Utils.java	3 May 2004 20:04:10 -0000	1.87
  +++ Utils.java	18 Aug 2004 11:33:57 -0000	1.88
  @@ -21,18 +21,7 @@
   import org.apache.axis.enum.Use;
   import org.apache.axis.utils.JavaUtils;
   import org.apache.axis.utils.Messages;
  -import org.apache.axis.wsdl.symbolTable.BaseType;
  -import org.apache.axis.wsdl.symbolTable.BindingEntry;
  -import org.apache.axis.wsdl.symbolTable.CollectionTE;
  -import org.apache.axis.wsdl.symbolTable.CollectionType;
  -import org.apache.axis.wsdl.symbolTable.Element;
  -import org.apache.axis.wsdl.symbolTable.MessageEntry;
  -import org.apache.axis.wsdl.symbolTable.MimeInfo;
  -import org.apache.axis.wsdl.symbolTable.Parameter;
  -import org.apache.axis.wsdl.symbolTable.Parameters;
  -import org.apache.axis.wsdl.symbolTable.SchemaUtils;
  -import org.apache.axis.wsdl.symbolTable.SymbolTable;
  -import org.apache.axis.wsdl.symbolTable.TypeEntry;
  +import org.apache.axis.wsdl.symbolTable.*;
   import org.apache.commons.logging.Log;
   import org.w3c.dom.Node;
   import org.w3c.dom.NodeList;
  @@ -72,22 +61,29 @@
       protected static Log log = LogFactory.getLog(Utils.class.getName());
       
       /**
  +     * @see #holder(Parameter, Emitter)
  +     */
  +    public static String holder(TypeEntry type, Emitter emitter) {
  +        Parameter arg = new Parameter();
  +        // For other fields the default values will do.
  +        arg.setType(type);
  +        return holder(arg, emitter);
  +    }    
  +    /**
        * Given a type, return the Java mapping of that type's holder.
        * 
  -     * @param mimeInfo 
  -     * @param type     
  -     * @param emitter  
  -     * @return 
  +     * @param p          parameter whose holder class name we want to obtain.
  +     * @param emitter    the only {@link Emitter} object embodying the running
  +     *                   instance of WSDL2Java.
  +     * @return           the name of the holder class for <tt>p</tt>.
        */
  -    public static String holder(MimeInfo mimeInfo, TypeEntry type,
  -                                Emitter emitter) {
  -
  -        String mimeType = (mimeInfo == null)
  +    public static String holder(Parameter p, Emitter emitter) {
  +        String mimeType = (p.getMIMEInfo() == null)
                   ? null
  -                : mimeInfo.getType();
  -        String mimeDimensions = (mimeInfo == null)
  +                : p.getMIMEInfo().getType();
  +        String mimeDimensions = (mimeType == null)
                   ? ""
  -                : mimeInfo.getDimensions();
  +                : p.getMIMEInfo().getDimensions();
   
           // Add the holders that JAX-RPC forgot about - the MIME type holders.
           if (mimeType != null) {
  @@ -111,7 +107,18 @@
               }
           }
   
  +        TypeEntry type = p.getType();
           String typeValue = type.getName();
  +        // For base types that are nillable and are mapped to primitives,
  +        // need to switch to the corresponding wrapper types.
  +        if (p.isOmittable()
  +            &&  (type instanceof BaseType
  +                 ||  type instanceof DefinedElement
  +                     &&  type.getRefType() instanceof BaseType)) {
  +            String wrapperTypeValue = (String) TYPES.get(typeValue);
  +            typeValue = wrapperTypeValue == null  ?  typeValue
  +                                                  :  wrapperTypeValue;
  +        }
   
           // byte[] has a reserved holders
           if (typeValue.equals("byte[]")) {
  
  
  
  1.31      +1 -1      ws-axis/java/test/encoding/TestDeser2001.java
  
  Index: TestDeser2001.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/test/encoding/TestDeser2001.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- TestDeser2001.java	29 Jul 2004 22:26:22 -0000	1.30
  +++ TestDeser2001.java	18 Aug 2004 11:33:57 -0000	1.31
  @@ -221,7 +221,7 @@
           String offsetString = msecOffset > 0 ? "+" : "-";
           offsetString += hourOffset >= 10 ? "" + hourOffset : "0" + hourOffset;
           offsetString += ":";
  -        int minOffset = Math.abs(msecOffset % MILLISECONDS_IN_HOUR);
  +        int minOffset = Math.abs(msecOffset % MILLISECONDS_IN_HOUR) / MILLISECONDS_IN_MINUTE;
           if (minOffset == 0) {
               offsetString += "00";
           }