Hello list,
I want to marshal a class (resp. two classes, one containing the other)
using two different namespaces as in the following example:
package ns1;
public class Inner {
protected String foo;
protected String bar;
protected String baz;
public String getBar() { return bar; }
public void setBar(String bar) { this.bar = bar; }
public String getBaz() { return baz; }
public void setBaz(String baz) { this.baz = baz; }
public String getFoo() { return foo; }
public void setFoo(String foo) { this.foo = foo; }
}
package ns;
import ns1.Inner;
public class Outer {
protected String zup;
protected Inner inner;
public Inner getInner() { return inner; }
public void setInner(Inner inner) { this.inner = inner; }
public String getZup() { return zup; }
public void setZup(String zup) { this.zup = zup; }
}
At runtime, I have objects like this
Inner inner = new Inner();
inner.setFoo("joe");
inner.setBar("jim");
inner.setBaz("bob");
Outer outer = new Outer();
outer.setInner(inner);
outer.setZup("ray");
Now I want to marshal the object with Inner having a
different namespace than Outer. I use the following
mapping file:
<?xml version="1.0"?>
<mapping>
<description>Description of the mapping</description>
<!-- mapping for class Outer -->
<class name="ns.Outer">
<map-to xml="Outer"
ns-uri="http://www.abc.com/outer"
ns-prefix="ns"/>
<field name="zup">
<bind-xml name="zup" node="element"/>
</field>
<field name="inner" type="ns1.Inner">
<bind-xml name="Inner" node="element"/>
</field>
</class>
<!-- mapping for class Inner -->
<class name="ns1.Inner">
<map-to xml="Outer"
ns-uri="http://www.xyz.com/inner"
ns-prefix="ns1"/>
<field name="foo">
<bind-xml name="foo" node="element"/>
</field>
<field name="bar">
<bind-xml name="bar" node="element"/>
</field>
<field name="baz">
<bind-xml name="baz" node="element"/>
</field>
</class>
</mapping>
When marshalling as so:
Mapping m = new Mapping();
m.loadMapping("map.xml");
XMLContext context = new XMLContext();
context.addMapping(m);
Marshaller ms = context.createMarshaller();
StringWriter sw = new StringWriter();
ms.setWriter(sw);
ms.marshal(outer);
String xml = sw.toString();
I get the totally unexpected result:
<ns:Outer xmlns:ns="http://www.abc.com/outer">
<ns:zup>ray</ns:zup>
<ns1:Inner xmlns:ns1="http://www.abc.com/outer">
<ns1:foo xmlns:ns1="http://www.xyz.com/inner">joe</ns1:foo>
<ns2:bar xmlns:ns2="http://www.xyz.com/inner">jim</ns2:bar>
<ns3:baz xmlns:ns3="http://www.xyz.com/inner">bob</ns3:baz>
</ns1:Inner>
</ns:Outer>
As you can see: Inner has the namespace of it's parent and the
children of inner have the Inner-namespace all with a new prefix.
What's going on here? This result is totally bogus.
What I want to have is the following:
<ns:Outer xmlns:ns="http://www.abc.com/outer">
<ns:zup>ray</ns:zup>
<ns1:Inner xmlns:ns1="http://www.xyz.com/outer">
<ns1:foo>joe</ns1:foo>
<ns1:bar>jim</ns1:bar>
<ns1:baz>bob</ns1:baz>
</ns1:Inner>
</ns:Outer>
Any help here?
Greetings
--Stefan
--
Be Yourself @ mail.com!
Choose From 200+ Email Addresses
Get a Free Account at www.mail.com