Hi!

I had solved this problem. And I feel myself very unpleasantly because
I just had to read the FAQ. If I use everywhere get-method / set-emthod
instead of field then its working fine.

       Cheers,

           Kiss
Zoltán

> 

> 

> 

>   Hi! 

> 

> I'm trying to marshall hibernate persisted java object graph with
JiBX, 

> but I have found that lazy many-to-one fields won't be marshalled, or
in 

> some circumstances it generates exceptions. 

> 

> I made a very small example where I only have two tables (PARTNER for


> store people 'names', and PARTNER_RELATION to store a named relation
of 

> two people). 

> 

> My hbm.xml files are at the end of the mail, as the binding.xml too.


> 

> If I change the fetch attribute to "join" (or the lazy to


> "false") in the many-to-one fields then the marshalled
document 

> will contains the many to one structures too. Eg.: 

> 

> <?xml version="1.0" encoding="UTF-8"?> 

> 

> <partner> 

> 

>   <id>11</id> 

> 

>   <nev>John Smith</nev> 

> 

>   <leftRelations> 

> 

>     <partner-relation> 

> 

>       <id>22</id> 

> 

>       

> <relationType>friend</relationType> 

> 

>       <leftRelation> 

> 

>         <id>11</id>


> 

>         <nev>John 

> Smith</nev> 

> 

>       </leftRelation> 

> 

>       <rightRelation> <!-- NOW IT
IS NOT 

> LAZY --> 

> 

>         <id>10</id>


> 

>         <nev>Andrew 

> Jackson</nev> 

> 

>       </rightRelation> 

> 

>     </partner-relation> 

> 

>   </leftRelations> 

> 

> </partner> 

> 

> But if the fields are lazy, then the other end of the relation will
be 

> an empty tag. Eg.: 

> 

> <?xml version="1.0" encoding="UTF-8"?> 

> 

> <partner> 

> 

>   <id>11</id> 

> 

>   <nev>John Smith</nev> 

> 

>   <leftRelations> 

> 

>     <partner-relation> 

> 

>       <id>22</id> 

> 

>       

> <relationType>friend</relationType> 

> 

>       <leftRelation> 

> 

>         <id>11</id>


> 

>         <nev>John 

> Smith</nev> 

> 

>       </leftRelation> 

> 

>       <rightRelation/>  <!--
EMPTY 

> AND IT IS LAZY --> 

> 

>     </partner-relation> 

> 

>   </leftRelations> 

> 

> </partner> 

> 

> The lazy fields won't be marshalled even if I try to use 

> "get-method"/"set-method" attributes in the 

> binding.xml (see commented line in binding.xml) in place of 

> "field" attribute. But the getter method of the lazy fields
will 

> be called in both case, because I write into the log in the method!
But 

> there is no output for this fields. 

> 

> Even if I load this lazy many-to-one fields indirectly with hibernate
(I 

> walk the object graph from java) before marshalling, JiBX won't
write 

> them out! 

> 

> If I try to remove the usage="optional" attribute from the


> fields of the abstract Partner mapping, then I got exceptions. 

> 

> If the "id" is not optional then I got this: 

> 

>   java.lang.NullPointerException 

> 

>       at 

>
hu.freesoft.xmldemo.Partner.JiBX_xmldemo_binding_marshal_1_7(Partner.java)


> 

>       at 

>
hu.freesoft.xmldemo.PartnerRelation.JiBX_xmldemo_binding_marshal_1_2(PartnerRelation.java)


> 

>       at 

>
hu.freesoft.xmldemo.JiBX_xmldemo_bindingPartnerRelation_access.marshal()


> 

>       at 

>
hu.freesoft.xmldemo.JiBX_MungeAdapter.JiBX_xmldemo_binding_marshal_1_1()


> 

>       at 

>
hu.freesoft.xmldemo.Partner.JiBX_xmldemo_binding_marshal_1_6(Partner.java)


> 

>       at 

> hu.freesoft.xmldemo.JiBX_xmldemo_bindingPartner_access.marshal() 

> 

>       at 

> hu.freesoft.xmldemo.Partner.marshal(Partner.java) 

> 

>       at 

> org.jibx.runtime.impl.MarshallingContext.marshalRoot(UnknownSource)


> 

>       at 

> org.jibx.runtime.impl.MarshallingContext.marshalDocument(Unknown 

> Source) 

> 

> If only the "name" is not optional, then I got this: 

> 

>   org.jibx.runtime.JiBXException: null value for element 

> "name" from object of type 

> xmldemo.Partner$$EnhancerByCGLIB$$a04007f4 

> 

>       at 

> org.jibx.runtime.impl.MarshallingContext.element(Unknown Source) 

> 

>       at 

> xmldemo.Partner.JiBX_xmldemo_binding_marshal_1_5(Partner.java) 

> 

>       at 

>
xmldemo.PartnerRelation.JiBX_xmldemo_binding_marshal_1_1(PartnerRelation.java)


> 

>       at 

> xmldemo.JiBX_xmldemo_bindingPartnerRelation_access.marshal() 

> 

>       at 

> xmldemo.JiBX_MungeAdapter.JiBX_xmldemo_binding_marshal_1_1() 

> 

>       at 

> xmldemo.Partner.JiBX_xmldemo_binding_marshal_1_3(Partner.java) 

> 

>       at 

> xmldemo.JiBX_xmldemo_bindingPartner_access.marshal() 

