JAXB将命名空间写入其他类的一个类

时间:2012-02-01 15:13:26

标签: java namespaces jaxb jaxb2

当我用我的所有类创建一个jaxbcontext时,jaxb为一个具有来自其他类的命名空间的类构建xml。 如果我传递给jaxbcontext只有一个类,它工作正常。 我的类是由xjc生成的。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {

 })
@XmlRootElement(name = "eReq")
public class EReq {
...

当我只将此类传递给jaxbcontext时,输出正在跟随。

<eReq><status>UNBLOCKED</status></eReq>

但我把我所有的类放到jaxb上下文输出中都是这样的:

<eReq xmlns:ns2="myns1" xmlns:ns3="myns2" xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/"><status>UNBLOCKED</status></eReq>

这是我其他类的命名空间。为什么jaxb会把它放到这个班级?

1 个答案:

答案 0 :(得分:2)

  

为什么jaxb会把它放到这个班级?

因为JAXB上下文包含它所创建的所有命名空间的超集,所以它只是将它们全部放在它生成的每个文档中。

这样做是因为需要将名称空间添加到根元素(以避免在每个子元素上极大地浪费重命名名称空间),并且事先并不知道任何给定集合需要哪些名称空间。绑定对象(JAXB支持增量序列化)。

因此JAXB运行时可能可以避免这样做;但事实并非如此。

如果您不喜欢它,那么您需要构建多个上下文。