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 sc...@apache.org on 2002/01/31 16:20:27 UTC

cvs commit: xml-axis/java/src/org/apache/axis/wsdl/toJava JavaDeployWriter.java JavaStubWriter.java

scheu       02/01/31 07:20:27

  Modified:    java/src/org/apache/axis/wsdl/toJava JavaDeployWriter.java
                        JavaStubWriter.java
  Log:
  Arrays and Enums are now registered in the Stubs and deploy.wsdd emitted by WSDL2Java
  
  Revision  Changes    Path
  1.13      +13 -12    xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaDeployWriter.java
  
  Index: JavaDeployWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaDeployWriter.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- JavaDeployWriter.java	30 Jan 2002 03:34:10 -0000	1.12
  +++ JavaDeployWriter.java	31 Jan 2002 15:20:26 -0000	1.13
  @@ -149,22 +149,23 @@
               TypeEntry type = (TypeEntry) types.elementAt(i);
               if (type.getBaseType() == null && type.isReferenced()
                       && !type.isOnlyLiteralReferenced()
  -                    && !type.getName().endsWith("[]")) {
  -                // Generate a typeMapping clause that is compatible with JSR 109
  -                // This replaces the old beanMapping clause
  -                //pw.println("  <beanMapping");
  -                //pw.println("    xmlns:ns=\"" + type.getQName().getNamespaceURI() + "\"");
  -                //pw.println("    qname=\"ns:" + type.getQName().getLocalPart() + '"');
  -                //pw.println("    type=\"" + 
  -                // Constants.NSPREFIX_WSDD_JAVA + ":" + type.getName() + '"');
  -                //pw.println("  />");
  -
  +                    && !(type instanceof CollectionType)) {
                   pw.println("  <typeMapping");
                   pw.println("    xmlns:ns=\"" + type.getQName().getNamespaceURI() + "\"");
                   pw.println("    qname=\"ns:" + type.getQName().getLocalPart() + '"');
                   pw.println("    type=\"java:" + type.getName() + '"');
  -                pw.println("    serializer=\"org.apache.axis.encoding.ser.BeanSerializerFactory\"");
  -                pw.println("    deserializer=\"org.apache.axis.encoding.ser.BeanDeserializerFactory\"");
  +                if (type.getName().endsWith("[]")) {
  +                    pw.println("    serializer=\"org.apache.axis.encoding.ser.ArraySerializerFactory\"");
  +                    pw.println("    deserializer=\"org.apache.axis.encoding.ser.ArrayDeserializerFactory\"");
  +                } else if (type.getNode() != null && 
  +                   SchemaUtils.getEnumerationBaseAndValues(
  +                     type.getNode(), emitter.getSymbolTable()) != null) {
  +                    pw.println("    serializer=\"org.apache.axis.encoding.ser.EnumSerializerFactory\"");
  +                    pw.println("    deserializer=\"org.apache.axis.encoding.ser.EnumDeserializerFactory\"");
  +                } else {
  +                    pw.println("    serializer=\"org.apache.axis.encoding.ser.BeanSerializerFactory\"");
  +                    pw.println("    deserializer=\"org.apache.axis.encoding.ser.BeanDeserializerFactory\"");
  +                }
                   pw.println("    encodingStyle=\""+ Constants.URI_CURRENT_SOAP_ENC+"\"");
                   pw.println("  />");
               }
  
  
  
  1.24      +40 -14    xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java
  
  Index: JavaStubWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- JavaStubWriter.java	28 Jan 2002 20:50:14 -0000	1.23
  +++ JavaStubWriter.java	31 Jan 2002 15:20:26 -0000	1.24
  @@ -129,6 +129,7 @@
               pw.println("    private java.util.Vector cachedSerQNames = new java.util.Vector();");
               pw.println("    private java.util.Vector cachedSerFactories = new java.util.Vector();");
               pw.println("    private java.util.Vector cachedDeserFactories = new java.util.Vector();");
  +            pw.println("    private boolean firstCall = true;");
           }
           pw.println();
   
  @@ -180,15 +181,23 @@
           pw.println("                call.setProperty(key, super.cachedProperties.get(key));");
           pw.println("            }");
           if (types.size() > 0) {
  -            pw.println("            for (int i = 0; i < cachedSerFactories.size(); ++i) {");
  -            pw.println("                Class cls = (Class) cachedSerClasses.get(i);");
  -            pw.println("                javax.xml.rpc.namespace.QName qname =");
  -            pw.println("                        (javax.xml.rpc.namespace.QName) cachedSerQNames.get(i);");
  -            pw.println("                Class sf = (Class)");
  -            pw.println("                         cachedSerFactories.get(i);");
  -            pw.println("                Class df = (Class)");
  -            pw.println("                         cachedDeserFactories.get(i);");
  -            pw.println("                call.registerTypeMapping(cls, qname, sf, df, false);");
  +            pw.println("            // All the type mapping information is registered");
  +            pw.println("            // when the first call is made.");
  +            pw.println("            // The type mapping information is actually registered in");
  +            pw.println("            // the TypeMappingRegistry of the service, which");
  +            pw.println("            // is the reason why registration is only needed for the first call.");
  +            pw.println("            if (firstCall) {");
  +            pw.println("                firstCall = false;");
  +            pw.println("                for (int i = 0; i < cachedSerFactories.size(); ++i) {");
  +            pw.println("                    Class cls = (Class) cachedSerClasses.get(i);");
  +            pw.println("                    javax.xml.rpc.namespace.QName qName =");
  +            pw.println("                            (javax.xml.rpc.namespace.QName) cachedSerQNames.get(i);");
  +            pw.println("                    Class sf = (Class)");
  +            pw.println("                             cachedSerFactories.get(i);");
  +            pw.println("                    Class df = (Class)");
  +            pw.println("                             cachedDeserFactories.get(i);");
  +            pw.println("                    call.registerTypeMapping(cls, qName, sf, df, false);");
  +            pw.println("                }");
               pw.println("            }");
           }
           pw.println("            return call;");
  @@ -365,14 +374,21 @@
       private boolean firstSer = true ;
   
       private void writeSerializationInit(TypeEntry type) throws IOException {
  -        if (type.getBaseType() != null || type.getName().endsWith("[]")) {
  +        // Don't need to register base types or
  +        // our special collection types for indexed properties
  +        if (type.getBaseType() != null ||
  +            type instanceof CollectionType) {
               return;
           }
           if ( firstSer ) {
               pw.println("            Class cls;" );
               pw.println("            javax.xml.rpc.namespace.QName qName;" );
  -            pw.println("            Class sf = org.apache.axis.encoding.ser.BeanSerializerFactory.class;");
  -            pw.println("            Class df = org.apache.axis.encoding.ser.BeanDeserializerFactory.class;");
  +            pw.println("            Class beansf = org.apache.axis.encoding.ser.BeanSerializerFactory.class;");
  +            pw.println("            Class beandf = org.apache.axis.encoding.ser.BeanDeserializerFactory.class;");
  +            pw.println("            Class enumsf = org.apache.axis.encoding.ser.EnumSerializerFactory.class;");
  +            pw.println("            Class enumdf = org.apache.axis.encoding.ser.EnumDeserializerFactory.class;");
  +            pw.println("            Class arraysf = org.apache.axis.encoding.ser.ArraySerializerFactory.class;");
  +            pw.println("            Class arraydf = org.apache.axis.encoding.ser.ArrayDeserializerFactory.class;");
           }
           firstSer = false ;
   
  @@ -383,8 +399,18 @@
           pw.println("            cachedSerQNames.add(qName);");
           pw.println("            cls = " + type.getName() + ".class;");
           pw.println("            cachedSerClasses.add(cls);");
  -        pw.println("            cachedSerFactories.add(sf);");
  -        pw.println("            cachedDeserFactories.add(df);");
  +        if (type.getName().endsWith("[]")) {
  +            pw.println("            cachedSerFactories.add(arraysf);");
  +            pw.println("            cachedDeserFactories.add(arraydf);");
  +        } else if (type.getNode() != null && 
  +                   SchemaUtils.getEnumerationBaseAndValues(
  +                     type.getNode(), emitter.getSymbolTable()) != null) {
  +            pw.println("            cachedSerFactories.add(enumsf);");
  +            pw.println("            cachedDeserFactories.add(enumdf);");
  +        } else {
  +            pw.println("            cachedSerFactories.add(beansf);");
  +            pw.println("            cachedDeserFactories.add(beandf);");
  +        }
           pw.println();
       } // writeSerializationInit