> 

>       at
xmldemo.Partner.marshal(Partner.java) 

> 

>       at 

> org.jibx.runtime.impl.MarshallingContext.marshalRoot(UnknownSource)


> 

>       at 

> org.jibx.runtime.impl.MarshallingContext.marshalDocument(Unknown 

> Source) 

> 

> Have someone meet with similar problems? Is there any solution for
it? 

> 

>    Cheers, 

> 

>        Kiss Zoltán 

> 

> --------------------------------------- 

> 

> The binding.xml file is: 

> 

>     <binding forwards="false" 

> value-style="element"> 

> 

>       <mapping 

> class="xmldemo.Partner" name="partner"> 

> 

>         <structure 

> map-as="partner-type"/> 

> 

>         <collection 

> name="leftRelations" field="leftRelations" 

> item-type="xmldemo.PartnerRelation" 

> factory="xmldemo.Partner.setFactory" /> 

> 

>         <collection 

> name="rightRelations" field="rightRelations" 

> item-type="xmldemo.PartnerRelation" 

> factory="xmldemo.Partner.setFactory" /> 

> 

>       </mapping> 

> 

>       <mapping 

> class="xmldemo.Partner" abstract="true" 

> type-name="partner-type"> 

> 

>         <value
name="id" 

> field="id" usage="optional"/> 

> 

>         <value
name="name" 

> field="nev" usage="optional" /> 

> 

>       </mapping> 

> 

>       <mapping 

> class="xmldemo.PartnerRelation" 

> name="partner-relation"> 

> 

>         <value
name="id" 

> field="id"/> 

> 

>         <value 

> name="relationType" field="relationType" />


> 

>         <!-- get-method /
set-method 

> even not working for lazy field --> 

> 

>         <!--structure 

> get-method="getLeftPartner" 

> set-method="setLeftPartner" name="leftRelation"


> map-as="partner-type" /--> 

> 

>         <structure 

> field="leftPartner" name="leftRelation" 

> map-as="partner-type" /> 

> 

>         <structure 

> field="rightPartner" name="rightRelation" 

> map-as="partner-type" /> 

> 

>       </mapping> 

> 

>     </binding> 

> 

> The hbm.xmls: 

> 

>     <hibernate-mapping 

> default-cascade="none"> 

> 

>         <class 

> name="xmldemo.Partner" table="PARTNER" 

> dynamic-insert="false" dynamic-update="false">


> 

>            
<id 

> name="id" type="java.lang.Long" 

> unsaved-value="null"> 

> 

>
               


> <column name="ID" sql-type="NUMBER(19)"/>


> 

>
               


> <generator class="native"></generator> 

> 

>            


> </id> 

> 

>            


> <property name="name" 

> type="java.lang.String"> 

> 

>
               


> <column name="NAME" not-null="true" 

> sql-type="VARCHAR2(128)"/> 

> 

>            


> </property> 

> 

>            
<set 

> name="leftRelations" inverse="true"> 

> 

>
               


> <key><column name="LEFT_PARTNER_FK" 

> sql-type="NUMBER(19)" not-null="true" 

> /></key> 

> 

>
               


> <one-to-many class="xmldemo.PartnerRelation" /> 

> 

>            


> </set> 

> 

>            
<set 

> name="rightRelations" inverse="true"> 

> 

>
               


> <key><column name="RIGHT_PARTNER_FK" 

> sql-type="NUMBER(19)" not-null="true" 

> /></key> 

> 

>
               


> <one-to-many class="xmldemo.PartnerRelation" /> 

> 

>            


> </set> 

> 

>         </class> 

> 

>     </hibernate-mapping> 

> 

>     <hibernate-mapping 

> default-cascade="none"> 

> 

>         <class 

> name="xmldemo.PartnerRelation" 

> table="PARTNER_RELATION" dynamic-insert="false"


> dynamic-update="false"> 

> 

>            
<id 

> name="id" type="java.lang.Long" 

> unsaved-value="null"> 

> 

>
               


> <column name="ID" sql-type="NUMBER(19)"/>


> 

>
               


> <generator class="native"></generator> 

> 

>            


> </id> 

> 

>            


> <property name="relationType" 

> type="java.lang.String"> 

> 

>
               


> <column name="RELATION_TYPE" not-null="true"


> unique="false" sql-type="VARCHAR2(128)"/> 

> 

>            


> </property> 

> 

>            


> <many-to-one name="leftPartner" 

> class="hu.freesoft.xmldemo.Partner" lazy="proxy"


> fetch="select"> 

> 

>
               


> <column name="LEFT_PARTNER_FK" not-null="true"


> sql-type="NUMBER(19)"/> 

> 

>            


> </many-to-one> 

> 

>            


> <many-to-one name="rightPartner" 

> class="hu.freesoft.xmldemo.Partner" lazy="proxy"


> fetch="select"> 

> 

>
               


> <column name="RIGHT_PARTNER_FK"
not-null="true" 

> sql-type="NUMBER(19)"/> 

> 

>            


> </many-to-one> 

> 

>         </class> 

> 

>     </hibernate-mapping> 

> 

>   

> 

> 

> 

>
-------------------------------------------------------------------------


> 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 

> jibx-users@lists.sourceforge.net 

> https://lists.sourceforge.net/lists/listinfo/jibx-users 

> 





-------------------------------------------------------------------------
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
jibx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jibx-users

Reply via email to