jochen 2005/07/08 13:44:02 Modified: src/xs/org/apache/ws/jaxme/xs/junit ParserTest.java src/jaxme/org/apache/ws/jaxme/generator/sg/impl JAXBGroupSG.java JAXBComplexContentTypeSG.java JAXBParticleSG.java JAXBComplexTypeSG.java JAXBSchemaSG.java . status.xml src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg GroupHandlerSG.java ParticleWalker.java src/pm/org/apache/ws/jaxme/pm/generator/jdbc JaxMeJdbcSG.java src/test/jaxb build.xml src/jaxme/org/apache/ws/jaxme/generator/sg ComplexContentSG.java src/jaxme/org/apache/ws/jaxme/junit ParserTest.java Log: Fixed that the generator didn't detect and refuse a complex type with a group of muliplicity > 1. Revision Changes Path 1.25 +31 -0 ws-jaxme/src/xs/org/apache/ws/jaxme/xs/junit/ParserTest.java Index: ParserTest.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/xs/org/apache/ws/jaxme/xs/junit/ParserTest.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- ParserTest.java 19 May 2005 20:30:33 -0000 1.24 +++ ParserTest.java 8 Jul 2005 20:43:30 -0000 1.25 @@ -1520,4 +1520,35 @@ testRecursiveXsInclude(newXSParser()); testRecursiveXsInclude(newJAXBParser()); } + + + private void testGroupMultiplicity(XSParser pParser) throws Exception { + final String schemaSource = + "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>\n" + + "<xs:element name='PARAMETERS'>\n" + + " <xs:complexType>\n" + + " <xs:choice maxOccurs='unbounded'>\n" + + " <xs:element name='PARAMETER'/>\n" + + " <xs:element name='SYSTEMPARAMETER'/>\n" + + " <xs:element name='PREPREF'/>\n" + + " </xs:choice>\n" + + " </xs:complexType>\n" + + "</xs:element></xs:schema>\n"; + InputSource isource = new InputSource(new StringReader(schemaSource)); + isource.setSystemId("testElementReferenceGlobal.xsd"); + XSSchema schema = pParser.parse(isource); + XSElement[] elements = schema.getElements(); + assertEquals(1, elements.length); + XSElement parameters = elements[0]; + XSParticle particle = assertComplexContent(assertComplexType(parameters.getType())); + assertEquals(1, particle.getMinOccurs()); + assertEquals(-1, particle.getMaxOccurs()); + } + + /** Test the representation of groups with multiplicity > 1. + */ + public void testGroupMultiplicity() throws Exception { + testGroupMultiplicity(newXSParser()); + testGroupMultiplicity(newJAXBParser()); + } } 1.21 +1 -1 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBGroupSG.java Index: JAXBGroupSG.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBGroupSG.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- JAXBGroupSG.java 14 Mar 2005 02:16:09 -0000 1.20 +++ JAXBGroupSG.java 8 Jul 2005 20:43:31 -0000 1.21 @@ -64,7 +64,7 @@ } public Object newParticleSG(GroupSG pController, XSParticle pParticle) throws SAXException { - return new JAXBParticleSG(pController, pParticle, classContext); + return new JAXBParticleSG(pController.getFactory(), pParticle, classContext); } public Context getClassContext(GroupSG pController) { return classContext; } 1.10 +17 -8 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexContentTypeSG.java Index: JAXBComplexContentTypeSG.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexContentTypeSG.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- JAXBComplexContentTypeSG.java 29 Apr 2005 09:55:27 -0000 1.9 +++ JAXBComplexContentTypeSG.java 8 Jul 2005 20:43:31 -0000 1.10 @@ -21,9 +21,11 @@ import org.apache.ws.jaxme.generator.sg.ComplexContentSG; import org.apache.ws.jaxme.generator.sg.ComplexContentSGChain; import org.apache.ws.jaxme.generator.sg.ComplexTypeSG; +import org.apache.ws.jaxme.generator.sg.Context; import org.apache.ws.jaxme.generator.sg.GroupSG; import org.apache.ws.jaxme.generator.sg.ObjectSG; import org.apache.ws.jaxme.generator.sg.ParticleSG; +import org.apache.ws.jaxme.generator.sg.SGFactory; import org.apache.ws.jaxme.logging.Logger; import org.apache.ws.jaxme.logging.LoggerAccess; import org.apache.ws.jaxme.xs.XSGroup; @@ -61,8 +63,9 @@ return anchestor; } } - private final GroupSG groupSG; - private final boolean isEmpty, isMixed; + + private final boolean isEmpty, isMixed; + private final ParticleSG rootParticle; private boolean isInitialized; private final Locator locator; @@ -79,17 +82,16 @@ } locator = pType.getLocator(); if (pType.getComplexType().isEmpty()) { - groupSG = null; isEmpty = true; isMixed = false; + rootParticle = null; } else { XSParticle particle = pType.getComplexType().getParticle(); if (particle == null) { throw new NullPointerException("Missing group particle for type = " + pType.getName()); } if (particle.isGroup()) { - XSGroup group = particle.getGroup(); - groupSG = pComplexTypeSG.getTypeSG().getFactory().getGroupSG(group, pComplexTypeSG.getClassContext()); + rootParticle = newParticleSG(pComplexTypeSG.getTypeSG().getFactory(), particle, pComplexTypeSG.getClassContext()); } else { throw new IllegalStateException("Expected internal group"); } @@ -98,6 +100,13 @@ } } + protected ParticleSG newParticleSG(SGFactory pFactory, XSParticle pParticle, Context pContext) throws SAXException { + JAXBParticleSG chain = new JAXBParticleSG(pFactory, pParticle, pContext); + ParticleSGImpl result = new ParticleSGImpl(chain); + result.init(); + return result; + } + public Locator getLocator(ComplexContentSG pController) { return locator; } public void init(ComplexContentSG pController) throws SAXException { @@ -129,8 +138,8 @@ return result; } - public GroupSG getGroupSG(ComplexContentSG pController) { - return groupSG; + public ParticleSG getRootParticle(ComplexContentSG pController) { + return rootParticle; } public boolean isEmpty(ComplexContentSG pController) { @@ -175,7 +184,7 @@ * to the JAXB 1.0 specification, 5.9.7. */ private void verify(ComplexContentSG pController) throws SAXException { - findParticles(pController.getGroupSG()); + findParticles(new GroupSG[0], pController.getRootParticle()); /* 5.9.7, 1) If {content type} is mixed, bind the entire content model * to a general content property with the content-property name "content". 1.10 +6 -9 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBParticleSG.java Index: JAXBParticleSG.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBParticleSG.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- JAXBParticleSG.java 24 Apr 2005 20:16:48 -0000 1.9 +++ JAXBParticleSG.java 8 Jul 2005 20:43:31 -0000 1.10 @@ -30,9 +30,6 @@ import org.apache.ws.jaxme.xs.XSAny; import org.apache.ws.jaxme.xs.XSElement; import org.apache.ws.jaxme.xs.XSParticle; -import org.apache.ws.jaxme.xs.impl.XSUtil; -import org.apache.ws.jaxme.xs.jaxb.JAXBElement; -import org.apache.ws.jaxme.xs.jaxb.JAXBProperty; import org.xml.sax.Locator; import org.xml.sax.SAXException; @@ -52,24 +49,24 @@ /** <p>Creates a new instance of JAXBParticleSG.java.</p> */ - public JAXBParticleSG(GroupSG pGroup, XSParticle pParticle, Context pClassContext) throws SAXException { + public JAXBParticleSG(SGFactory pFactory, XSParticle pParticle, + Context pClassContext) throws SAXException { minOccurs = pParticle.getMinOccurs(); maxOccurs = pParticle.getMaxOccurs(); type = pParticle.getType(); - SGFactory factory = pGroup.getFactory(); if (pParticle.isGroup()) { - groupSG = factory.getGroupSG(pParticle.getGroup(), pClassContext); + groupSG = pFactory.getGroupSG(pParticle.getGroup(), pClassContext); objectSG = null; } else if (pParticle.isElement()) { element = pParticle.getElement(); if (element.isGlobal()) { - objectSG = factory.getObjectSG(element); + objectSG = pFactory.getObjectSG(element); } else { - objectSG = factory.getObjectSG(element, pClassContext); + objectSG = pFactory.getObjectSG(element, pClassContext); } groupSG = null; } else if (pParticle.isWildcard()) { - objectSG = factory.getObjectSG(pParticle.getWildcard(), pClassContext); + objectSG = pFactory.getObjectSG(pParticle.getWildcard(), pClassContext); groupSG = null; wildcard = pParticle.getWildcard(); } else { 1.20 +1 -1 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java Index: JAXBComplexTypeSG.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBComplexTypeSG.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- JAXBComplexTypeSG.java 6 Jul 2005 21:34:13 -0000 1.19 +++ JAXBComplexTypeSG.java 8 Jul 2005 20:43:31 -0000 1.20 @@ -277,7 +277,7 @@ if (ccSG.isEmpty()) { return new EmptyElementHandlerSG(pController, pJs); } else { - GroupSG group = ccSG.getGroupSG(); + GroupSG group = ccSG.getRootParticle().getGroupSG(); if (group.isSequence()) { return new SequenceHandlerSG(pController, pJs); } else if (group.isChoice()) { 1.17 +28 -21 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSchemaSG.java Index: JAXBSchemaSG.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSchemaSG.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- JAXBSchemaSG.java 19 Apr 2005 20:11:14 -0000 1.16 +++ JAXBSchemaSG.java 8 Jul 2005 20:43:31 -0000 1.17 @@ -524,31 +524,38 @@ generateCreateMethods(pJs, pType, prefix, pContextSet); } + /** Generate create methods for the given particle. + */ + private void generateCreateMethods(JavaSource pJs, ParticleSG pParticle, + String pName, Set pContextSet) + throws SAXException { + if (pParticle.isGroup()) { + GroupSG group = pParticle.getGroupSG(); + generateCreateMethods(pJs, group.getParticles(), pName, pContextSet); + } else if (pParticle.isElement()) { + ObjectSG oSG = pParticle.getObjectSG(); + if (oSG.isGlobal()) { + return; // Will be generated elsewhere + } + TypeSG tSG = oSG.getTypeSG(); + if (tSG.isGlobalType()) { + return; // Will be generated elsewhere + } + generateCreateMethod(pJs, pContextSet, tSG, pName); + } else if (pParticle.isWildcard()) { + throw new IllegalStateException("TODO: Add support for wildcards here."); + } else { + throw new IllegalStateException("Invalid class type"); + } + } + /** Generate create methods for the given particles. */ private void generateCreateMethods(JavaSource pJs, ParticleSG[] pParticles, String pName, Set pContextSet) throws SAXException { for (int i = 0; i < pParticles.length; i++) { - ParticleSG particle = pParticles[i]; - if (particle.isGroup()) { - GroupSG group = particle.getGroupSG(); - generateCreateMethods(pJs, group.getParticles(), pName, pContextSet); - } else if (particle.isElement()) { - ObjectSG oSG = particle.getObjectSG(); - if (oSG.isGlobal()) { - continue; // Will be generated elsewhere - } - TypeSG tSG = oSG.getTypeSG(); - if (tSG.isGlobalType()) { - continue; // Will be generated elsewhere - } - generateCreateMethod(pJs, pContextSet, tSG, pName); - } else if (particle.isWildcard()) { - throw new IllegalStateException("TODO: Add support for wildcards here."); - } else { - throw new IllegalStateException("Invalid class type"); - } + generateCreateMethods(pJs, pParticles[i], pName, pContextSet); } } @@ -565,8 +572,8 @@ if (ccSG.isEmpty()) { return; } - GroupSG group = ccSG.getGroupSG(); - generateCreateMethods(pJs, group.getParticles(), pName, pContextSet); + ParticleSG particle = ccSG.getRootParticle(); + generateCreateMethods(pJs, particle, pName, pContextSet); } /** 1.60 +4 -0 ws-jaxme/status.xml Index: status.xml =================================================================== RCS file: /home/cvs/ws-jaxme/status.xml,v retrieving revision 1.59 retrieving revision 1.60 diff -u -r1.59 -r1.60 --- status.xml 8 Jul 2005 14:45:07 -0000 1.59 +++ status.xml 8 Jul 2005 20:43:57 -0000 1.60 @@ -46,6 +46,10 @@ The JavaParser didn't handle multidimensional arrays properly. (Frederic Ahring, [EMAIL PROTECTED]) </action> + <action dev="JW" type="fix" context="generator"> + Fixed that the generator didn't detect top level groups with + multiplicity > 1 in a complex type. + </action> </release> <release version="0.4" date="2005-May-19"> <action dev="JW" type="fix" context="xs"> 1.7 +1 -2 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java Index: GroupHandlerSG.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- GroupHandlerSG.java 28 Apr 2005 23:57:53 -0000 1.6 +++ GroupHandlerSG.java 8 Jul 2005 20:43:57 -0000 1.7 @@ -40,7 +40,6 @@ import org.apache.ws.jaxme.js.LocalJavaField; import org.apache.ws.jaxme.js.Parameter; import org.apache.ws.jaxme.js.TypedValue; -import org.apache.ws.jaxme.js.impl.TypedValueImpl; import org.apache.ws.jaxme.xs.xml.XsQName; import org.xml.sax.SAXException; @@ -70,7 +69,7 @@ super(pType, pJs); outerHandler = this; ccSG = pType.getComplexContentSG(); - group = ccSG.getGroupSG(); + group = ccSG.getRootParticle().getGroupSG(); particles = group.getParticles(); isMixed = ccSG.isMixed(); findGroups(particles); 1.2 +1 -1 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/ParticleWalker.java Index: ParticleWalker.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/ParticleWalker.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ParticleWalker.java 24 Apr 2005 20:16:48 -0000 1.1 +++ ParticleWalker.java 8 Jul 2005 20:43:57 -0000 1.2 @@ -34,7 +34,7 @@ visitor.emptyType(pType); } else { visitor.startComplexContent(pType); - walkGroup(ccSG.getGroupSG()); + walkGroup(ccSG.getRootParticle().getGroupSG()); visitor.endComplexContent(pType); } } 1.7 +1 -1 ws-jaxme/src/pm/org/apache/ws/jaxme/pm/generator/jdbc/JaxMeJdbcSG.java Index: JaxMeJdbcSG.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/pm/org/apache/ws/jaxme/pm/generator/jdbc/JaxMeJdbcSG.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- JaxMeJdbcSG.java 3 Sep 2004 01:46:12 -0000 1.6 +++ JaxMeJdbcSG.java 8 Jul 2005 20:43:57 -0000 1.7 @@ -322,7 +322,7 @@ } if (!pTypeSG.hasSimpleContent()) { ComplexContentSG cct = pTypeSG.getComplexContentSG(); - GroupSG groupSG = cct.getGroupSG(); + GroupSG groupSG = cct.getRootParticle().getGroupSG(); ParticleSG[] childs = groupSG.getParticles(); if (childs != null) { for (int i = 0; i < childs.length; i++) { 1.18 +1 -1 ws-jaxme/src/test/jaxb/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/ws-jaxme/src/test/jaxb/build.xml,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- build.xml 6 Mar 2005 02:32:27 -0000 1.17 +++ build.xml 8 Jul 2005 20:43:57 -0000 1.18 @@ -120,7 +120,7 @@ <schema dir="${basedir}"> <include name="enumeration.xsd"/> <include name="wildcards.xsd"/> - <include name="rss.xsd"/> + <!-- <include name="rss.xsd"/> --> <include name="**/xjc*.xsd"/> </schema> <produces dir="${srcdir}" includes="org/apache/ws/jaxme/test/misc/enumeration/*"/> 1.9 +2 -4 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/ComplexContentSG.java Index: ComplexContentSG.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/ComplexContentSG.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- ComplexContentSG.java 24 Apr 2005 20:16:48 -0000 1.8 +++ ComplexContentSG.java 8 Jul 2005 20:43:58 -0000 1.9 @@ -17,9 +17,7 @@ import org.xml.sax.Locator; import org.xml.sax.SAXException; -import org.apache.ws.jaxme.generator.sg.GroupSG; import org.apache.ws.jaxme.generator.sg.ParticleSG; -import org.apache.ws.jaxme.js.JavaSource; /** Interface of a complex type with a complex content model. @@ -41,9 +39,9 @@ */ public boolean isMixed(); - /** <p>Returns the child elements.</p> + /** Returns the complex types root particle. */ - public GroupSG getGroupSG(); + public ParticleSG getRootParticle(); /** Returns a list of all element particles, which are * being generated as properties of the type. 1.9 +9 -9 ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit/ParserTest.java Index: ParserTest.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit/ParserTest.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- ParserTest.java 18 May 2005 22:09:10 -0000 1.8 +++ ParserTest.java 8 Jul 2005 20:43:58 -0000 1.9 @@ -338,7 +338,7 @@ ComplexTypeSG ct3 = t3.getComplexTypeSG(); assertTrue(!ct3.hasSimpleContent()); ComplexContentSG cct3 = ct3.getComplexContentSG(); - ParticleSG[] childs = cct3.getGroupSG().getParticles(); + ParticleSG[] childs = cct3.getRootParticle().getGroupSG().getParticles(); assertEquals(2, childs.length); assertTrue(childs[0].isElement()); ObjectSG child1 = childs[0].getObjectSG(); @@ -686,7 +686,7 @@ assertEquals(new XsQName((String) null, "USAddress"), usAddress.getName()); assertTrue(usAddress.isGlobalType()); assertTrue(usAddress.isComplex()); - assertTrue(usAddress.getComplexTypeSG().getComplexContentSG().getGroupSG().isSequence()); + assertTrue(usAddress.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().isSequence()); // USAddress.country // <xsd:attribute name='country' type='xsd:string' fixed='US'/> // ToDo: test attribute fixed='US' @@ -697,7 +697,7 @@ assertEquals(JavaQNameImpl.getInstance(String.class), country.getTypeSG().getRuntimeType()); // USAddress children String [] nameShouldBe = {"name", "street", "city", "state", "zip"}; - ParticleSG [] usAddressChildren = usAddress.getComplexTypeSG().getComplexContentSG().getGroupSG().getParticles(); + ParticleSG [] usAddressChildren = usAddress.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().getParticles(); assertEquals(5, usAddressChildren.length); for (int i = 0; i < usAddressChildren.length; i++) { ParticleSG child = usAddressChildren[i]; @@ -716,7 +716,7 @@ ComplexTypeSG itemsComplex = items.getComplexTypeSG(); assertTrue(!itemsComplex.hasSimpleContent()); ComplexContentSG itemsComplexContent = itemsComplex.getComplexContentSG(); - GroupSG group = itemsComplexContent.getGroupSG(); + GroupSG group = itemsComplexContent.getRootParticle().getGroupSG(); assertTrue(group.isSequence()); // Items.item ParticleSG[] itemsChildren = group.getParticles(); @@ -729,7 +729,7 @@ TypeSG itemST = item.getObjectSG().getTypeSG(); assertTrue(itemST.isComplex()); assertTrue(!itemST.getComplexTypeSG().hasSimpleContent()); - assertTrue(itemST.getComplexTypeSG().getComplexContentSG().getGroupSG().isSequence()); + assertTrue(itemST.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().isSequence()); // Items.item.partNum // <xsd:attribute name='partNum' type='SKU' use='required'/> AttributeSG[] itemAttributes = itemST.getComplexTypeSG().getAttributes(); @@ -739,7 +739,7 @@ assertTrue(partNum.isRequired()); // Items.item.USPrice // <xsd:element name='USPrice' type='xsd:decimal'/> - ParticleSG[] itemChildren = itemST.getComplexTypeSG().getComplexContentSG().getGroupSG().getParticles(); + ParticleSG[] itemChildren = itemST.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().getParticles(); assertEquals(5, itemChildren.length); ParticleSG usPrice = itemChildren[2]; assertTrue(usPrice.isElement()); @@ -791,7 +791,7 @@ assertEquals(new XsQName((String) null, "PurchaseOrderType"), purchaseOrderType.getName()); assertTrue(purchaseOrderType.isGlobalType()); assertTrue(purchaseOrderType.isComplex()); - assertTrue(purchaseOrderType.getComplexTypeSG().getComplexContentSG().getGroupSG().isSequence()); + assertTrue(purchaseOrderType.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().isSequence()); // PurchaseOrderType.orderDate // <xsd:attribute name='orderDate' type='xsd:date'/> AttributeSG [] potAttributes = purchaseOrderType.getComplexTypeSG().getAttributes(); @@ -800,7 +800,7 @@ assertEquals(new XsQName((String) null, "orderDate"), orderDate.getName()); assertEquals(JavaQNameImpl.getInstance(Calendar.class), orderDate.getTypeSG().getSimpleTypeSG().getRuntimeType()); - ParticleSG [] potChildren = purchaseOrderType.getComplexTypeSG().getComplexContentSG().getGroupSG().getParticles(); + ParticleSG [] potChildren = purchaseOrderType.getComplexTypeSG().getComplexContentSG().getRootParticle().getGroupSG().getParticles(); assertEquals(4, potChildren.length); // PurchaseOrderType.shipTo // <xsd:element name='shipTo' type='USAddress'/>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]