我有一个现有的XML模式,其中包含一个我想使用JAXB映射到某种Java map的类型。我的构建过程采用模式并创建bean。我想通过将我的模式中的一个complexTypes映射到一个java.util.Map来定制这个过程。我在某处读到过JAXB“不能做接口”。我不确定这是否适用于这种情况,但如果适用,我可以将其映射到HashMap。此外,它不一定是映射到映射的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类型之间进行映射,所以不能使用这个。
发布于 2009-12-12 01:26:55
您的XJC文件使用的是“标准”javaType
指令,我认为该指令仅限于将字符串值转换为具有代表性的java类型。因此,它只适用于转换简单的元素和属性内容。
XJC工具提供了javaType
的增强版本,理论上它应该能够处理更复杂的结构。不幸的是,这还没有实现:
https://java.net/jira/browse/JAXB-209 (未解析)
例如,对于那些使用模型驱动的设计/实现的人来说,能够将模式类型映射到HashMap可能是一个可能的需求。AFAICS,这在今天是不可能的因此,必须手动编辑生成的代码。
看起来你不走运。
发布于 2009-12-11 05:04:23
您是否看过这里的示例(HashMap的自定义映射):http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html
恐怕需要创建自定义XmlAdapter。
https://stackoverflow.com/questions/1881712
复制相似问题