scheu 02/03/21 14:27:02 Modified: java/src/org/apache/axis/utils resources.properties java/src/org/apache/axis/wsdl/toJava Emitter.java JavaBeanWriter.java JavaTypeWriter.java JavaWriter.java NoopWriterFactory.java Log: I restructured some of the code in the parser. JavaBeanHelperWriter - This is a new class that is used to emit the Bean Meta data. The meta data code was moved to this class from JavaBeanWriter. Currently this code is emitted into the bean class. In the future, this will be changed so that it can be emitted into the bean class or a separate helper class. JavaBeanWriter - This class has been changed so that it now contains the code to emit only the bean logical methods. It then invokes the JavaBeanHelperWriter to emit the meta data. I also cleaned up some up some of this code to make the classes a little easier to extend. Revision Changes Path 1.82 +1 -0 xml-axis/java/src/org/apache/axis/utils/resources.properties Index: resources.properties =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/resources.properties,v retrieving revision 1.81 retrieving revision 1.82 diff -u -r1.81 -r1.82 --- resources.properties 21 Mar 2002 19:10:10 -0000 1.81 +++ resources.properties 21 Mar 2002 22:27:02 -0000 1.82 @@ -199,6 +199,7 @@ genStub00=Generating client-side stub genTest00=Generating service test case genType00=Generating type implementation +genHelper00=Generating helper implementation genUndeploy00=Generating undeployment document genUndeployFail00=Failed to write undeployment document getProxy00=Use to get a proxy class for {0} 1.27 +1 -0 xml-axis/java/src/org/apache/axis/wsdl/toJava/Emitter.java Index: Emitter.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/Emitter.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- Emitter.java 19 Mar 2002 15:42:02 -0000 1.26 +++ Emitter.java 21 Mar 2002 22:27:02 -0000 1.27 @@ -134,6 +134,7 @@ } // ctor public SymbolTable getSymbolTable() { return symbolTable;} + public WriterFactory getWriterFactory() { return writerFactory;} /** * Call this method if you have a uri for the WSDL document * @param String wsdlURI the location of the WSDL file. 1.3 +16 -99 xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanWriter.java Index: JavaBeanWriter.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanWriter.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- JavaBeanWriter.java 20 Mar 2002 21:43:52 -0000 1.2 +++ JavaBeanWriter.java 21 Mar 2002 22:27:02 -0000 1.3 @@ -71,7 +71,8 @@ private Vector elements; private Vector attributes; private TypeEntry extendType; - private HashMap elementMappings = null; + protected JavaWriter helper; + protected Vector names = new Vector(); /** * Constructor. @@ -79,19 +80,23 @@ * @param type The type representing this class * @param elements Vector containing the Type and name of each property * @param extendType The type representing the extended class (or null) + * @param attributes Vector containing the attribute types and names + * @param helper Helper class writer */ protected JavaBeanWriter( Emitter emitter, TypeEntry type, Vector elements, TypeEntry extendType, - Vector attributes) { + Vector attributes, + JavaWriter helper) { super(emitter, type, "", "java", JavaUtils.getMessage("genType00"), "complexType"); this.type = type; this.elements = elements; this.attributes = attributes; this.extendType = extendType; + this.helper = helper; } // ctor /** @@ -110,21 +115,12 @@ } // We are only interested in the java names of the types, so create a names list - Vector names = new Vector(); if (elements != null) { for (int i = 0; i < elements.size(); i++) { ElementDecl elem = (ElementDecl)elements.get(i); TypeEntry type = elem.getType(); String elemName = elem.getName().getLocalPart(); String javaName = Utils.xmlNameToJava(elemName); - if (!javaName.equals(elemName)) { - // If we did some mangling, make sure we'll write out the XML - // the correct way. - if (elementMappings == null) - elementMappings = new HashMap(); - - elementMappings.put(javaName, elem.getName()); - } names.add(type.getName()); names.add(javaName); } @@ -170,27 +166,6 @@ pw.println(" public " + className + "() {"); pw.println(" }"); - // The code used to generate a constructor that set - // all of the properties. - boolean fullConstructorGen = false; - if (fullConstructorGen) { - pw.println(); - if (names.size() > 0) { - pw.print(" public " + className + "("); - for (int i = 0; i < names.size(); i += 2) { - if (i != 0) pw.print(", "); - String variable = (String) names.get(i + 1); - pw.print((String) names.get(i) + " " + variable); - } - pw.println(") {"); - for (int i = 1; i < names.size(); i += 2) { - String variable = (String) names.get(i); - pw.println(" this." + variable + " = " + variable + ";"); - } - pw.println(" }"); - } - } - pw.println(); int j = 0; for (int i = 0; i < names.size(); i += 2, j++) { @@ -251,68 +226,6 @@ } } - // if we have attributes, create metadata function which returns the - // list of properties that are attributes instead of elements - - if (attributes != null || elementMappings != null) { - boolean wroteFieldType = false; - pw.println(" // " + JavaUtils.getMessage("typeMeta")); - pw.println(" private static org.apache.axis.description.TypeDesc typeDesc ="); - pw.println(" new org.apache.axis.description.TypeDesc();"); - pw.println(); - pw.println(" static {"); - - if (attributes != null) { - for (int i = 0; i < attributes.size(); i += 2) { - String attrName = (String) attributes.get(i + 1); - String fieldName = Utils.xmlNameToJava(attrName); - pw.print(" "); - if (!wroteFieldType) { - pw.print("org.apache.axis.description.FieldDesc "); - wroteFieldType = true; - } - pw.println("field = new org.apache.axis.description.AttributeDesc();"); - pw.println(" field.setFieldName(\"" + fieldName + "\");"); - if (!fieldName.equals(attrName)) { - pw.print(" field.setXmlName("); - pw.print("new javax.xml.rpc.namespace.QName(null, \""); - pw.println(attrName + "\"));"); - } - pw.println(" typeDesc.addFieldDesc(field);"); - } - } - - if (elementMappings != null) { - Iterator i = elementMappings.keySet().iterator(); - while (i.hasNext()) { - String fieldName = (String)i.next(); - QName xmlName = (QName)elementMappings.get(fieldName); - pw.print(" "); - if (!wroteFieldType) { - pw.print("org.apache.axis.description.FieldDesc "); - wroteFieldType = true; - } - pw.println("field = new org.apache.axis.description.ElementDesc();"); - pw.println(" field.setFieldName(\"" + fieldName + "\");"); - pw.print( " field.setXmlName(new javax.xml.rpc.namespace.QName(\""); - pw.println(xmlName.getNamespaceURI() + "\", \"" + - xmlName.getLocalPart() + "\"));"); - pw.println(" typeDesc.addFieldDesc(field);"); - } - } - - pw.println(" };"); - pw.println(); - - pw.println(" /**"); - pw.println(" * " + JavaUtils.getMessage("returnTypeMeta")); - pw.println(" */"); - pw.println(" public static org.apache.axis.description.TypeDesc getTypeDesc() {"); - pw.println(" return typeDesc;"); - pw.println(" }"); - pw.println(); - } - // if this is a simple type, we need to emit a toString and a string // constructor if (type.isSimpleType() && valueType != null) { @@ -329,6 +242,14 @@ pw.println(); } + writeEqualsMethod(); + + helper.write(pw); + pw.println("}"); + pw.close(); + } // writeFileBody + + protected void writeEqualsMethod() { pw.println(" public boolean equals(Object obj) {"); pw.println(" // compare elements"); pw.println(" " + className + " other = (" + className + ") obj;"); @@ -372,9 +293,5 @@ } } pw.println(" }"); - - pw.println("}"); - pw.close(); - } // writeOperation - + } } // class JavaBeanWriter 1.9 +40 -5 xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaTypeWriter.java Index: JavaTypeWriter.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaTypeWriter.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- JavaTypeWriter.java 19 Mar 2002 23:38:31 -0000 1.8 +++ JavaTypeWriter.java 21 Mar 2002 22:27:02 -0000 1.9 @@ -95,7 +95,7 @@ Vector v = SchemaUtils.getEnumerationBaseAndValues( node, symbolTable); if (v != null) { - typeWriter = new JavaEnumTypeWriter(emitter, type, v); + typeWriter = getEnumTypeWriter(emitter, type, v); } else { TypeEntry base = SchemaUtils.getComplexElementExtensionBase( @@ -108,8 +108,7 @@ } } - typeWriter = new - JavaBeanWriter( + typeWriter = getBeanWriter( emitter, type, SchemaUtils.getContainedElementDeclarations( @@ -125,7 +124,7 @@ // If the holder is needed (ie., something uses this type as an out or inout // parameter), instantiate the holder writer. if (holderIsNeeded(type)) { - holderWriter = new JavaHolderWriter(emitter, type); + holderWriter = getHolderWriter(emitter, type); } } } // ctor @@ -134,8 +133,9 @@ * Write all the service bindnigs: service and testcase. */ public void write() throws IOException { - if (typeWriter != null) + if (typeWriter != null) { typeWriter.write(); + } if (holderWriter != null) { holderWriter.write(); } @@ -149,4 +149,39 @@ (Boolean) entry.getDynamicVar(HOLDER_IS_NEEDED); return (holderIsNeeded != null && holderIsNeeded.booleanValue()); } // holderIsNeeded + + /** + * getEnumWriter + **/ + protected JavaWriter getEnumTypeWriter(Emitter emitter, TypeEntry type, Vector v) { + return new JavaEnumTypeWriter(emitter, type, v); + } + + /** + * getBeanWriter + **/ + protected JavaWriter getBeanWriter(Emitter emitter, TypeEntry type, + Vector elements, TypeEntry base, + Vector attributes) { + JavaWriter helperWriter = getBeanHelperWriter(emitter, type, elements, base, + attributes); + return new JavaBeanWriter(emitter, type, elements, base, attributes, + helperWriter); + } + + /** + * getHelperWriter + **/ + protected JavaWriter getBeanHelperWriter(Emitter emitter, TypeEntry type, + Vector elements, TypeEntry base, + Vector attributes) { + return new JavaBeanHelperWriter(emitter, type, elements, base, attributes); + } + + /** + * getHolderWriter + **/ + protected Writer getHolderWriter(Emitter emitter, TypeEntry type) { + return new JavaHolderWriter(emitter, type); + } } // class JavaTypeWriter 1.8 +21 -0 xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaWriter.java Index: JavaWriter.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaWriter.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- JavaWriter.java 12 Mar 2002 16:34:54 -0000 1.7 +++ JavaWriter.java 21 Mar 2002 22:27:02 -0000 1.8 @@ -145,6 +145,27 @@ } // ctor /** + * Generate as an inner class + */ + public void write(PrintWriter pw) throws IOException { + String packageDirName = namespaces.toDir(packageName); + String path = packageDirName + fileName; + String fqClass = packageName + "." + className; + + // Check for duplicates, probably the result of namespace mapping + if (emitter.fileInfo.getClassNames().contains(fqClass)) { + throw new IOException(JavaUtils.getMessage("duplicateClass00", fqClass)); + } + if (emitter.fileInfo.getFileNames().contains(path)) { + throw new IOException(JavaUtils.getMessage("duplicateFile00", path)); + } + + emitter.fileInfo.add(path, fqClass, type); + this.pw = pw; + writeFileBody(); + } + + /** * Create the file, write the header, write the body. */ public void write() throws IOException { 1.2 +1 -1 xml-axis/java/src/org/apache/axis/wsdl/toJava/NoopWriterFactory.java Index: NoopWriterFactory.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/NoopWriterFactory.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- NoopWriterFactory.java 20 Feb 2002 17:17:36 -0000 1.1 +++ NoopWriterFactory.java 21 Mar 2002 22:27:02 -0000 1.2 @@ -107,7 +107,7 @@ public Writer getWriter(TypeEntry type, SymbolTable symbolTable) { return new NoopWriter(); } - + public Writer getWriter(Definition definition, SymbolTable symbolTable) { return new NoopWriter(); }