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/04/18 22:32:18 UTC
cvs commit: ws-jaxme/src/jaxme/org/apache/ws/jaxme/impl JMUnmarshallerHandlerImpl.java
jochen 2005/04/18 13:32:18
Modified: src/jaxme/org/apache/ws/jaxme/junit BaseTestCase.java
NestedGroupTest.java
src/test/jaxb nestedGroups.xsd
src/jaxme/org/apache/ws/jaxme/impl
JMUnmarshallerHandlerImpl.java
Log:
Fixed a bug in the handling of nested groups.
Revision Changes Path
1.8 +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.8
diff -u -r1.7 -r1.8
--- BaseTestCase.java 11 Oct 2004 23:03:48 -0000 1.7
+++ BaseTestCase.java 18 Apr 2005 20:32:18 -0000 1.8
@@ -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.5 +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.5
diff -u -r1.4 -r1.5
--- NestedGroupTest.java 7 Mar 2005 20:00:28 -0000 1.4
+++ NestedGroupTest.java 18 Apr 2005 20:32:18 -0000 1.5
@@ -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
+ * {@link 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);
+ }
}
1.3 +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.3
diff -u -r1.2 -r1.3
--- nestedGroups.xsd 8 Apr 2005 23:10:46 -0000 1.2
+++ nestedGroups.xsd 18 Apr 2005 20:32:18 -0000 1.3
@@ -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>
1.7 +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.7
diff -u -r1.6 -r1.7
--- JMUnmarshallerHandlerImpl.java 7 Mar 2005 20:00:28 -0000 1.6
+++ JMUnmarshallerHandlerImpl.java 18 Apr 2005 20:32:18 -0000 1.7
@@ -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();
---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org