2009-12-02 45 views
1

在jax-ws Web服務中,我無法直接訪問JaxbContext對象。 JaxbContext使用類ObjectFactory。我試圖擴展它(如Jaxb Adding Behaviors)。我把生成的代碼在ObjectFactoryBase,然後加入在jax-ws Web服務中繼承ObjectFactory的問題

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

然而IllegalAnnotationsException發佈到WebLogic的時候來了,因爲它不能在ObjectFactoryBase查找某一@XmlElementDecl存在。當我將這個方法移動到@XmlElementDeclObjectFactory有效。

不幸的是,加入@XmlSeeAlso({ ObjectFactoryBase.class })

編輯:我現在發現,生成的ObjectFactory是,甚至沒有使用jaxws web服務的。所以上面的錯誤信息不再那麼相關。任何想法爲什麼它產生,但沒有使用?

任何想法?

回答

4

JAXB ObjectFactories是奇怪的野獸。你的問題是多方面的,所以我就用子彈回答列表:

  • JAXB1依賴的ObjectFactory創建綁定類的實例,但JAXB2一切都是POJO,而變成了ObjectFactory大多是不必要的。它仍然由XJC生成,部分原因是向後兼容。
  • ObjectFactory上的註釋很複雜且不明顯,但由於它是一個生成的類,通常這並不重要,而且大多數人不會看它。
  • ObjectFactory有時仍然有用,因爲它提供了需要使用JAXBElement包裝器的綁定類的工廠方法,使用提供的工廠方法比手工操作要容易得多。
  • JAXWS Web服務可能會選擇不使用ObjectFactory,因爲它不是嚴格意義上的必需。但是,JAXBContext可能仍會加載並解析它,具體取決於上下文是如何初始化的。
  • 我從來沒有嘗試過自己創建一個ObjectFactory;如果模型是XJC生成的,那麼生成的ObjectFactory通常就足夠了,如果你有一個手寫的JAXB模型,那麼ObjectFactory通常是完全不需要的。
+0

很好的答案,謝謝。順便說一下,您是否可能將新的(?)@UsesJAXBContext註釋與jaxws @WebService一起看?它看起來很有前途,它可以完全控制,也可能在ObjectFactory上。 – Gerard 2009-12-07 12:42:04

+0

我不明白你在做什麼,因爲我還在學習'jax-ws',我只是困惑'ObjectFactory'類在哪裏?什麼罐子包含它?謝謝。 – 2013-03-14 13:09:56