我有一個現有的XML模式,其中包含我想使用JAXB映射到某種Java Map的類型。我的構建過程需要模式並創建bean。我想通過將我的模式中的其中一個complexType映射到java.util.Map來自定義此過程。我讀過JAXB「不能做接口」的地方。我不確定在這種情況下是否適用,但如果是這樣的話,我會很好地將它映射到HashMap。此外,它不一定是映射到Map的complexType,如果這是必需的,它可能是一個元素。是否可以使用JAXB從模式映射到java.util.Map?
我使用.xjb文件控制我的JAXB代,所以我正在尋找一些<jaxb:bindings>
放在那裏。我試過以下,但它不工作:
<jaxb:bindings schemaLocation="myschema.xsd" node="/xs:schema">
<jaxb:globalBindings>
<jaxb:serializable uid="1"/>
</jaxb:globalBindings>
<jaxb:schemaBindings>
<jaxb:package name="com.myschema.client.types"/>
</jaxb:schemaBindings>
<jaxb:bindings node="//xs:complexType[@name='MapType']">
<jaxb:javaType name="java.util.HashMap"
parseMethod="com.myschema.common.MapConverter.parseObjectToMap"
printMethod="com.myschema.common.MapConverter.printMapToObject" />
</jaxb:bindings>
</jaxb:bindings>
編輯:我已經添加上述結合,我已經嘗試更多的細節。它架構在編譯生成以下錯誤:
[jaxb] [ERROR] compiler was unable to honor this javaType customization. It is attached to a wrong place, or its inconsistent with other bindings.
<jaxb:javaType>
不會工作,因爲它只能用於mapping between XML Schema primitives and Java types。由於我想在複雜類型和Java類型之間進行映射,所以我不能使用它。
你的'.xjb'方法是正確的,應該可以工作。 XJC是否忽略了它,還是它產生了錯誤的東西? – skaffman 2009-12-11 08:46:10
使用上面的.xjb方法,我在我的jaxb編譯中得到以下錯誤: [jaxb] [錯誤]編譯器無法兌現此javaType自定義。它附屬於錯誤的地方,或與其他綁定不一致。 – Zach 2009-12-11 13:44:58