I updated JSONProvider to avoid auto-allocating prefixes on the output, given that the namespace map is optional now, so it's better to let JAXB choose the default prefixes. This can be customized as usual using the namespace map, and now, using the XmlNs package annotations

thanks, Sergey
On 12/06/12 17:24, Sergey Beryozkin wrote:
Hi David
On 11/06/12 17:42, KARR, DAVID wrote:
-----Original Message-----
From: Sergey Beryozkin [mailto:[email protected]]
Sent: Monday, June 11, 2012 5:29 AM
To: [email protected]
Cc: KARR, DAVID
Subject: Re: How to configure namespace prefixes in Jettison

Hi David
On 07/06/12 18:56, KARR, DAVID wrote:
I've seen various FAQs and examples about configuring the namespace
prefixes used in Jettison output. What I've tried hasn't made any
difference.

I have a "package-info.java" that looks like this:
--------------
@XmlSchema(namespace =
"http://www.example.com/schema/app/SomeThing/v1.0";,
elementFormDefault = XmlNsForm.QUALIFIED,
xmlns = { @XmlNs(prefix = "os", namespaceURI =
"http://www.example.com/schema/app/SomeThing/v1.0";),
@XmlNs(prefix = "xs", namespaceURI =
"http://www.w3.org/2001/XMLSchema";),
@XmlNs(prefix = "xsi", namespaceURI =
"http://www.w3.org/2001/XMLSchema-instance";)})
// Use either FIELD or PUBLIC_MEMBER. If you change it, you have to
move the annotations.
@XmlAccessorType(XmlAccessType.FIELD)
package com.example.app.domain;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
--------------

When I make the call, however, my output uses a "ns1" namespace
prefix (instead of the "os" that I was trying to set it to). Am I
missing an association with the package?

I wonder if this blog can explain why the above declarations are
ignored ?
http://hwellmann.blogspot.ie/2011/03/jaxb-marshalling-with-custom-
namespace.html

I tried implementing the alleged fix using solution 2, but it had no
effect. I verified that the 2.2.2 implementation was put into the jar.

I could spend some time tracing through some code in the debugger if I
had some clues about what to look for.

JSONProvider attempts to set up a namespace map internally and
unfortunately it overrides the package level information.
At this stage, given that you also need it working in a non-Spring case,
the workaround is to extend JSONProvider and in the custom provider
constructor call super.setNamespaceMap. I'll need to check a bit more
how easy it is to avoid auto-populating the namespace map.

Cheers, Sergey



--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to