You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jaxme-dev@ws.apache.org by jo...@apache.org on 2005/08/12 22:22:42 UTC

svn commit: r232370 - in /webservices/jaxme/branches/b0_5: ./ src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/ src/jaxme/org/apache/ws/jaxme/junit/ src/test/jaxb/jira/

Author: jochen
Date: Fri Aug 12 13:22:29 2005
New Revision: 232370

URL: http://svn.apache.org/viewcvs?rev=232370&view=rev
Log:
The ChoiceHandlerSG did not treat a choice
with minOccurs="0" as optional.
PR: JAXME-65

Added:
    webservices/jaxme/branches/b0_5/src/test/jaxb/jira/jaxme-65.xsd
Modified:
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/AllHandlerSG.java
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/ChoiceHandlerSG.java
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/SequenceHandlerSG.java
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java
    webservices/jaxme/branches/b0_5/status.xml

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/AllHandlerSG.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/AllHandlerSG.java?rev=232370&r1=232369&r2=232370&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/AllHandlerSG.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/AllHandlerSG.java Fri Aug 12 13:22:29 2005
@@ -52,9 +52,9 @@
 	}
 
 	AllHandlerSG(GroupHandlerSG pOuterHandler, ComplexTypeSG pType,
-				 GroupSG pGroup, JavaSource pJs)
+				 ParticleSG pParticle, JavaSource pJs)
 			throws SAXException {
-		super(pOuterHandler, pType, pGroup, pJs);
+		super(pOuterHandler, pType, pParticle, pJs);
 	}
 
 	protected int getState(int pParticleNum) { return pParticleNum; }

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/ChoiceHandlerSG.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/ChoiceHandlerSG.java?rev=232370&r1=232369&r2=232370&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/ChoiceHandlerSG.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/ChoiceHandlerSG.java Fri Aug 12 13:22:29 2005
@@ -19,7 +19,6 @@
 
 import org.apache.ws.jaxme.ValidationEvents;
 import org.apache.ws.jaxme.generator.sg.ComplexTypeSG;
-import org.apache.ws.jaxme.generator.sg.GroupSG;
 import org.apache.ws.jaxme.generator.sg.ParticleSG;
 import org.apache.ws.jaxme.impl.JMUnmarshallerHandlerImpl;
 import org.apache.ws.jaxme.js.DirectAccessible;
@@ -49,9 +48,9 @@
 	}
 
 	ChoiceHandlerSG(GroupHandlerSG pOuterHandler, ComplexTypeSG pType,
-					GroupSG pGroup, JavaSource pJs)
+					ParticleSG pParticle, JavaSource pJs)
 			throws SAXException {
-		super(pOuterHandler, pType, pGroup, pJs);
+		super(pOuterHandler, pType, pParticle, pJs);
 	}
 
 	protected int getState(int pParticleNum) { return pParticleNum; }
@@ -111,13 +110,7 @@
 
 	public JavaMethod newIsFinishedMethod() throws SAXException {
 		JavaMethod result = super.newIsFinishedMethod();
-		Object o = getStateField();
-		for (int i = 0;  i < particles.length;  i++) {
-			if (!isRequiredParticle(particles[i])) {
-				o = "true";
-				break;
-			}
-		}
+		Object o = isRequiredParticle(particle) ? (Object) getStateField() : "true";
 		result.addLine("return ", o, ";");
 		return result;
 	}

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java?rev=232370&r1=232369&r2=232370&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java Fri Aug 12 13:22:29 2005
@@ -58,6 +58,7 @@
  */
 public abstract class GroupHandlerSG extends HandlerSGImpl {
 	protected final ComplexContentSG ccSG;
+	protected final ParticleSG particle;
 	protected final GroupSG group;
 	protected final ParticleSG[] particles;
 	private final Map groups = new HashMap();
@@ -73,7 +74,8 @@
 		super(pType, pJs);
 		outerHandler = this;
 		ccSG = pType.getComplexContentSG();
-		group = ccSG.getRootParticle().getGroupSG();
+		particle = ccSG.getRootParticle();
+		group = particle.getGroupSG();
 		particles = group.getParticles();
 		isMixed = ccSG.isMixed();
 		findGroups(particles);
@@ -84,15 +86,16 @@
 	 * fields to the Java class <code>pJs</code>.
 	 */
 	protected GroupHandlerSG(GroupHandlerSG pOuterHandler, ComplexTypeSG pType,
-							 GroupSG pGroup, JavaSource pJs) throws SAXException {
+							 ParticleSG pParticle, JavaSource pJs) throws SAXException {
 		super(pType, pJs);
 		outerHandler = pOuterHandler;
 		if (!pJs.isInnerClass()) {
 			throw new IllegalStateException("Expected inner class");
 		}
 		ccSG = null;
-		group = pGroup;
-		particles = pGroup.getParticles();
+		particle = pParticle;
+		group = particle.getGroupSG();
+		particles = group.getParticles();
 		isMixed = pType.getComplexContentSG().isMixed();
 		findGroups(particles);
 	}
@@ -110,24 +113,25 @@
 		return (GroupHandlerSG) groups.get(pGroup);
 	}
 
