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]

Reply via email to