当我用我的所有类创建一个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会把它放到这个班级?
答案 0 :(得分:2)
为什么jaxb会把它放到这个班级?
因为JAXB上下文包含它所创建的所有命名空间的超集,所以它只是将它们全部放在它生成的每个文档中。
这样做是因为需要将名称空间添加到根元素(以避免在每个子元素上极大地浪费重命名名称空间),并且事先并不知道任何给定集合需要哪些名称空间。绑定对象(JAXB支持增量序列化)。
因此JAXB运行时可能可以避免这样做;但事实并非如此。
如果您不喜欢它,那么您需要构建多个上下文。