You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by "KARR, DAVID (ATTSI)" <dk...@att.com> on 2011/03/15 16:23:03 UTC

Marshalling from @XmlJavaTypeAdapter for Map type emits redundant or duplicated namespaces

I'm using CXF with classes defined with JAXB annotations.

All of my JAXB-annotated classes are in a single package, along with a
package-info.java file.

In general, the XML and schema rendered from these annotations is fine.
However, I've been struggling with two Map attributes.  As JAXB can't
render Maps on its own, I'm using @XmlJavaTypeAdapter to map my HashMap
type to an adapter.

My first attempt at getting the schema excerpt for the Map that I wanted
didn't work, for unexplained reasons (JAXB fails deep within with a
NPE), but I was able to find a more conventional structure which works
well enough.  I discussed this problem on a different thread.

Now I'm trying to do a little cleanup.  Currently, the Map is rendering
like this:

		<entries>
		  <entry>
		    <key
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">g</key>
		    <value
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">h</value>
		  </entry>
		  <entry>
		    <key
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">e</key>
		    <value
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">f</value>
		  </entry>
		</entries>

It puts those namespaces on every key and value it renders.  No other
elements besides the root element have namespace definitions.  I'd
prefer to have those namespace definitions appear on the root element.
I've already tried defining these namespaces in @XmlNs annotations
inside the @XmlSchema annotation in the package-info.java file, but that
doesn't fix this.

Re: Marshalling from @XmlJavaTypeAdapter for Map type emits redundant or duplicated namespaces

Posted by Daniel Kulp <dk...@apache.org>.
Due to CXF-3401, it's not easy/straight forward to get the namespaces defined 
upper level.   That will be fixed in 2.3.4/2.4.

That said, I don't know why it's even outputting them.   All the HashMap 
adapter things I've written don't end up with that.    Can you send along a 
sample that does that?

For example, the java-first-jaxws sample we have has a HashMap thing and it 
doesn't generate the xsi:type things and such.  

Dan



On Tuesday 15 March 2011 11:23:03 AM KARR, DAVID (ATTSI) wrote:
> I'm using CXF with classes defined with JAXB annotations.
> 
> All of my JAXB-annotated classes are in a single package, along with a
> package-info.java file.
> 
> In general, the XML and schema rendered from these annotations is fine.
> However, I've been struggling with two Map attributes.  As JAXB can't
> render Maps on its own, I'm using @XmlJavaTypeAdapter to map my HashMap
> type to an adapter.
> 
> My first attempt at getting the schema excerpt for the Map that I wanted
> didn't work, for unexplained reasons (JAXB fails deep within with a
> NPE), but I was able to find a more conventional structure which works
> well enough.  I discussed this problem on a different thread.
> 
> Now I'm trying to do a little cleanup.  Currently, the Map is rendering
> like this:
> 
> 		<entries>
> 		  <entry>
> 		    <key
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">g</key>
> 		    <value
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> xsi:type="xs:string">h</value>
> 		  </entry>
> 		  <entry>
> 		    <key
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">e</key>
> 		    <value
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> xsi:type="xs:string">f</value>
> 		  </entry>
> 		</entries>
> 
> It puts those namespaces on every key and value it renders.  No other
> elements besides the root element have namespace definitions.  I'd
> prefer to have those namespace definitions appear on the root element.
> I've already tried defining these namespaces in @XmlNs annotations
> inside the @XmlSchema annotation in the package-info.java file, but that
> doesn't fix this.

-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com