jochen 2005/04/18 13:31:49 Modified: src/jaxme/org/apache/ws/jaxme/junit Tag: v0_4 BaseTestCase.java NestedGroupTest.java src/jaxme/org/apache/ws/jaxme/impl Tag: v0_4 JMUnmarshallerHandlerImpl.java src/test/jaxb Tag: v0_4 nestedGroups.xsd Log: Fixed a bug in the handling of nested groups. Revision Changes Path No revision No revision 1.7.2.1 +1 -2 ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit/BaseTestCase.java Index: BaseTestCase.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit/BaseTestCase.java,v retrieving revision 1.7 retrieving revision 1.7.2.1 diff -u -r1.7 -r1.7.2.1 --- BaseTestCase.java 11 Oct 2004 23:03:48 -0000 1.7 +++ BaseTestCase.java 18 Apr 2005 20:31:49 -0000 1.7.2.1 @@ -89,7 +89,6 @@ protected Object unmarshal(Class pClass, String pXML) throws JAXBException { JAXBContext context = JAXBContext.newInstance(getPackageName(pClass)); Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.unmarshal(new InputSource(new StringReader(pXML))); return unmarshaller.unmarshal(new InputSource(new StringReader(pXML))); } 1.4.2.1 +80 -2 ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit/NestedGroupTest.java Index: NestedGroupTest.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit/NestedGroupTest.java,v retrieving revision 1.4 retrieving revision 1.4.2.1 diff -u -r1.4 -r1.4.2.1 --- NestedGroupTest.java 7 Mar 2005 20:00:28 -0000 1.4 +++ NestedGroupTest.java 18 Apr 2005 20:31:49 -0000 1.4.2.1 @@ -15,7 +15,20 @@ */ package org.apache.ws.jaxme.junit; -import org.apache.ws.jaxme.test.misc.group.Persons; +import java.io.StringReader; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.UnmarshalException; +import javax.xml.bind.Unmarshaller; +import javax.xml.bind.ValidationEvent; +import javax.xml.bind.ValidationEventHandler; + +import org.apache.ws.jaxme.ValidationEvents; +import org.apache.ws.jaxme.impl.ValidationEventImpl; +import org.apache.ws.jaxme.test.misc.group.impl.PersonsImpl; +import org.apache.ws.jaxme.test.nestedgroups.MailTemplate; +import org.apache.ws.jaxme.test.nestedgroups.impl.MailTemplateImpl; +import org.xml.sax.InputSource; /** @@ -30,7 +43,7 @@ private String getPersons() throws Exception { return - "<Persons xmlns=\"http://ws.apache.org/jaxme/test/misc/group\">\n" + "<Persons xmlns=\"" + new PersonsImpl().getQName().getNamespaceURI() + "\">\n" + " <Person Alias=\"Ias\">\n" + " <FirstName>Changshin</FirstName>\n" + " <LastName>Lee</LastName>\n" @@ -45,4 +58,69 @@ public void testNestedGroup() throws Exception { //unmarshalMarshalUnmarshal(Persons.class, getPersons()); } + + private String getMailTemplate1() { + return + "<ng:MailTemplate name=\"foo\" language=\"bar\"" + + " xmlns:ng=\"" + new MailTemplateImpl().getQName().getNamespaceURI() + "\">\n" + + " <ng:subject>A test subject</ng:subject>\n" + + " <ng:body>A test body</ng:body>\n" + + "</ng:MailTemplate>"; + } + + private String getMailTemplate2() { + return + "<ng:MailTemplate name=\"foo\" language=\"bar\"" + + " xmlns:ng=\"" + new MailTemplateImpl().getQName().getNamespaceURI() + "\">\n" + + " <ng:subject>A test subject</ng:subject>\n" + + " <ng:prepend>A prefix</ng:prepend>\n" + + " <ng:append>A suffix</ng:append>\n" + + "</ng:MailTemplate>"; + } + + private String getMailTemplate3() { + return + "<ng:MailTemplate name=\"foo\" language=\"bar\"" + + " xmlns:ng=\"" + new MailTemplateImpl().getQName().getNamespaceURI() + "\">\n" + + " <ng:subject>A test subject</ng:subject>\n" + + " <ng:prepend>A prefix</ng:prepend>\n" + + " <ng:append>A suffix</ng:append>\n" + + " <ng:body>A test body</ng:body>\n" + + "</ng:MailTemplate>"; + } + + /** Tests unmarshalling and marshalling of an instance of + * [EMAIL PROTECTED] MailTemplate}. + */ + public void testMailTemplate() throws Exception { + unmarshalMarshalUnmarshal(MailTemplate.class, getMailTemplate1()); + unmarshalMarshalUnmarshal(MailTemplate.class, getMailTemplate2()); + } + + private class MyEventHandler implements ValidationEventHandler { + private boolean ok; + public boolean handleEvent(ValidationEvent pEvent) { + if (pEvent instanceof ValidationEventImpl) { + ValidationEventImpl ev = (ValidationEventImpl) pEvent; + if (ValidationEvents.EVENT_CHOICE_GROUP_REUSE.equals(ev.getErrorCode())) { + ok = true; + } + } + return false; + } + } + + /** Tests proper handling of the choice group. + */ + public void testMailTemplateError() throws Exception { + JAXBContext context = JAXBContext.newInstance(getPackageName(MailTemplate.class)); + Unmarshaller unmarshaller = context.createUnmarshaller(); + MyEventHandler h = new MyEventHandler(); + unmarshaller.setEventHandler(h); + try { + unmarshaller.unmarshal(new InputSource(new StringReader(getMailTemplate3()))); + } catch (Throwable t) { + } + assertTrue(h.ok); + } } No revision No revision 1.6.2.1 +9 -2 ws-jaxme/src/jaxme/org/apache/ws/jaxme/impl/JMUnmarshallerHandlerImpl.java Index: JMUnmarshallerHandlerImpl.java =================================================================== RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/impl/JMUnmarshallerHandlerImpl.java,v retrieving revision 1.6 retrieving revision 1.6.2.1 diff -u -r1.6 -r1.6.2.1 --- JMUnmarshallerHandlerImpl.java 7 Mar 2005 20:00:28 -0000 1.6 +++ JMUnmarshallerHandlerImpl.java 18 Apr 2005 20:31:49 -0000 1.6.2.1 @@ -214,6 +214,15 @@ public void endElement(String pNamespaceURI, String pLocalName, String pQName) throws SAXException { int lvl = level--; switch (state) { + case STATE_GROUP: + while (state == STATE_GROUP) { + if (activeParser.isFinished()) { + removeActiveParser(); + } + } + if (state != STATE_COMPLEX_CONTENT) { + break; + } case STATE_COMPLEX_CONTENT: if (lvl != endLevel) { throw new IllegalStateException("Expected level " + endLevel @@ -237,8 +246,6 @@ } } break; - case STATE_GROUP: - throw new IllegalStateException("Not yet implemented"); case STATE_SIMPLE_ATOMIC: { String s = sb.toString(); resetAtomicState(); No revision No revision 1.2.2.1 +35 -0 ws-jaxme/src/test/jaxb/nestedGroups.xsd Index: nestedGroups.xsd =================================================================== RCS file: /home/cvs/ws-jaxme/src/test/jaxb/nestedGroups.xsd,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -u -r1.2 -r1.2.2.1 --- nestedGroups.xsd 8 Apr 2005 23:10:46 -0000 1.2 +++ nestedGroups.xsd 18 Apr 2005 20:31:49 -0000 1.2.2.1 @@ -82,4 +82,39 @@ </xs:sequence> </xs:complexType> </xs:element> + + <xs:element name="MailTemplate"> + <xs:annotation> + <xs:documentation>Comment describing your root element</xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:sequence> + <xs:element name="subject" type="xs:string"/> + <xs:choice> + <xs:sequence> + <xs:element name="prepend" type="xs:string"/> + <xs:element name="append" type="xs:string"/> + </xs:sequence> + <xs:element name="body" maxOccurs="unbounded"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="delivery" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value="dailyDigest"/> + <xs:enumeration value="immediate"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + </xs:choice> + </xs:sequence> + <xs:attribute name="language" type="xs:string" use="optional" default="EN"/> + <xs:attribute name="name" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> </xs:schema>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]