在jax-ws Web服务中子类化ObjectFactory的问题

时间:2009-12-02 12:40:43

标签: java jaxb

在jax-ws Web服务中,我无法直接访问JaxbContext对象。 JaxbContext使用ObjectFactory类。我尝试扩展它(比如Jaxb Adding Behaviors)。我将生成的代码放在ObjectFactoryBase中,然后添加

public class ObjectFactory extends ObjectFactoryBase {//.. overriden methods}

但是,在发布到weblogic时会出现IllegalAnnotationsException,因为它无法在@XmlElementDecl中找到某个ObjectFactoryBase。当我将此方法@XmlElementDecl移动到ObjectFactory时,它可以正常工作。

添加@XmlSeeAlso({ ObjectFactoryBase.class })也没有运气。

编辑:我现在发现jaxws Web服务生成的ObjectFactory 甚至没有使用。所以上面的错误信息不再那么相关了。知道它为什么生成但没用过吗?

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

JAXB ObjectFactories是奇怪的野兽。你的问题有很多方面,所以我只想回答一个子弹列表:

  • JAXB1依赖于ObjectFactory来创建绑定类的实例,但是使用JAXB2,一切都是POJO,而ObjectFactory几乎不需要。它仍由XJC生成,部分原因是为了向后兼容。
  • ObjectFactory上的注释是复杂且不明显的,但由于它是一个生成的类,这通常无关紧要,大多数人都不会看它。
  • ObjectFactory有时仍然有用,因为它为需要JAXBElement包装器的绑定类提供工厂方法,并且使用提供的工厂方法比手动执行此操作要容易得多。
  • JAXWS Web服务可能选择不使用ObjectFactory,因为严格来说并不是必需的。但是,JAXBContext仍然可以加载和解析它,具体取决于上下文的初始化方式。
  • 我自己从未尝试过创建过ObjectFactory;如果模型是XJC生成的,那么生成的ObjectFactory通常就足够了,如果你有一个手写的JAXB模型,那么ObjectFactory通常是完全不必要的。