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]

Reply via email to