【问题标题】:JAXB @XmlSeeAlso causing tight coupling to domain objectsJAXB @XmlSeeAlso 导致与域对象的紧密耦合
【发布时间】:2012-05-14 13:12:01
【问题描述】:

我使用 JAXB 绑定直接解组到我的域层对象,这些对象是生成的 Web 服务类型的子类。这是一个很好的解决方案,因为我可以重写方法并提供编写自定义逻辑等。但是,XJC 编译器坚持将 @XmlSeeAlso({MySubclass.class}) 注释放在所有生成的类上,这导致它们成为与我的域对象紧密耦合。这显然是不可取的,并且会导致我的项目之间出现各种参考问题,我不会在这里讨论。

是否可以生成没有@XmlSeeAlso 注释的类?解组到子类的实际工作似乎发生在 ObjectFactory 类中。是否可以省略 jaxb 绑定,并为每个应用程序替换自定义 ObjectFactory?这将允许我在共享 util 中自动生成 Web 服务类型,而每个 Web 项目都可以解组为这些类型的不同子类。

<jaxb:bindings node="//xs:complexType[@name='AutogeneratedWebserviceType']">
  <jaxb:class implClass="my.project.CustomSubclass" />
</jaxb:bindings>

此绑定将在 ObjectFactory 中创建一个方法,该方法似乎完成了对我的子类进行解组的实际工作:

public AutogeneratedWebserviceType createAutogeneratedWebserviceType() {
  return new CustomSubclass();
}

如果可能,我希望通过提供客户 ObjectFactory 来实现不带 @XmlSeeAlso 注释的这种行为。

【问题讨论】:

    标签: java web-services jaxb jax-ws cxf


    【解决方案1】:

    您是否尝试使用参数 -target 2.0 运行 XJC?我相信这将禁用 @XmlSeeAlso 注释的生成。

    【讨论】:

    • 对于 ant 使用类似这样的东西:
    • 非常感谢,“-target 2.0”解决了我的问题。我在 OSGi 环境中使用 Web 服务,这个愚蠢的运行时注释 XmlSeeAlso 导致与其他模块的紧密连接,这是完全没有必要的
    猜你喜欢
    • 2011-05-24
    • 2018-11-19
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    相关资源
    最近更新 更多