首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可以使用JAXB将模式映射到java.util.Map吗?

可以使用JAXB将模式映射到java.util.Map吗?
EN

Stack Overflow用户
提问于 2009-12-10 23:23:47
回答 2查看 16.5K关注 0票数 17

我有一个现有的XML模式,其中包含一个我想使用JAXB映射到某种Java map的类型。我的构建过程采用模式并创建bean。我想通过将我的模式中的一个complexTypes映射到一个java.util.Map来定制这个过程。我在某处读到过JAXB“不能做接口”。我不确定这是否适用于这种情况,但如果适用,我可以将其映射到HashMap。此外,它不一定是映射到映射的complexType,如果这是必需的,它可以是一个元素。

我使用一个.xjb文件控制我的JAXB生成,所以我正在寻找一些<jaxb:bindings>放入其中。我尝试了以下方法,但不起作用:

代码语言:javascript
复制
<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>

编辑:我已经添加了关于上面绑定的更多细节,我已经尝试过了。它在模式编译期间生成以下错误:

代码语言:javascript
复制
[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类型之间进行映射,所以不能使用这个。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-12 01:26:55

您的XJC文件使用的是“标准”javaType指令,我认为该指令仅限于将字符串值转换为具有代表性的java类型。因此,它只适用于转换简单的元素和属性内容。

XJC工具提供了javaType的增强版本,理论上它应该能够处理更复杂的结构。不幸的是,这还没有实现:

https://java.net/jira/browse/JAXB-209 (未解析)

例如,对于那些使用模型驱动的设计/实现的人来说,能够将模式类型映射到HashMap可能是一个可能的需求。AFAICS,这在今天是不可能的因此,必须手动编辑生成的代码。

看起来你不走运。

票数 10
EN

Stack Overflow用户

发布于 2009-12-11 05:04:23

您是否看过这里的示例(HashMap的自定义映射):http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html

恐怕需要创建自定义XmlAdapter。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1881712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档