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

