我有一个现有的XML模式,其中包含一个类型,我想使用JAXB将其映射到某种Java Map。我的构建过程获取模式并创建bean。我想通过使模式中的一个complexType映射到java.util.Map来自定义此过程。我曾经在某个地方读到过JAXB“无法执行接口”的说法。我不确定是否适用于这种情况,但如果是,我可以将其映射到HashMap中。此外,它不一定必须是映射到Map的complexType,如果需要,它可以是元素。
我使用.xjb文件控制我的JAXB生成,因此我正在寻找一些放在其中。我尝试了以下内容,但它不起作用:
我使用.xjb文件控制我的JAXB生成,因此我正在寻找一些放在其中。我尝试了以下内容,但它不起作用:
<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>
无法使用,因为它只能用于在XML Schema原语和Java类型之间进行映射。由于我想要在复杂类型和Java类型之间进行映射,所以我不能使用它。
.xjb
方法是正确的,应该可以工作。XJC 是忽略它还是生成了错误的东西? - skaffman[jaxb] [ERROR] 编译器无法遵守此 javaType 定制。它连接到了错误的位置,或与其他绑定不一致。
- Zach