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

问题描述:

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

@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把它放到这个班上?

为什么JAXB把它放到这个类?

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

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

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

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