JAXB adding namespace to parent but not to the child elements contained
Posted
by
Nishant
on Stack Overflow
See other posts from Stack Overflow
or by Nishant
Published on 2010-05-31T12:54:16Z
Indexed on
2012/09/16
21:38 UTC
Read the original article
Hit count: 236
I put together an XSD and used JAXB to generate classes out of it.
Here are my XSDs-
myDoc.xsd :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.mydoc.org"
targetNamespace="http://www.mydoc.org"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:mtp="http://www.mytypes.com" elementFormDefault="qualified">
<xs:import namespace="http://www.mytypes.com" schemaLocation="mytypes.xsd" />
<xs:element name="myDoc">
<xs:complexType>
<xs:sequence>
<xs:element name="crap" type="xs:string"/>
<xs:element ref="mtp:foo"/>
<xs:element ref="mtp:bar"/>
</xs:sequence>
</xs:complexType>
</xs:element>
mytypes.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.mytypes.com"
xmlns="http://www.mytypes.com"
xmlns:tns="http://www.mytypes.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="foo" type="tns:Foo"/>
<xs:element name="bar" type="tns:Bar"/>
<xs:element name="spam" type="tns:Spam"/>
<xs:simpleType name="Foo">
<xs:restriction base="xs:string"></xs:restriction>
</xs:simpleType>
<xs:complexType name="Bar">
<xs:sequence>
<xs:element ref="spam"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Spam">
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:schema>
The document marshalled is-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myDoc xmlns:ns2="http://www.mytypes.com">
<crap>real crap</crap>
<ns2:foo>bleh</ns2:foo>
<ns2:bar>
<spam>blah</spam>
</ns2:bar>
</myDoc>
Note that the <spam>
element uses the default namespace. I would like it to use the ns2
namespace. The schema (mytypes.xsd) expresses the fact that <spam>
is contained within <bar>
which in the XML instance is bound to the ns2
namespace.
I've broken my head over this for over a week and I would like ns2
prefix to appear in <spam>
. What should I do?
Required :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myDoc xmlns:ns2="http://www.mytypes.com">
<crap>real crap</crap>
<ns2:foo>bleh</ns2:foo>
<ns2:bar>
<ns2:spam>blah</ns2:spam><!--NS NS NS-->
</ns2:bar>
</myDoc>
© Stack Overflow or respective owner