2015-09-14 110 views
0

我們的服務使用大一個尺寸適合所有複雜的嵌套結構模式,IDREF的,模式導入等的WSDL的元素告訴JAXB綁定編譯器包括

因此沒有服務將永遠使用中所描述的所有元素模式。實際服務僅使用模式的相對較小的子集。 從模式中生成JAXB bean會產生許多不易使用的對象,這些對象具有許多未使用的屬性。

我知道我可以編寫自己的JAXB bean,只包含有趣的屬性。 JAXB將在編組期間忽略其餘部分。

但是,schema和xml響應的結構足夠複雜,使我希望能夠生成JAXB bean,並以某種方式告訴xjc它應包含哪些元素。

這可能嗎?有沒有這樣做的xjc插件?或者,除了RI以外,還有JAXB實現可以實現嗎?

我知道還有其他技術,例如基於xpath的寬容閱讀器。但是我想知道JAXB是否可以在這裏使用。

回答

0

我發現一個sample XJC plugin它做了一些非常相似的事情,它允許壓縮包級別上的類型並操作類和屬性,如下所示。

<jxb:bindings schemaLocation="Person.xsd"> 
    <tpi:package removeClass="com.captech.person.Extra"/> 
    <jxb:bindings node="//xs:complexType[@name='Name']"> 
     <tpi:class getLastName="public synchronized" 
        setFirstName="public synchronized"/> 
     <tpi:class setLastName="public synchronized"/> 
     <jxb:bindings node=".//xs:element[@name='FirstName']"> 
      <tpi:property modifiers="private"/> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

的博客文章也非常有用,因爲它顯示瞭如何調試自定義插件XJC - 這些信息是Nabble前身但JAXB2頁面上的鏈接現在被打破。

+0

FWIW,這裏是xjc插件項目:https://github.com/dschulten/jaxb2-tolerant-reader-plugin – dschulten

1

據我所知,在XJC中沒有內置機制來包含/排除元素。有一些技巧可以使用:

  • 創建一個額外的模式,它導入您的模式並定義一些只引用您需要的元素/類型的元素。然後編譯你的模式。 XJC將(可能)只編譯所需的東西。但我不確定。
  • 嘗試jaxb:class/@ref綁定來抑制不必要的類的生成。
  • (Hardcore等級)XJC插件可能會操縱模型並從中刪除類別信息或屬性信息。

據我所知,沒有其他架構編譯器爲JAXB而不是XJC。

+0

謝謝,我會嘗試你的建議。看起來至少有Moxy,但它似乎沒有做我想要的:http://www.eclipse.org/eclipselink/documentation/2.4/moxy/toc.htm – dschulten

+0

調查Moxy,他們有基於xpath的bean映射,這對於基於xpath的容錯閱讀器可能證明是有用的。然而,這不是我在ATM之後。 http://www.eclipse.org/eclipselink/documentation/2.6/moxy/advanced_concepts005.htm#CHDBFCAA – dschulten

+0

第一個建議不起作用 - 所有導入都由xjc解析和編譯。 – dschulten