Georg,

I don't think it's possible to map a 'multi-valued' field such as the
'id' field of B to a single occurence within the XML output.

Werner

Georg Federmann wrote:
> Hello Werner,
> 
> thanks a lot for your reply!
> Here is the mapping as I am using it right now:
> 
> <mapping>
>     <class name="ab.Data">
>         <map-to xml="data"/>
>         <field name="data" type="ab.A" collection="array">
>             <bind-xml name="a" node="element"/>
>         </field>
>     </class>
> 
>     <class name="ab.A">
>         <field name="field" type="ab.B" container="true" collection="array">
>             <bind-xml name="value" node="element"/>
>         </field>
>     </class>
> 
>     <class name="ab.B">
>         <field name="value" type="integer"/>
>     </class>
> </mapping>
> 
> and this is the result generated by Castor:
> 
> <data>
>     <a>
>         <value>15</value>
>         <value>8</value>
>     </a>
>     <a>
>         <value>12</value>
>         <value>17</value>
>         <value>8</value>
>         <value>3</value>
>     </a>
> </data>
> 
> this is as far as I got, and it's already very beautiful. But the crucial
> step is to get the "id" field of the B type into the "id" attribute of the
> <a> element like in
> 
> <data>
>     <a id="series1">
>         <value>15</value>
>         <value>8</value>
>     </a>
>     <a id="series2">
>         <value>12</value>
>         <value>17</value>
>         <value>8</value>
>         <value>3</value>
>     </a>
> </data>
> 
> I'm very grateful for any help here!
> 
> best regards, Georg
> 
> I've added the sources of the java types, maybe it's of any help ...
> 
> package ab;
> public class A {
>     private B[] field;
> 
>     public A () {};
> 
>     public A ( B[] bs ){
>         setField ( bs );
>     }
> 
>     public B[] getField () {
>         return field;
>     }
> 
>     public void setField ( B[] field ) {
>         this.field = field;
>     }
> }
> 
> package ab;
> public class B {
>     private String id;
>     private int value;
> 
>     public B (){}
> 
>     public B ( int val, String id ){
>         setId ( id );
>         setValue ( val );
>     }
> 
>     public String getId () {
>         return id;
>     }
> 
>     public void setId ( String id ) {
>         this.id = id;
>     }
> 
>     public int getValue () {
>         return value;
>     }
> 
>     public void setValue ( int value ) {
>         this.value = value;
>     }
> }
> 
> package ab;
> public class Data {
>     private A[] data;
> 
>     public Data (){};
> 
>     public Data ( A[] data ){
>         setData ( data );
>     }
> 
>     public A[] getData () {
>         return data;
>     }
> 
>     public void setData ( A[] data ) {
>         this.data = data;
>     }
> }
> 
> package ab;
> public class MarshalTest {
> 
>     public static void main ( String[] args ) throws IOException,
> MappingException, MarshalException, ValidationException {
>         Mapping mapping = new Mapping ();
>         mapping.loadMapping ( "resources/abMapping.xml" );
> 
>         B[] b1 = new B[] { new B ( 15, "series1" ), new B ( 8, "series1" )
> };
>         B[] b2 = new B[] { new B ( 12, "series2" ), new B ( 17, "series2" ),
> new B ( 8, "series2" ), new B ( 3, "series2" ) };
>         A[] a1 = new A[] { new A ( b1 ), new A ( b2 ) };
>         Data data = new Data ( a1 );
> 
>         StringWriter writer = new StringWriter ();
>         Marshaller marshaller = new Marshaller ( writer );
>         marshaller.setMapping ( mapping );
>         marshaller.marshal ( data );
> 
>         System.out.println ( writer.toString () );
>         Writer output = new FileWriter ( new File ( "resources/abResult.xml"
> ) );
>         output.write ( writer.toString () );
>         output.flush ();
>         output.close ();
>     }
> }
> 
> 
> 
> On Mon, Jun 9, 2008 at 10:13 AM, Werner Guttmann <[EMAIL PROTECTED]>
> wrote:
> 
>> Georg,
>>
>> what does your mapping file look like right now ? How have you tried to
>> map A and Bs ?
>>
>> Having said that, I guess this might be achievable, but I am not 100%
>> sure. Basically, you will have to use the container attribute (set to
>> false) on the class mapping for 'B', so that no <B> tags will be
>> rendered. Whether this will work with your additional requirement on the
>> aggregation by the value of the id attribute of B, not sure.
>>
>> Regards
>> Werner
>>
>> Georg Federmann wrote:
>>> Hi all,
>>>
>>> I need to marshal a given object model to a given xml, but I can't
>> persuade
>>> Castor to do as needed.
>>> This is the problem:
>>> I have two java types A and B where B has a field "id" and A holds
>>> references to B. Now I need the field "id" of B as an attribute of the
>> xml
>>> element <a>, that represents A.
>>>
>>> class A{
>>>   B[] field;
>>> }
>>>
>>> class B{
>>>   String id;
>>>   int value;
>>> }
>>>
>>> a collection of objects of type A shall be marshalled to some xml like
>> this:
>>> <data>
>>>   <a id="b1">
>>>     <value>15</value>
>>>     <value>8</value>
>>>   </a>
>>>   <a id="b2">
>>>     <value>12</value>
>>>     <value>17</value>
>>>     <value>8</value>
>>>     <value>3</value>
>>>   </a>
>>> </data>
>>>
>>> Somehow I can't see, how I can split the fields of the B type into an
>>> attribute "id" of the <a> element and a child element <value> of the <a>
>>> element.
>>>
>>>
>>> I appreciate any help
>>>
>>> best regards, Georg
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe from this list, please visit:
>>
>>    http://xircles.codehaus.org/manage_email
>>
>>
>>
> 

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to