JAXB使用多命名空间解组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAXB使用多命名空间解组相关的知识,希望对你有一定的参考价值。

我有第三部分的xml。

<cts:element-value-query weight="0">
   <cts:element xmlns:_1="entitlement:AAA">_1:Entitlement</cts:element>
   <cts:text xml:lang="en">TEST</cts:text>
</cts:element-value-query>

要么 :

<cts:element-value-query weight="0">
   <cts:element xmlns:_1="entitlement:BBB">_1:Entitlement</cts:element>
   <cts:text xml:lang="en">CASE</cts:text>
</cts:element-value-query>

我想将xml解组为Java bean:

@XmlRootElement(name = "element-value-query", namespace= "http://marklogic.com/cts")
@XmlAccessorType(XmlAccessType.FIELD)
public class Query4ElementValue {

@XmlElement(name= "element", namespace="entitlement:AAA")
private String element;

private String text;
}

我可以得到正确的文本值,但对于element,始终为null。

[element=null, text=TEST]

那我该怎么办?

答案

这个:

<cts:element xmlns:_1="entitlement:AAA">_1:Entitlement</cts:element>

element命名空间中名为cts的元素。

你的映射:

@XmlElement(name= "element", namespace="entitlement:AAA")
private String element;

期望名称为element的元素在URI中使用URI entitlement:AAA。这可能不是您提供的cts命名空间。

如果你有兴趣让_1:Entitlement_1绑定到entitlement:AAAentitlement:BBB,请将元素的类型更改为QName

以上是关于JAXB使用多命名空间解组的主要内容,如果未能解决你的问题,请参考以下文章

如果命名空间声明在 SOAP 信封上,如何使用 JAXB 解组 SOAP 响应?

JAXB:如何在解组 XML 文档期间忽略命名空间?

Jaxb:在同一个包中解组具有多个命名空间的 xml

JAXB:如何在没有命名空间的情况下解组 XML

如何调试 JAXB 解组?

JAXB使用XMLReader解组时的未读属性