David, in his commit comment, Rich said, "Need a testcase..." Hint hint!
Russell Butek [EMAIL PROTECTED] David Altenburg <[EMAIL PROTECTED]> on 02/18/2002 09:42:37 AM Please respond to [EMAIL PROTECTED] To: "'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]> cc: Subject: RE: cvs commit: xml-axis/java/src/org/apache/axis/wsdl/toJava Sch emaUtils.java Excellent. Thanks! David Altenburg [EMAIL PROTECTED] >-----Original Message----- >From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] >Sent: Friday, February 15, 2002 5:02 PM >To: [EMAIL PROTECTED] >Subject: cvs commit: >xml-axis/java/src/org/apache/axis/wsdl/toJava SchemaUtils.java > > >scheu 02/02/15 15:02:19 > > Modified: java/src/org/apache/axis/wsdl/toJava SchemaUtils.java > Log: > Changes per axis-dev request from David Altenburg. > > The WSDL2Java emitter now parses choice and group elements underneath > complexType elements. > > Need a testcase... > > Revision Changes Path > 1.9 +132 -21 >xml-axis/java/src/org/apache/axis/wsdl/toJava/SchemaUtils.java > > Index: SchemaUtils.java > =================================================================== > RCS file: >/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/SchemaU >tils.java,v > retrieving revision 1.8 > retrieving revision 1.9 > diff -u -r1.8 -r1.9 > --- SchemaUtils.java 15 Feb 2002 19:41:17 -0000 1.8 > +++ SchemaUtils.java 15 Feb 2002 23:02:19 -0000 1.9 > @@ -163,33 +163,18 @@ > } > if (groupNode != null) { > > - // Process each of the element nodes under >the group node > + // Process each of the choice or element >nodes under the sequence/all node > Vector v = new Vector(); > NodeList elements = groupNode.getChildNodes(); > for (int i=0; i < elements.getLength(); i++) { > QName elementKind = >Utils.getNodeQName(elements.item(i)); > if (elementKind != null && > - >elementKind.getLocalPart().equals("element") && > >Constants.isSchemaXSD(elementKind.getNamespaceURI())) { > - > - // Get the name and type qnames. > - // The name of the element is the >local part of the name's qname. > - // The type qname is used to locate >the TypeEntry, which is then > - // used to retrieve the proper java >name of the type. > - Node elementNode = elements.item(i); > - QName nodeName = >Utils.getNodeNameQName(elementNode); > - BooleanHolder forElement = new >BooleanHolder(); > - QName nodeType = >Utils.getNodeTypeRefQName(elementNode, forElement); > - if (nodeType == null) { // The >element may use an anonymous type > - nodeType = nodeName; > - forElement.value = false; > - } > - > - TypeEntry type = (TypeEntry) >symbolTable.getTypeEntry(nodeType, > - > forElement.value); > - if (type != null) { > - v.add(type); > - v.add(nodeName.getLocalPart()); > + if ( >elementKind.getLocalPart().equals("element")) { > + >v.addAll(processChildElementNode(elements.item(i), symbolTable)); > + } else if >(elementKind.getLocalPart().equals("choice")) { > + Vector choiceElems = >processChoiceNode(elements.item(i), symbolTable); > + v.addAll(choiceElems); > } > } > } > @@ -197,6 +182,132 @@ > } > } > return null; > + } > + > + /** > + * Invoked by getComplexElementTypesAndNames to get the >child element types > + * and child element names underneath a Choice Node > + */ > + private static Vector processChoiceNode(Node >choiceNode, SymbolTable symbolTable) { > + Vector v = new Vector(); > + NodeList children = choiceNode.getChildNodes(); > + for (int j = 0; j < children.getLength(); j++) { > + QName subNodeKind = >Utils.getNodeQName(children.item(j)); > + if (subNodeKind != null && > + >Constants.isSchemaXSD(subNodeKind.getNamespaceURI())) { > + if (subNodeKind.getLocalPart().equals("choice")) { > + >v.addAll(processChoiceNode(children.item(j), symbolTable)); > + } else if >(subNodeKind.getLocalPart().equals("sequence")) { > + >v.addAll(processSequenceNode(children.item(j), symbolTable)); > + } else if >(subNodeKind.getLocalPart().equals("group")) { > + >v.addAll(processGroupNode(children.item(j), symbolTable)); > + } else if >(subNodeKind.getLocalPart().equals("element")) { > + >v.addAll(processChildElementNode(children.item(j), symbolTable)); > + } > + } > + } > + return v; > + } > + > + /** > + * Invoked by getComplexElementTypesAndNames to get the >child element types > + * and child element names underneath a Sequence Node > + */ > + private static Vector processSequenceNode(Node >sequenceNode, SymbolTable symbolTable) { > + Vector v = new Vector(); > + NodeList children = sequenceNode.getChildNodes(); > + for (int j = 0; j < children.getLength(); j++) { > + QName subNodeKind = >Utils.getNodeQName(children.item(j)); > + if (subNodeKind != null && > + >Constants.isSchemaXSD(subNodeKind.getNamespaceURI())) { > + if (subNodeKind.getLocalPart().equals("choice")) { > + >v.addAll(processChoiceNode(children.item(j), symbolTable)); > + } else if >(subNodeKind.getLocalPart().equals("sequence")) { > + >v.addAll(processSequenceNode(children.item(j), symbolTable)); > + } else if >(subNodeKind.getLocalPart().equals("group")) { > + >v.addAll(processGroupNode(children.item(j), symbolTable)); > + } else if >(subNodeKind.getLocalPart().equals("element")) { > + >v.addAll(processChildElementNode(children.item(j), symbolTable)); > + } > + } > + } > + return v; > + } > + > + /** > + * Invoked by getComplexElementTypesAndNames to get the >child element types > + * and child element names underneath a group node. > + * (Currently the code only supports a defined group it does not > + * support a group that references a previously defined group) > + */ > + private static Vector processGroupNode(Node groupNode, >SymbolTable symbolTable) { > + Vector v = new Vector(); > + NodeList children = groupNode.getChildNodes(); > + for (int j = 0; j < children.getLength(); j++) { > + QName subNodeKind = >Utils.getNodeQName(children.item(j)); > + if (subNodeKind != null && > + >Constants.isSchemaXSD(subNodeKind.getNamespaceURI())) { > + if (subNodeKind.getLocalPart().equals("choice")) { > + >v.addAll(processChoiceNode(children.item(j), symbolTable)); > + } else if >(subNodeKind.getLocalPart().equals("sequence")) { > + >v.addAll(processSequenceNode(children.item(j), symbolTable)); > + } else if >(subNodeKind.getLocalPart().equals("all")) { > + >v.addAll(processAllNode(children.item(j), symbolTable)); > + } > + } > + } > + return v; > + } > + > + /** > + * Invoked by getComplexElementTypesAndNames to get the >child element types > + * and child element names underneath an all node. > + */ > + private static Vector processAllNode(Node allNode, >SymbolTable symbolTable) { > + Vector v = new Vector(); > + NodeList children = allNode.getChildNodes(); > + for (int j = 0; j < children.getLength(); j++) { > + QName subNodeKind = >Utils.getNodeQName(children.item(j)); > + if (subNodeKind != null && > + >Constants.isSchemaXSD(subNodeKind.getNamespaceURI())) { > + if (subNodeKind.getLocalPart().equals("element")) { > + >v.addAll(processChildElementNode(children.item(j), symbolTable)); > + } > + } > + } > + return v; > + } > + > + > + /** > + * Invoked by getComplexElementTypesAndNames to get the >child element type > + * and child element name for a child element node. > + * > + * If the specified node represents a supported JAX-RPC >child element, > + * a Vector is returned which contains the child >element type and > + * child element name. The 0th index is the element >types (TypeEntry) and > + * the 1st index is the corresponding name (Strings). > + */ > + private static Vector processChildElementNode(Node >elementNode, SymbolTable symbolTable) { > + Vector v = new Vector(); > + // Get the name and type qnames. > + // The name of the element is the local part of the >name's qname. > + // The type qname is used to locate the TypeEntry, >which is then > + // used to retrieve the proper java name of the type. > + QName nodeName = Utils.getNodeNameQName(elementNode); > + BooleanHolder forElement = new BooleanHolder(); > + QName nodeType = >Utils.getNodeTypeRefQName(elementNode, forElement); > + if (nodeType == null) { // The element may use an >anonymous type > + nodeType = nodeName; > + forElement.value = false; > + } > + > + TypeEntry type = (TypeEntry) >symbolTable.getTypeEntry(nodeType, forElement.value); > + if (type != null) { > + v.add(type); > + v.add(nodeName.getLocalPart()); > + } > + return v; > } > > /** > > > >