Author: jochen Date: Fri Oct 6 05:18:17 2006 New Revision: 453571 URL: http://svn.apache.org/viewvc?view=rev&rev=453571 Log: If an extending types content was reduced to the extending types content particle (in other words, if the extended type had empty content), then the content particles minOccurs and maxOccurs values haven't been inherited. PR: JAXME-84
Added: webservices/jaxme/branches/b0_5/src/test/jaxb/jira/jaxme-84.xsd Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BaseTestCase.java webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSTypeImpl.java webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/junit/JiraTest.java webservices/jaxme/branches/b0_5/status.xml Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BaseTestCase.java URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BaseTestCase.java?view=diff&rev=453571&r1=453570&r2=453571 ============================================================================== --- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BaseTestCase.java (original) +++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BaseTestCase.java Fri Oct 6 05:18:17 2006 @@ -81,7 +81,7 @@ } protected void unmarshalMarshalUnmarshal(Class pClass, String pXML, boolean pIndenting) - throws Exception { + throws JAXBException { Object o = unmarshal(pClass, pXML); assertNotNull(o); String s = marshal(o, pClass, pIndenting); @@ -90,7 +90,7 @@ assertNotNull(comp); } - protected void unmarshalMarshalUnmarshal(Class pClass, String pXML) throws Exception { + protected void unmarshalMarshalUnmarshal(Class pClass, String pXML) throws JAXBException { unmarshalMarshalUnmarshal(pClass, pXML, true); } Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java?view=diff&rev=453571&r1=453570&r2=453571 ============================================================================== --- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java (original) +++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java Fri Oct 6 05:18:17 2006 @@ -1,5 +1,6 @@ package org.apache.ws.jaxme.junit; +import java.io.File; import java.io.StringReader; import java.io.StringWriter; import java.util.List; @@ -33,6 +34,8 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import com.softwareag.namespaces.de.s.xdws.soap_api.XdwsResponse; + /** Some excerpts from Jira bug reports. */ @@ -276,4 +279,15 @@ Jaxme72 jaxme72Clone = (Jaxme72) ctx.createUnmarshaller().unmarshal(new InputSource(new StringReader(sw.toString()))); assertEquals(jaxme72.getTest(),jaxme72Clone.getTest()); } + + /** Test for <a href="http://issues.apache.org/jira/browse/JAXME-84">JAXME-84</a>. + */ + public void testJAXME84() throws Exception { + final String xml = + "<xdws:xdwsResponse version=\"1\" xmlns:xdws=\"http://namespaces.softwareag.com/de/s/xDWS/soap-api\">\n" + + " <xdws:response rc=\"4\"/>\n" + + " <xdws:result rc=\"4\"/>\n" + + "</xdws:xdwsResponse>"; + unmarshalMarshalUnmarshal(XdwsResponse.class, xml); + } } Added: webservices/jaxme/branches/b0_5/src/test/jaxb/jira/jaxme-84.xsd URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/test/jaxb/jira/jaxme-84.xsd?view=auto&rev=453571 ============================================================================== --- webservices/jaxme/branches/b0_5/src/test/jaxb/jira/jaxme-84.xsd (added) +++ webservices/jaxme/branches/b0_5/src/test/jaxb/jira/jaxme-84.xsd Fri Oct 6 05:18:17 2006 @@ -0,0 +1,32 @@ +<xs:schema + xmlns:xs="http://www.w3.org/2001/XMLSchema" + targetNamespace="http://namespaces.softwareag.com/de/s/xDWS/soap-api" + xmlns:xdws="http://namespaces.softwareag.com/de/s/xDWS/soap-api" + elementFormDefault="qualified" + attributeFormDefault="unqualified"> + <xs:complexType name="xdwsResultInfo"> + <xs:attribute name="rc" type="xs:int" use="required"/> + <xs:attribute name="message" type="xs:string" use="optional"/> + <xs:attribute name="details" type="xs:string" use="optional"/> + </xs:complexType> + <xs:element name="xdwsResponse"> + <xs:complexType> + <xs:sequence> + <xs:element name="response" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:complexContent> + <xs:extension base="xdws:xdwsResultInfo"> + <xs:choice minOccurs="0"> + <xs:element name="a" type="xs:string"/> + <xs:element name="b" type="xs:string"/> + </xs:choice> + </xs:extension> + </xs:complexContent> + </xs:complexType> + </xs:element> + <xs:element name="result" type="xdws:xdwsResultInfo"/> + </xs:sequence> + <xs:attribute name="version" type="xs:int" use="required" /> + </xs:complexType> + </xs:element> +</xs:schema> Modified: webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSTypeImpl.java URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSTypeImpl.java?view=diff&rev=453571&r1=453570&r2=453571 ============================================================================== --- webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSTypeImpl.java (original) +++ webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSTypeImpl.java Fri Oct 6 05:18:17 2006 @@ -179,6 +179,34 @@ return complexContent; } + private int getMinOccursByParticle(XsTTypeDefParticle pParticle) throws SAXException { + if (pParticle instanceof XsEChoice) { + return ((XsEChoice) pParticle).getMinOccurs(); + } else if (pParticle instanceof XsESequence) { + return ((XsESequence) pParticle).getMinOccurs(); + } else if (pParticle instanceof XsTAll) { + return ((XsTAll) pParticle).getMinOccurs(); + } else if (pParticle instanceof XsTGroupRef) { + return ((XsTGroupRef) pParticle).getMinOccurs(); + } else { + throw new IllegalStateException("Unknown TypeDefParticle type: " + pParticle.getClass().getName()); + } + } + + private int getMaxOccursByParticle(XsTTypeDefParticle pParticle) throws SAXException { + if (pParticle instanceof XsEChoice) { + return ((XsEChoice) pParticle).getMaxOccurs(); + } else if (pParticle instanceof XsESequence) { + return ((XsESequence) pParticle).getMaxOccurs(); + } else if (pParticle instanceof XsTAll) { + return ((XsTAll) pParticle).getMaxOccurs(); + } else if (pParticle instanceof XsTGroupRef) { + return ((XsTGroupRef) pParticle).getMaxOccurs(); + } else { + throw new IllegalStateException("Unknown TypeDefParticle type: " + pParticle.getClass().getName()); + } + } + protected XSGroup getGroupByParticle(XsTTypeDefParticle pParticle) throws SAXException { XSGroup result; XSType myOwner = getOwner(); @@ -334,7 +362,10 @@ } } else if (extendedComplexType.isEmpty()) { complexContentType = groupType; - complexContentParticle = new XSParticleImpl(group); + XSParticleImpl particleImpl = new XSParticleImpl(group); + particleImpl.setMinOccurs(getMinOccursByParticle(particle)); + particleImpl.setMaxOccurs(getMaxOccursByParticle(particle)); + complexContentParticle = particleImpl; } else { XSGroup sequenceGroup = new ExtensionGroup(pOwner, new XSParticle[]{extendedComplexType.getParticle(), new XSParticleImpl(group)}); complexContentParticle = new XSParticleImpl(sequenceGroup); Modified: webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/junit/JiraTest.java URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/junit/JiraTest.java?view=diff&rev=453571&r1=453570&r2=453571 ============================================================================== --- webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/junit/JiraTest.java (original) +++ webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/junit/JiraTest.java Fri Oct 6 05:18:17 2006 @@ -204,4 +204,56 @@ assertEquals(1, particle.getMinOccurs()); assertEquals(-1, particle.getMaxOccurs()); } + + /** Test for <a href="http://issues.apache.org/jira/browse/JAXME-84">JAXME-84</a>. + */ + public void testJAXME84() throws Exception { + final String xml = + "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' targetNamespace='http://namespaces.softwareag.com/de/s/xDWS/soap-api'\n" + + " xmlns:xdws='http://namespaces.softwareag.com/de/s/xDWS/soap-api' elementFormDefault='qualified'\n" + + " attributeFormDefault='unqualified'>\n" + + " <xs:complexType name='xdwsResultInfo'>\n" + + " <xs:attribute name='rc' type='xs:int' use='required'/>\n" + + " <xs:attribute name='message' type='xs:string' use='optional'/>\n" + + " <xs:attribute name='details' type='xs:string' use='optional'/>\n" + + " </xs:complexType>\n" + + " <xs:element name='xdwsResponse'>\n" + + " <xs:complexType>\n" + + " <xs:sequence>\n" + + " <xs:element name='response' minOccurs='0' maxOccurs='unbounded'>\n" + + " <xs:complexType>\n" + + " <xs:complexContent>\n" + + " <xs:extension base='xdws:xdwsResultInfo'>\n" + + " <xs:choice minOccurs='0'>\n" + + " <xs:element name='a' type='xs:string'/>\n" + + " <xs:element name='b' type='xs:string'/>\n" + + " </xs:choice>\n" + + " </xs:extension>\n" + + " </xs:complexContent>\n" + + " </xs:complexType>\n" + + " </xs:element>\n" + + " <xs:element name='result' type='xdws:xdwsResultInfo'/>\n" + + " </xs:sequence>\n" + + " <xs:attribute name='version' type='xs:int' use='required' />\n" + + " </xs:complexType>\n" + + " </xs:element>\n" + + "</xs:schema>\n"; + XSSchema schema = parse(xml, "jaxme84.xsd"); + XSElement[] elements = schema.getElements(); + assertEquals(1, elements.length); + XSElement xdwsResponseElement = elements[0]; + XSParticle[] xdwsResponseParticles = assertGroup(assertComplexContent(assertComplexType(xdwsResponseElement.getType()))).getParticles(); + assertEquals(2, xdwsResponseParticles.length); + XSElement responseElement = assertElement(xdwsResponseParticles[0]); + XSComplexType responseType = assertComplexType(responseElement.getType()); + XSParticle particle = responseType.getParticle(); + assertEquals(0, particle.getMinOccurs()); + assertEquals(1, particle.getMaxOccurs()); + XSParticle[] particles = assertGroup(particle).getParticles(); + assertEquals(2, particles.length); + XSElement a = assertElement(particles[0]); + assertEquals(new XsQName("http://namespaces.softwareag.com/de/s/xDWS/soap-api", "a"), a.getName()); + XSElement b = assertElement(particles[1]); + assertEquals(new XsQName("http://namespaces.softwareag.com/de/s/xDWS/soap-api", "b"), b.getName()); + } } Modified: webservices/jaxme/branches/b0_5/status.xml URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/status.xml?view=diff&rev=453571&r1=453570&r2=453571 ============================================================================== --- webservices/jaxme/branches/b0_5/status.xml (original) +++ webservices/jaxme/branches/b0_5/status.xml Fri Oct 6 05:18:17 2006 @@ -81,6 +81,12 @@ The object factory wasn't properly initialized, if a schema was using multiple package names. </action> + <action dev="JW" type="fix" context="xs"> + If an extending types content was reduced to the extending types + content particle (in other words, if the extended type had empty + content), then the content particles minOccurs and maxOccurs + values haven't been inherited. (JAXME-84) + </action> </release> <release version="0.5.1" date="06-Jan-2006"> <action dev="JW" type="enhancement" context="js"> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]