【发布时间】:2010-12-25 07:12:19
【问题描述】:
我有一个现有的 XML 模式,其中包含我想使用 JAXB 映射到某种 Java Map 的类型。我的构建过程采用架构并创建 bean。我想通过将模式中的一个复杂类型映射到 java.util.Map 来自定义此过程。我在某处读到 JAXB“不能做接口”。我不确定这是否适用于这种情况,但如果是这样,我可以将它映射到 HashMap。此外,它不一定是映射到 Map 的 complexType,如果需要,它可以是一个元素。
我使用 .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 只是忽略它,还是它产生了错误的东西? -
使用上述 .xjb 方法,我在我的 jaxb 编译中收到以下错误:[jaxb] [ERROR] 编译器无法接受此 javaType 自定义。它附加到错误的位置,或与其他绑定不一致。