Well, alternatively, you can declare more than one mapping, and pass the
correct one to Marshaller and Unmarshaller instances as required.

Werner

Reinhard Weiss wrote:
> 
> hm, in reply to myself
> 
> i think a fieldhandler will help me out...
> 
> cheerz, reinhard
> 
> 
> 
> -----Ursprüngliche Nachricht-----
> Von: Reinhard Weiss
> Gesendet: Di 10.06.2008 17:29
> An: [email protected]
> Betreff: AW: AW: [castor-user] cannot unmarshal my marshalled xml using a 
> mapping file
>  
> 
> 
> hi werner,
> 
> well, things are running quite well.
> 
> currently i am working on the integration of a crm tool via soap based web 
> services using spring-ws and castor as its o/x mapper.
> 
> by the way, is there a way to declare a 'marshal only' class mapping as well 
> as an 'unmarshal only' class mapping on file basis?
> 
> so that my class would marshal (only) to
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <a:A xmlns:a="http://xyz.com/A";>
>   <a:b> 
>     <a:string>one</a:string>
>     <a:string>two</a:string>
>     <a:string>three</a:string>
>   </a:b>
> </a:A>
> 
> and could be unmarshalled (only) from
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <a:A xmlns:a="http://xyz.com/A";>
>   <!-- here is the difference -->
>   <a:XXX> 
>     <a:string>one</a:string>
>     <a:string>two</a:string>
>     <a:string>three</a:string>
>   </a:XXX>
> </a:A>
> 
> what i want to do is to define all my mapping files (including two mappings 
> for the same class, one for marshalling and one for unmarshalling) at once 
> and feed spring's castormashaller with them. during marshalling, i simply 
> want to prevent that my class - unpredictable - marshals to the wrong 
> structure (that is the structure i expect as input for unmarshalling). 
> unmarshalling would be safe because it always gets the correct xml.
> 
> maybe that's labyrinth-thinking. but i could reuse my class even if the xml 
> is (slighlty) different and i didn't have to manage (un-)marshallers for my 
> class instead.
> 
> cheerz, reinhard!
> 
> 
> -----Ursprüngliche Nachricht-----
> Von: Werner Guttmann [mailto:[EMAIL PROTECTED]
> Gesendet: Mo 09.06.2008 12:28
> An: [email protected]
> Betreff: Re: AW: [castor-user] cannot unmarshal my marshalled xml using a 
> mapping file
>  
> You are welcome, Reinhard.
> 
> Werner
> 
> P.S. How's life these days ?
> 
> Reinhard Weiss wrote:
>> Hi Werner,
>>
>> so it seems that i've tried to map the complete list instead of the list 
>> items.
>> 1000 Thanks - it works perfectly now :)
>>
>> cheerz,
>> reinhard!
>>
>>
>> -----Ursprüngliche Nachricht-----
>> Von: Werner Guttmann [mailto:[EMAIL PROTECTED]
>> Gesendet: Mo 09.06.2008 11:16
>> An: [email protected]
>> Betreff: Re: [castor-user] cannot unmarshal my marshalled xml using a 
>> mapping file
>>  
>> Hi Reinhard,
>>
>> have a look at the following mapping that allows me to marshal the given
>> Java object instances to your desired XML output structure.
>>
>> <mapping>
>>    <class name="xml.reinhard.A">
>>       <description>Mapping for Class com.xyz.A</description>
>>       <map-to xml="A" ns-uri="http://xyz.com/A"; ns-prefix="a" />
>>       <field name="strings" collection="arraylist" type="string">
>>          <bind-xml name="string" node="element" location="b"/>
>>       </field>
>>    </class>
>> </mapping>
>>
>> Please note that I changed the package when running the test(s) locally.
>>
>> Regards
>> Werner
>>
>> Reinhard Weiss wrote:
>>> hi,
>>>
>>> i'am using castor-xml-1.0.5 but even with 1.2 the problem remains:
>>> i cannot completely unmarshal an object from the xml i have marshalled 
>>> before using a mapping file.
>>>
>>> i have a class as simple as this:
>>>
>>>
>>>
>>> package com.xyz;
>>> import java.util.List;
>>> import java.util.ArrayList;
>>> public class A
>>> {
>>>   private List<String> strings;
>>>   public A()
>>>   {
>>>     this.strings = new ArrayList<String>(3);
>>>     this.strings.add("one");
>>>     this.strings.add("two");
>>>     this.strings.add("three");
>>>   }
>>>   public void setStrings(List<String> strings)
>>>   {
>>>     this.strings = strings;
>>>   }
>>>   public List<String> getStrings()
>>>   {
>>>     return this.strings;
>>>   }
>>> }
>>>
>>>
>>>
>>> the mapping file looks as follows
>>>
>>>
>>>
>>> <mapping>
>>>   <class name="com.xyz.A">
>>>     <description>Mapping for Class com.xyz.A</description>
>>>     <map-to xml="A" ns-uri="http://xyz.com/A"; ns-prefix="a" />
>>>     <field name="strings" collection="arraylist" type="string" 
>>> container="false">
>>>       <bind-xml name="b" node="element"/>
>>>     </field>
>>>   </class>
>>> </mapping>
>>>
>>>
>>>
>>> it marshals:
>>>
>>>
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <a:A xmlns:a="http://xyz.com/A";>
>>>   <!-- notice that there is no namespace anymore ??? -->
>>>   <b> 
>>>     <string>one</string>
>>>     <string>two</string>
>>>     <string>three</string>
>>>   </b>
>>> </a:A>
>>>
>>>
>>>
>>> ok, the structure of the xml is finally what i want. 
>>> i use the 'container="false"' attribute in the 'field' element to get one 
>>> 'string' element per list item (as suggested on the how-to page). otherwise 
>>> all strings were merged into a single 'string' element containing 
>>> "onetwothree" (however - all elements with correct namespaces). but for 
>>> some reason castor suppresses the namespace when i use the container 
>>> attribute.
>>>
>>> then, if i ignore the namespace issue and try to unmarshal the xml, i don't 
>>> get back my list of strings any more. as castor failed to handle the 'b' 
>>> element throwing a MarshalException ('unable to find FieldDescriptor for 
>>> 'b') first, i have set the 'ignoreExtraElements' property of the 
>>> unmarshaller to 'true' (using a 'location' attribute with 'b/string' in the 
>>> 'bind-xml' element of my mapping instead didn't help as well).
>>>
>>>
>>>
>>> my test looks as follows
>>>
>>>
>>>   public void testMarshalUnmarshal()
>>>   throws Exception
>>>   {
>>>     A a = new A();
>>>     
>>>     Mapping mapping = new Mapping();
>>>     mapping.loadMapping("a-mapping.xml");
>>>     
>>>     StringWriter writer = new StringWriter();
>>>     
>>>     // global marshaller
>>>     marshaller.setWriter(writer);
>>>     marshaller.setMapping(mapping);
>>>     marshaller.marshal(a);
>>>     
>>>     String marshalled = writer.toString();
>>>     if (logger.isDebugEnabled) logger.debug(marshalled);
>>>
>>>     // global unmarshaller
>>>     unmarshaller.setMapping(mapping);
>>>     unmarshaller.setIgnoreExtraAttributes(true);
>>>     unmarshaller.setIgnoreExtraElements(true);
>>>     
>>>     StringReader reader = new StringReader(marshalled);
>>>     
>>>     Object unmarshalled = unmarshaller.unmarshal(reader);
>>>     
>>>     assertNotNull(unmarshalled);
>>>     assertTrue(unmarshalled instanceof A);
>>>
>>>     // this assertion fails
>>>     assertNotNull(((A) unmarshalled).getStrings());
>>>     assertEquals(a.getStrings().size(), ((A) 
>>> unmarshalled).getStrings().size());
>>>   }
>>>
>>>
>>>
>>> in the end i am still looking for a proper mapping.xml to get the following 
>>> xml:
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <a:A xmlns:a="http://xyz.com/A";>
>>>   <a:b> 
>>>     <a:string>one</a:string>
>>>     <a:string>two</a:string>
>>>     <a:string>three</a:string>
>>>   </a:b>
>>> </a:A>
>>>
>>> which i can successfully unmarshal again.
>>>
>>> any kind of coaching would be nice!
>>> thx in advance,
>>>
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>
>>> DI Reinhard Weiss
>>> Java Developer
>>>
>>> ANECON Software Design und Beratung G.m.b.H.
>>> Alser Straße 4 / Hof 1
>>> A-1090 WIEN
>>>
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>
>>> Zusätzliche Pflichtangaben von Kapitalgesellschaften gem. § 14 UGB:
>>> FN166941b | Handelsgericht Wien | Firmensitz Wien
>>>
>>>
>>> ---------------------------------------------------------------------
>>> 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
> 
> ---------------------------------------------------------------------
> 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