-	private GroupHandlerSG newGroupHandlerSG(GroupSG pGroup, String pName) throws SAXException {
+	private GroupHandlerSG newGroupHandlerSG(ParticleSG pParticle, String pName) throws SAXException {
 		JavaSource js = getJavaSource();
 		JavaInnerClass jic = js.newJavaInnerClass(pName, JavaSource.PUBLIC);
 		jic.addExtends(JMSAXGroupParser.class);
-		if (pGroup.isSequence()) {
-			return new SequenceHandlerSG(outerHandler, ctSG, pGroup, jic);
-		} else if (pGroup.isChoice()) {
-			return new ChoiceHandlerSG(outerHandler, ctSG, pGroup, jic);
-		} else if (pGroup.isAll()) {
-			return new AllHandlerSG(outerHandler, ctSG, pGroup, jic);
+		GroupSG group = pParticle.getGroupSG();
+		if (group.isSequence()) {
+			return new SequenceHandlerSG(outerHandler, ctSG, pParticle, jic);
+		} else if (group.isChoice()) {
+			return new ChoiceHandlerSG(outerHandler, ctSG, pParticle, jic);
+		} else if (group.isAll()) {
+			return new AllHandlerSG(outerHandler, ctSG, pParticle, jic);
 		} else {
 			throw new IllegalStateException("Invalid group type");
 		}
 	}
 
-	private GroupHandlerSG newGroupHandlerSG(GroupSG pGroup) throws SAXException {
+	private GroupHandlerSG newGroupHandlerSG(ParticleSG pParticle) throws SAXException {
 		JavaSource js = getJavaSource();
-		String name = GroupUtil.getGroupName(pGroup);
+		String name = GroupUtil.getGroupName(pParticle.getGroupSG());
 		for (int i = 0;  ;  i++) {
 			String n = name;
 			if (i > 0) {
@@ -135,7 +139,7 @@
 			}
 			n += "Handler";
 			if (js.getInnerClass(n) == null) {
-				GroupHandlerSG result = newGroupHandlerSG(pGroup, n);
+				GroupHandlerSG result = newGroupHandlerSG(pParticle, n);
 				result.newGetHandlerMethod(js);
 				return result;
 			}
@@ -156,7 +160,7 @@
 			if (particle.isGroup()) {
 				GroupSG group = particle.getGroupSG();
 				if (!groups.containsKey(group)) {
-					GroupHandlerSG handler = newGroupHandlerSG(group);
+					GroupHandlerSG handler = newGroupHandlerSG(particle);
 					groups.put(group, handler);
 				}
 			} else if (particle.isElement()) {

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/SequenceHandlerSG.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/SequenceHandlerSG.java?rev=232370&r1=232369&r2=232370&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/SequenceHandlerSG.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/SequenceHandlerSG.java Fri Aug 12 13:22:29 2005
@@ -44,9 +44,9 @@
 	}
 
 	SequenceHandlerSG(GroupHandlerSG pOuterHandler, ComplexTypeSG pTypeSG,
-					  GroupSG pGroup, JavaSource pJs)
+					  ParticleSG pParticle, JavaSource pJs)
 			throws SAXException {
-		super(pOuterHandler, pTypeSG, pGroup, pJs);
+		super(pOuterHandler, pTypeSG, pParticle, pJs);
 	}
 
 	protected DirectAccessible getEndElementState() throws SAXException {

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java?rev=232370&r1=232369&r2=232370&view=diff
==============================================================================
--- 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 Aug 12 13:22:29 2005
@@ -2,6 +2,7 @@
 
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.util.List;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
@@ -21,6 +22,8 @@
 import org.apache.ws.jaxme.generator.sg.SchemaSG;
 import org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader;
 import org.apache.ws.jaxme.generator.util.JavaNamer;
+import org.apache.ws.jaxme.test.jira.jaxme65.Jaxme65;
+import org.apache.ws.jaxme.test.jira.jaxme65.Jaxme65Type;
 import org.apache.ws.jaxme.test.misc.types.Jira62;
 import org.apache.ws.jaxme.test.misc.types.Row;
 import org.apache.ws.jaxme.test.misc.types.impl.RowImpl;
@@ -62,10 +65,12 @@
         unmarshalMarshalUnmarshal(TransmissionData.class, input2);
         final String input3 =
             "<TransmissionData mail-id=\"mail456.test-account@dspc.net\" xmlns=\"http://commons.dspc.net/activitymodel\">\n" +
-            "  <sender account-id=\"test-account@dspc.net\" name=\"Joe Tester\"/>\n" +
+            "  <sender account-id=\"test-account@dspc.net\" name=\"Joe Tester\">\n" +
+            "    <phone>0793041414141</phone>\n" +
+            "  </sender>\n" +
             "  <recipient account-id=\"hvendelbo@bluprints.com\" name=\"Henrik Vendelbo\"/>\n" +
             "</TransmissionData>";
-        unmarshalMarshalUnmarshal(TransmissionData.class, input2);
+        unmarshalMarshalUnmarshal(TransmissionData.class, input3);
     }
 
     /** Test for <a href="http://issues.apache.org/jira/browse/JAXME-12">JAXME-12</a>
@@ -229,5 +234,27 @@
 		} catch (SAXException e) {
 			assertTrue(e.getMessage().indexOf("Model groups with maxOccurs > 1 are not yet supported.") != -1);
 		}
+	}
+
+	/** Test for <a href="http://issues.apache.org/jira/browse/JAXME-65">JAXME-65</a>.
+	 */
+	public void testJAXME65() throws Exception {
+		final String xml1 =
+			"<jaxme65 xmlns='http://ws.apache.org/jaxme/test/jira/jaxme65'>some text<problem>here it is</problem>more text</jaxme65>";
+		Jaxme65 text1 = (Jaxme65) getJAXBContext(Jaxme65.class).createUnmarshaller().unmarshal(new InputSource(new StringReader(xml1)));
+		List list1 = text1.getContent();
+		assertEquals(3, list1.size());
+		assertEquals("some text", list1.get(0));
+		Object o = list1.get(1);
+		assertTrue(o instanceof Jaxme65Type.Problem);
+		Jaxme65Type.Problem problem = (Jaxme65Type.Problem) o;
+		assertEquals("here it is", problem.getValue());
+		assertEquals("more text", list1.get(2));
+		final String xml2 =
+			"<jaxme65 xmlns='http://ws.apache.org/jaxme/test/jira/jaxme65'>some text</jaxme65>";
+		Jaxme65 text2 = (Jaxme65) getJAXBContext(Jaxme65.class).createUnmarshaller().unmarshal(new InputSource(new StringReader(xml2)));
+		List list2 = text2.getContent();
+		assertEquals(1, list2.size());
+		assertEquals("some text", list2.get(0));
 	}
 }

Added: webservices/jaxme/branches/b0_5/src/test/jaxb/jira/jaxme-65.xsd
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/test/jaxb/jira/jaxme-65.xsd?rev=232370&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/src/test/jaxb/jira/jaxme-65.xsd (added)
+++ webservices/jaxme/branches/b0_5/src/test/jaxb/jira/jaxme-65.xsd Fri Aug 12 13:22:29 2005
@@ -0,0 +1,15 @@
+<xs:schema targetNamespace='http://ws.apache.org/jaxme/test/jira/jaxme65'
+	elementFormDefault='qualified'
+	xmlns:xs='http://www.w3.org/2001/XMLSchema'>
+  <xs:element name='jaxme65'>
+    <xs:complexType mixed='true'>
+      <xs:choice minOccurs='0' maxOccurs='1'>
+        <xs:element name='problem' type='xs:string'/>
+        <xs:element name='reason' type='xs:string'/>
+        <xs:element name='solution' type='xs:string'/>
+      </xs:choice>
+      <xs:attribute name='id' type='xs:string'/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
+

Modified: webservices/jaxme/branches/b0_5/status.xml
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/status.xml?rev=232370&r1=232369&r2=232370&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/status.xml (original)
+++ webservices/jaxme/branches/b0_5/status.xml Fri Aug 12 13:22:29 2005
@@ -36,6 +36,10 @@
         methods signature.
 		(Frederic Ahring, fahring at de.ibm.com)
       </action>
+      <action dev="JW" type="fix" context="generator">
+        The ChoiceHandlerSG did not treat a choice
+        with minOccurs="0" as optional. (JAXME-65)
+      </action>
     </release>
 	<release version="0.5" date="2005-Aug-08">
       <action dev="JW" type="enhancement" context="js">



---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org