I have come across a similar error while trying to marshall a collection 
of strings. It works when a value element is available in the collection 
mapping. This is needed when the elements
in the list are in-built jibx types, in this case String.

For example if you have a collection of account number strings then the 
mapping will look like
       <collection name="accountNumbers" get-method="getAccountNumbers"
                set-method="setAccountNumbers"
                item-type="java.lang.String"
                factory="org.jibx.runtime.Utility.arrayListFactory" 
usage="optional">
            <value name="accountNumber" style="element" 
usage="optional"/>   
        </collection>

Hope this helps.

regards
Varghese





Marie-Eve Lussier-Cote wrote:
> Hi all,
>  
> I'm using jibx 1.1.5 with hibernate classes. These classes have been 
> generated by Hibernate Synchronizer tool from our database schema.  
> java.util.Set<> are used to represent one-to-many relations, which are 
> collections in the binding file.  When I try to marshall a collection (with 
> my own marshaller), I got a ClassCastException java.lang.String (And I'm not 
> entered in my marshaller yet ) The same marshaller is used for structure and 
> works fine.  Unmarshaller works fine too. Can anyone please help me ?   (I 
> tried to use a Set factory and got the same error)
>  
> -------error--------------
> Exception in thread "main" java.lang.ClassCastException: java.lang.String
>
> at 
> ca.gc.nrcan.mis_nap.data.JiBX_MungeAdapter.JiBX_jibx_genbinding_binding_marshal_1_0()
>
> at 
> ca.gc.nrcan.mis_nap.data.base.BaseMdMetadata.JiBX_jibx_genbinding_binding_marshal_1_2(BaseMdMetadata.java)
>
> at 
> ca.gc.nrcan.mis_nap.data.MdMetadata.JiBX_jibx_genbinding_binding_marshal_2_2(MdMetadata.java)
>
> at 
> ca.gc.nrcan.mis_nap.data.JiBX_jibx_genbinding_bindingMdMetadata_access1.marshal()
>
> at ca.gc.nrcan.mis_nap.data.MdMetadata.marshal(MdMetadata.java)
>
> at 
> org.jibx.runtime.impl.MarshallingContext.marshalRoot(MarshallingContext.java:1044)
>
> at 
> org.jibx.runtime.impl.MarshallingContext.marshalDocument(MarshallingContext.java:1114)
>
> at LireXML.main(LireXML.java:40)
>
>  
> ---------classes--------
> public class MdMetadata extends BaseMdMetadata {
>
> [...]
>
> }
>
> public abstract class BaseMdMetadata implements Serializable {
>
>     // primary key
>     private java.lang.Long id;
>
>     // fields
>     private java.lang.String fileidentifier;
>     private java.lang.String language;
>
>
>     // collections
>     private java.util.Set<ca.gc.nrcan.mis_nap.data.Hierarchylevelname> 
> objHierarchylevelnameSet;
>
>     [...]
>
> }
>
> ----------binding----------------------
>
> <binding forwards="false" value-style="attribute">
>   <mapping class="ca.gc.nrcan.mis_nap.data.MdMetadata" name="MD_Metadata">
>    <namespace uri="http://www.isotc211.org/2005/gmd"; default="elements" 
> prefix="gmd"/>
>     <structure map-as="ca.gc.nrcan.mis_nap.data.base.BaseMdMetadata"/>
>   </mapping> 
>   
>   <mapping class="ca.gc.nrcan.mis_nap.data.base.BaseMdMetadata" 
> abstract="true">
>    <namespace uri="http://www.isotc211.org/2005/gmd"; default="elements"/>
>     <value name="id" get-method="getId" set-method="setId" style="attribute" 
> usage="optional"/>
>     <structure name="fileIdentifier" get-method="getFileidentifier" 
>        set-method="setFileidentifier" usage="required" type="java.lang.String"
>        marshaller="ca.gc.nrcan.marshalling.CharacterStringMapper" 
>        unmarshaller="ca.gc.nrcan.marshalling.CharacterStringMapper"/>
>     <structure name="language" get-method="getLanguage" 
> set-method="setLanguage" 
>        usage="required" type="java.lang.String"
>        marshaller="ca.gc.nrcan.marshalling.CharacterStringMapper" 
> unmarshaller="ca.gc.nrcan.marshalling.CharacterStringMapper"/>
>     <collection field="objHierarchylevelnameSet" 
> create-type="java.util.HashSet">
>      <structure name="hierarchyLevelName" 
> type="ca.gc.nrcan.mis_nap.data.Hierarchylevelname"
>         marshaller="ca.gc.nrcan.marshalling.CharacterStringMapper" 
> unmarshaller="ca.gc.nrcan.marshalling.CharacterStringMapper"/>
>    </collection>
>   </mapping>
>   
>   <mapping class="ca.gc.nrcan.mis_nap.data.Hierarchylevelname" 
> name="hierarchyLevelName">
>    <namespace uri="http://www.isotc211.org/2005/gmd"; default="elements" 
> prefix="gmd"/>
>     <structure map-as="ca.gc.nrcan.mis_nap.data.base.BaseHierarchylevelname"/>
>   </mapping>
>   
>   <mapping class="ca.gc.nrcan.mis_nap.data.base.BaseHierarchylevelname" 
> abstract="true">
>     <namespace uri="http://www.isotc211.org/2005/gmd"; default="elements" 
> prefix="gmd"/>
>     <value name="id" get-method="getId" set-method="setId" style="attribute" 
> usage="optional"/>
>     <value name="hierarchyLevelName" get-method="getHierarchylevelname" 
> set-method="setHierarchylevelname" 
>        usage="required"/>
>   </mapping> 
> </binding>
>
> -------------xml file (collection section)-----------------
>
> *** <gmd:hierarchyLevelName xsi:type="gmd:PT_FreeText_PropertyType">
>     <gco:CharacterString>021E05 - Sherbrooke</gco:CharacterString>
>     <gmd:PT_FreeText>
>       <gmd:textGroup>
>         <gmd:LocalisedCharacterString 
> locale="#frFR">Sherbrooke</gmd:LocalisedCharacterString>
>       </gmd:textGroup>
>       <gmd:textGroup>
>         <gmd:LocalisedCharacterString 
> locale="#anAN">Sherbrooke</gmd:LocalisedCharacterString>
>       </gmd:textGroup>
>     </gmd:PT_FreeText>
>  </gmd:hierarchyLevelName>***
>
> <gmd:hierarchyLevelName xsi:type="gmd:PT_FreeText_PropertyType">
>     <gco:CharacterString>066P16 - Montreal</gco:CharacterString>
>     <gmd:PT_FreeText>
>       <gmd:textGroup>
>         <gmd:LocalisedCharacterString 
> locale="#frFR">Montréal</gmd:LocalisedCharacterString>
>       </gmd:textGroup>
>       <gmd:textGroup>
>         <gmd:LocalisedCharacterString 
> locale="#anAN">Montreal</gmd:LocalisedCharacterString>
>       </gmd:textGroup>
>     </gmd:PT_FreeText>
>  </gmd:hierarchyLevelName>
>
> My unmarshaller takes the part between *** and convert it to String (it has 
> to be stored in the one field in the database). It works fine for structure 
> like :
>
>  <gmd:fileIdentifier xsi:type="gmd:PT_FreeText_PropertyType">
>     <gco:CharacterString>SIM-PNA<gco:CharacterString>
>     <gmd:PT_FreeText>
>       <gmd:textGroup>
>         <gmd:LocalisedCharacterString locale="#frFR">Base de données SIM-PNA 
> de Sherbrooke</gmd:LocalisedCharacterString>
>       </gmd:textGroup>
>       <gmd:textGroup>
>        <gmd:LocalisedCharacterString locale="#anAN">SIM-PNA Database of 
> Sherbrooke</gmd:LocalisedCharacterString>
>       </gmd:textGroup>
>     </gmd:PT_FreeText>
>  </gmd:fileIdentifier>
>
> Hope my english is enough clear  : )
>
>  
> Thanks !
> Marie-Eve
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> jibx-users mailing list
> jibx-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jibx-users
>
>   


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
jibx-users mailing list
jibx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jibx-users

Reply via email to