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 2004/02/27 18:07:23 UTC

cvs commit: ws-axis/java/src/org/apache/axis/wsdl/fromJava Emitter.java Types.java

gdaniels    2004/02/27 09:07:23

  Modified:    java/src/org/apache/axis/encoding/ser ArraySerializer.java
               java/src/org/apache/axis/wsdl/fromJava Emitter.java
                        Types.java
  Log:
  Don't output all mapped types when generating WSDL, just the
  ones we use (and all subtypes).  Fix ArraySerializer WSDL gen
  so it always emits the component type (this problem was likely
  being masked by the earlier one) if needed.
  
  Revision  Changes    Path
  1.54      +5 -7      ws-axis/java/src/org/apache/axis/encoding/ser/ArraySerializer.java
  
  Index: ArraySerializer.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/encoding/ser/ArraySerializer.java,v
  retrieving revision 1.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- ArraySerializer.java	25 Feb 2004 14:02:36 -0000	1.53
  +++ ArraySerializer.java	27 Feb 2004 17:07:23 -0000	1.54
  @@ -420,14 +420,12 @@
           if (isArray(javaType)) {
               String dimString = "[]";
               componentType = getComponentType(javaType);
  -            if (isArray(componentType)) {
  -                while (isArray(componentType)) {
  -                    dimString += "[]";
  -                    componentType = getComponentType(componentType);
  -                }
  -            } else {
  -                types.writeType(componentType,null);
  +            while (isArray(componentType)) {
  +                dimString += "[]";
  +                componentType = getComponentType(componentType);
               }
  +            types.writeType(componentType,null);
  +
               componentTypeName =
                       types.getQNameString(types.getTypeQName(componentType)) +
                       dimString;
  
  
  
  1.114     +1 -23     ws-axis/java/src/org/apache/axis/wsdl/fromJava/Emitter.java
  
  Index: Emitter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/fromJava/Emitter.java,v
  retrieving revision 1.113
  retrieving revision 1.114
  diff -u -r1.113 -r1.114
  --- Emitter.java	25 Feb 2004 14:02:50 -0000	1.113
  +++ Emitter.java	27 Feb 2004 17:07:23 -0000	1.114
  @@ -751,28 +751,6 @@
               }
           }
   
  -        if (tm != null) {
  -            Class[] mappedTypes = tm.getAllClasses();
  -
  -            for (int i = 0; i < mappedTypes.length; i++) {
  -                Class mappedType = mappedTypes[i];
  -                QName name = tm.getTypeQName(mappedType);
  -                if (name.getLocalPart().indexOf(SymbolTable.ANON_TOKEN) != -1) {
  -                    // If this is an anonymous type, it doesn't need to be written out here
  -                    // (and trying to do so will generate an error).  Skip it.
  -                    continue;
  -                }
  -
  -                /**
  -                 * If it's a non-standard type, make sure it shows up in
  -                 * our WSDL
  -                 */
  -                if (standardTypes.getSerializer(mappedType) == null) {
  -                    types.writeTypeForPart(mappedType, name);
  -                }
  -            }
  -        }
  -
           return types;
       }
   
  @@ -1813,7 +1791,7 @@
               QName typeQName = param.getTypeQName();
   
               if (javaType != null) {
  -                typeQName = types.writeTypeForPart(javaType, typeQName);
  +                typeQName = types.writeTypeAndSubTypeForPart(javaType, typeQName);
               }
   
               // types.writeElementForPart(javaType, param.getTypeQName());
  
  
  
  1.91      +53 -5     ws-axis/java/src/org/apache/axis/wsdl/fromJava/Types.java
  
  Index: Types.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/fromJava/Types.java,v
  retrieving revision 1.90
  retrieving revision 1.91
  diff -u -r1.90 -r1.91
  --- Types.java	25 Feb 2004 14:02:50 -0000	1.90
  +++ Types.java	27 Feb 2004 17:07:23 -0000	1.91
  @@ -113,6 +113,8 @@
   
       /** Keep track of the element QNames we've written to avoid dups */
       private Set writtenElementQNames = new HashSet();
  +    
  +    private Class [] mappedTypes = null;
   
       public static boolean isArray(Class clazz)
       {
  @@ -158,6 +160,9 @@
   
           this.tm = tm;
           this.defaultTM = defaultTM;
  +        
  +        mappedTypes = tm.getAllClasses();
  +        
           this.namespaces = namespaces;
           this.targetNamespace = targetNamespace;
           this.stopClasses = stopClasses;
  @@ -368,7 +373,7 @@
           if (type.getName().equals("void")) {
               return null;
           }
  -
  +        
           if (Holder.class.isAssignableFrom(type)) {
               type = JavaUtils.getHolderValueType(type);
           }
  @@ -390,7 +395,52 @@
   
           return qname;
       }
  -
  +    
  +    /**
  +     * Write out a type (and its subtypes) referenced by a part type attribute.
  +     *
  +     * @param type <code>Class</code> to generate the XML Schema info for
  +     * @param qname <code>QName</code> of the type.  If null, qname is
  +     *             defaulted from the class.
  +     * @return the QName of the generated Schema type, null if void,
  +     *         if the Class type cannot be converted to a schema type
  +     *         then xsd:anytype is returned.
  +     */
  +    public QName writeTypeAndSubTypeForPart(Class type, QName qname)
  +            throws AxisFault {
  +        
  +        // Write out type in parameter
  +        QName qNameRet = writeTypeForPart(type, qname);
  +        
  +        // If mappedTypesexists 
  +        // Will write subTypes of the type in parameters
  +        if (mappedTypes != null) {
  +            for (int i = 0; i < mappedTypes.length; i++) {
  +                Class tempMappedType = mappedTypes[i];
  +                QName name;
  +                
  +                // If tempMappedType is subtype of the "type" parameter
  +                // and type is not Object (Object superclass of all Java class...)  
  +                // write the subtype
  +                if (tempMappedType != null &&
  +                        type != Object.class && 
  +                        tempMappedType != type &&
  +                        type.isAssignableFrom(tempMappedType)) {
  +                    name = tm.getTypeQName(tempMappedType);
  +                    if (!isAnonymousType(name)) {
  +                        writeTypeForPart(tempMappedType, name);
  +                    }
  +                    
  +                    // Only do each one once.  This is OK to do because each
  +                    // Types instance is for generating a single WSDL.
  +                    mappedTypes[i] = null;
  +                }
  +            }
  +        } //if (mappedTyped != null) {
  +        
  +        return qNameRet;	
  +    }
  +    
       /**
        * Write out an element referenced by a part element attribute.
        *
  @@ -525,9 +575,7 @@
   
           if (javaType.isArray()) {
               type = writeTypeForPart(javaType.getComponentType(), null);
  -        }
  -
  -        if (type == null) {
  +        } else {
               type = writeTypeForPart(javaType, type);
           }