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

