Personally, I would move the 'id' attribute to the A class, as that's
where it belongs to (semantically).

Werner

Werner Guttmann wrote:
> 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
> 
> 

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

    http://xircles.codehaus.org/manage_email


Reply via email to