【问题标题】:JAXB write namespaces to one class from other classesJAXB 将命名空间从其他类写入一个类
【发布时间】:2012-02-24 06:38:28
【问题描述】:

当我使用我的所有类创建 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 把它放到这个类中?

【问题讨论】:

    标签: java namespaces jaxb jaxb2


    【解决方案1】:

    为什么 jaxb 把它放到这个类中?

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多