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