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