[ http://jira.codehaus.org/browse/JIBX-114?page=comments#action_66251 ] 

Dennis Sosnoski commented on JIBX-114:
--------------------------------------

No worries. Glad you discovered the problem, Chris!

> Unmarshalling and Marshalling of xml document creates different xml structures
> ------------------------------------------------------------------------------
>
>          Key: JIBX-114
>          URL: http://jira.codehaus.org/browse/JIBX-114
>      Project: JiBX
>         Type: Bug

>   Components: core
>  Environment: Mac OSX 10.4 Using JDK 1.5
>     Reporter: Chris Chen

>
>
> I am getting different XML document when marshalling and unmarshalling the 
> same class data, using only default generated codes and no custom codes.  The 
> unmarshalling is the one causing the problem.
> Here's my binding file.  The problem occurs in the instructions collection 
> located in the first "x" element mapping.
> ===================================================
> <binding>
>         <namespace uri="jabber:x:data" default="elements"/>
>         <mapping name="x" ns="jabber:x:data"
>                 class="com.echomine.jabber.packet.DataXPacket" 
> ordered='false'>
>                 <value name='type' field='formType' style='attribute'/>
>                 <collection field="instructions" type="java.util.ArrayList"
>                         item-type="java.lang.String" usage="optional">
>                         <value name='instructions' style='element' 
> usage='optional'/>
>                 </collection>
>                 <value name='title' field='title' usage='optional'/>
>                 <collection field="fields" type="java.util.ArrayList"
>                         item-type="com.echomine.jabber.packet.DataXField" 
> usage="optional"/>
>                 <collection field='itemFields' type='java.util.ArrayList'
>                         item-type='com.echomine.jabber.packet.DataXItemList' 
> usage='optional'/>
>         </mapping>
>         <mapping name='item' ns='jabber:x:data' 
> class='com.echomine.jabber.packet.DataXItemList'>
>                 <collection field="fields" type="java.util.ArrayList"
>                         item-type="com.echomine.jabber.packet.DataXField"/>
>         </mapping>
>         <mapping name='field' ns='jabber:x:data' ordered='false'
>                 class='com.echomine.jabber.packet.DataXField' >
>                 <value name='label' field='label' style='attribute' 
> usage='optional'/>
>                 <value name='type' field='fieldType' style='attribute' 
> usage='optional'/>
>                 <value name='var' field='variableName' style='attribute' 
> usage='optional'/>
>                 <value name='desc' field='description' usage='optional'/>
>                 <value name='required' field='required' usage='optional'/>
>                 <collection field='options' type='java.util.ArrayList' 
> usage='optional'
>                         item-type='com.echomine.jabber.packet.DataXOption'/>
>                 <collection field='values' type='java.util.ArrayList' 
> usage='optional'
>                         item-type='java.lang.String'>
>                         <structure name='value' usage='optional'>
>                                 <value style='text' usage='optional'/>
>                         </structure>
>                 </collection>
>         </mapping>
>         <mapping name='option' ns='jabber:x:data' 
> class='com.echomine.jabber.packet.DataXOption'>
>                 <value name='label' field='label' style='attribute' 
> usage='optional'/>
>                 <value name='value' field='value'/>
>         </mapping>
> </binding>
> ===================================================
> Here's my testcase, with comments attached to the code:
>         //this is the string that the marshalled document is compared to
>         String xml = "<x xmlns='jabber:x:data' 
> type='submit'><instructions>simple instructions</instructions></x>";
>         StringReader reader = new StringReader(xml);
>         DataXPacket packet = new DataXPacket();
>         packet.addInstruction("simple instructions");
>         //marshalls the object
>         JiBXUtil.marshallObject(writer, packet);
>         //the comparison passes with no problem, indicating that marshalling 
> is bug-free
>         compare(reader);
>         reader.reset();
>         // unmarshalls the reader string above
>         packet = (DataXPacket) JiBXUtil.unmarshallObject(reader, 
> DataXPacket.class);
>         // this assertion below FAILS with the exception shown below
>         assertEquals("simple instructions", packet.getInstructions());
> Here's the exception that I get when running the code:
>     [junit] expected:<simple instructions> but was:<[simple instructions]>
>     [junit] junit.framework.AssertionFailedError: expected:<simple 
> instructions> but was:<[simple instructions]>
>     [junit]     at 
> com.echomine.jabber.packet.DataXPacketTest.testInstructions(DataXPacketTest.java:133)
> It's interesting that the marshalling code is outputting expected xml, but 
> the unmarshalling does not parse the data as expected.  
> Is there a better way to write the binding file to parse the following type 
> of schema?
> <xs:schema
>     xmlns:xs='http://www.w3.org/2001/XMLSchema'
>     targetNamespace='jabber:x:data'
>     xmlns='jabber:x:data'
>     elementFormDefault='qualified'>
>   <xs:annotation>
>     <xs:documentation>
>       The protocol documented by this schema is defined in
>       JEP-0004: http://www.jabber.org/jeps/jep-0004.html
>     </xs:documentation>
>   </xs:annotation>
>   <xs:element name='x'>
>     <xs:complexType>
>       <xs:sequence>
>         <xs:element name='instructions' 
>                     minOccurs='0' 
>                     maxOccurs='unbounded' 
>                     type='xs:string'/>
>         <xs:element name='title' minOccurs='0' type='xs:string'/>
>         <xs:element ref='field' minOccurs='0' maxOccurs='unbounded'/>
>         <xs:element ref='reported' minOccurs='0' maxOccurs='1'/>
>         <xs:element ref='item' minOccurs='0' maxOccurs='unbounded'/>
>       </xs:sequence>
>       <xs:attribute name='type' use='required'>
>         <xs:simpleType>
>           <xs:restriction base='xs:NCName'>
>             <xs:enumeration value='cancel'/>
>             <xs:enumeration value='form'/>
>             <xs:enumeration value='result'/>
>             <xs:enumeration value='submit'/>
>           </xs:restriction>
>         </xs:simpleType>
>       </xs:attribute>
>     </xs:complexType>
>   </xs:element>
>   <xs:element name='field'>
>     <xs:complexType>
>       <xs:sequence>
>         <xs:element name='desc' minOccurs='0' type='xs:string'/>
>         <xs:element name='required' minOccurs='0' type='empty'/>
>         <xs:element ref='value' minOccurs='0' maxOccurs='unbounded'/>
>         <xs:element ref='option' minOccurs='0' maxOccurs='unbounded'/>
>       </xs:sequence>
>       <xs:attribute name='label' type='xs:string' use='optional'/>
>       <xs:attribute name='type' use='optional' default='text-single'>
>         <xs:simpleType>
>           <xs:restriction base='xs:NCName'>
>             <xs:enumeration value='boolean'/>
>             <xs:enumeration value='fixed'/>
>             <xs:enumeration value='hidden'/>
>             <xs:enumeration value='jid-multi'/>
>             <xs:enumeration value='jid-single'/>
>             <xs:enumeration value='list-multi'/>
>             <xs:enumeration value='list-single'/>
>             <xs:enumeration value='text-multi'/>
>             <xs:enumeration value='text-private'/>
>             <xs:enumeration value='text-single'/>
>           </xs:restriction>
>         </xs:simpleType>
>       </xs:attribute>
>       <xs:attribute name='var' type='xs:string' use='optional'/>
>     </xs:complexType>
>   </xs:element>
>   <xs:element name='option'>
>     <xs:complexType>
>       <xs:sequence>
>         <xs:element ref='value'/>
>       </xs:sequence>
>       <xs:attribute name='label' type='xs:string' use='optional'/>
>     </xs:complexType>
>   </xs:element>
>   <xs:element name='value' type='xs:string'/>
>   <xs:element name='reported'>
>     <xs:complexType>
>       <xs:sequence>
>         <xs:element ref='field' maxOccurs='unbounded'/>
>       </xs:sequence>
>     </xs:complexType>
>     <xs:annotation>
>       <xs:documentation>
>         When contained in a "reported" element, the "field" element
>         SHOULD NOT contain a "value" child.
>       </xs:documentation>
>     </xs:annotation>
>   </xs:element>
>   <xs:element name='item'>
>     <xs:complexType>
>       <xs:sequence>
>         <xs:element ref='field' maxOccurs='unbounded'/>
>       </xs:sequence>
>     </xs:complexType>
>   </xs:element>
>   <xs:simpleType name='empty'>
>     <xs:restriction base='xs:string'>
>       <xs:enumeration value=''/>
>     </xs:restriction>
>   </xs:simpleType>
> </xs:schema>

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira



-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
jibx-devs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-devs

Reply via email to