2017-10-09 177 views
0

我有一个遗留系统,我们发送的数据是硬编码的,以要求使用特定的XML名称空间。他们已经发布了XSD,并且从中生成了JAXB类。但是,当我运行的代码,我的XML出来是这样的:更改JAXB名称空间

<ns3:field1>data</ns3:field1> 

但遗留系统要求:

<custom:field1>data</custom:field1> 

JAXB时产生100%合法的XML,但传统系统无法处理命名空间不同。

我无法更改旧版系统或XSD。

有没有什么更好的方法来使得生成的XML以我需要的方式出现,除了做String.replace(“ns3:”,“custom:”)?我使用Java 8

+0

是的。您可以使用'XmlFilterImpl'今天只有我用来忽略命名空间的答案https://stackoverflow.com/questions/46637547/how-do-i-parse-xml-content-that-may-or-may-not-have -a-namespace/46639524#46639524您可以根据您的要求修改命名空间。获取更多细节。 – Optional

+1

似乎问题不是关于命名空间,而是关于它的前缀。如果是这样,我想链接http://blog.bdoughan.com/2011/11/jaxb-and-namespace-prefixes.html可能会帮助你 – Vadim

回答

0

写package-info.java -

@XmlSchema(
    namespace = "http://your-namespace-url", 
    elementFormDefault = XmlNsForm.QUALIFIED, 
    xmlns = { 
      @XmlNs(prefix = "", namespaceURI = "http://your-namespace-url"), 
      @XmlNs(prefix = "custom", namespaceURI = "http://your-namespace-url/other") 
    }) 

当你没有定义包的信息,这就是为什么它把该命名空间前缀。