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