Hi,

Try this binding. It takes your xml output without execptions.
Two things : 1) use collection tag for arrays 2) use abstract and 
type-name attributes for inheritance.

<?xml version="1.0" encoding="UTF-8"?>
<binding forwards="false" value-style="attribute">
  <mapping class="com.magic.testframework.service.dao.LightTestDAO" 
type-name="LightTestDAO_type" abstract="true" ordered="false">
    <structure map-as="com.magic.testframework.service.dao.BasicDAO" 
usage="optional"/>
    <value style="element" name="name" field="name" usage="optional"/>
  </mapping>
 
  <mapping name="light-test-dao" 
class="com.magic.testframework.service.dao.LightTestDAO">
      <structure map-as="LightTestDAO_type" usage="optional"/>
  </mapping>
  <mapping class="com.magic.testframework.service.dao.LightQuestionDAO" 
name="light-question-dao">
    <value style="element" name="question" field="question" 
usage="optional"/>
    <value style="element" name="question-uid" field="questionUID" 
usage="optional"/>
    <structure map-as="com.magic.testframework.service.dao.BasicDAO"/>
  </mapping>
  <mapping class="com.magic.testframework.service.dao.BasicDAO" 
name="basic-dao">
    <value name="id" field="id"/>
  </mapping>
  <mapping class="com.magic.testframework.service.dao.TestDAO" 
name="test-dao">
    <collection field="questions" 
factory="org.jibx.runtime.Utility.arrayListFactory" usage="optional"/>
    <structure map-as="LightTestDAO_type" usage="optional"/>
  </mapping>
</binding>

regards
Varghese

wizzy wrote:
> Hello jibx-users,
>
> I cannot unmarshal my beans. I have 4 beans:
>
> TestDAO - object inherited from LightTestDAO that contains
>         LightQuestionDAO array
> LightTestDAO - object inherited from BasicDAO
> LightQuestionDAO - object inherited from BasicDAO
> BasicDAO - superclass of all beans
>
>   Here is my binding file. It is generated by Jibx binding generator.
>   
> <?xml version="1.0" encoding="UTF-8"?>
> <binding forwards="false" value-style="attribute">
>   <mapping class="com.magic.testframework.service.dao.LightTestDAO" 
> name="light-test-dao">
>     <structure map-as="com.magic.testframework.service.dao.BasicDAO"/>
>     <value style="element" name="name" field="name" usage="optional"/>
>   </mapping>
>   <mapping class="com.magic.testframework.service.dao.LightQuestionDAO" 
> name="light-question-dao">
>     <value style="element" name="question" field="question" usage="optional"/>
>     <value style="element" name="question-uid" field="questionUID" 
> usage="optional"/>
>     <structure map-as="com.magic.testframework.service.dao.BasicDAO"/>
>   </mapping>
>   <mapping class="com.magic.testframework.service.dao.BasicDAO" 
> name="basic-dao">
>     <value name="id" field="id"/>
>   </mapping>
>   <mapping class="com.magic.testframework.service.dao.TestDAO" 
> name="test-dao">
>     <structure field="questions" usage="optional" 
> marshaller="org.jibx.extras.TypedArrayMapper" 
> unmarshaller="org.jibx.extras.TypedArrayMapper"/>
>     <structure map-as="com.magic.testframework.service.dao.LightTestDAO"/>
>   </mapping>
> </binding>
>   
> I try to marshal TestDAO object that contains 2 LightQuestionDAO
> objects. Here is my code to marshal and unmarshal bean:
>
>     IBindingFactory bfact = BindingDirectory.getFactory(TestDAO.class);
>     IMarshallingContext mctx = bfact.createMarshallingContext();
>     mctx.setIndent(2);
>     mctx.marshalDocument(test, "UTF-8", null, out);
>
>     // unmarshal customer information from file
>     IUnmarshallingContext uctx = bfact.createUnmarshallingContext();
>     FileInputStream in = new FileInputStream("out.xml");
>     TestDAO customer = (TestDAO) uctx.unmarshalDocument(in, null);
>     // marshal object back out to file (with nice indentation, as UTF-8)
>
> This is exception I get:
>
> org.jibx.runtime.JiBXException: Expected "light-test-dao" start tag, found 
> "light-question-dao" start tag (line 3, col 23)
>         at 
> org.jibx.runtime.impl.UnmarshallingContext.throwStartTagNameError(UnmarshallingContext.java:287)
>         at 
> org.jibx.runtime.impl.UnmarshallingContext.matchStart(UnmarshallingContext.java:707)
>         at 
> org.jibx.runtime.impl.UnmarshallingContext.parsePastStartTag(UnmarshallingContext.java:743)
>         at
>
> this is the result xml data file:
>
> <test-dao>
>   <light-question-dao>
>     <question>0.13989470240018909sdfhsdjfhgjshgdfg sjhdgfjhsgd fjdshgf jhsg 
> dfh sd</question>
>     <basic-dao id="0"/>
>   </light-question-dao>
>   <light-question-dao>
>     <question>0.1210021595849744sdfhsdjfhgjshgdfg sjhdgfjhsgd fjdshgf jhsg 
> dfh sd</question>
>     <basic-dao id="0"/>
>   </light-question-dao>
>   <light-test-dao>
>     <name>test0.5846512745507241</name>
>     <basic-dao id="0"/>
>   </light-test-dao>
> </test-dao>
>         
> What am I doing wrong? How should I unmarshal these files? Please,
> help.
>         
>   


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
jibx-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-users

Reply via email to