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