java - 是否可以使用 JAXB 从模式映射到 java.util.Map?

标签 java schema xsd jaxb

我有一个现有的 XML 模式,其中包含我想使用 JAXB 映射到某种 Java 映射的类型。我的构建过程采用模式并创建 bean。我想通过将模式中的一个复杂类型映射到 java.util.Map 来自定义此过程。我在某处读到 JAXB“不能做接口(interface)”。我不确定这是否适用于这种情况,但如果适用,我会很好地映射到 HashMap。此外,它不一定是映射到 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>

编辑:我已经在我已经尝试过的上述绑定(bind)中添加了更多细节。它在架构编译期间生成以下错误:

[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 类型之间进行映射,所以我不能使用它。

最佳答案

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

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

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

For instance, being able to map a schema type to a HashMap might be a likely requirement for those using model driven design/implementation. AFAICS, this is not possible today. Therefore, one must manually edit the generated code.

看来你运气不好。

关于java - 是否可以使用 JAXB 从模式映射到 java.util.Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1881712/

相关文章:

xml - XSD 架构目标命名空间

reference - Nest.js 中的 Mongoose 子文档

xml - 如何使属性在 xml 模式中唯一?

xml - 如何混合xsd :sequence with xsd:all

java - JPA CRUD 存储库查询

java - Gradle 构建忽略 Jetbrains 注释

json - Qt/C++/C 中对 json 模式有什么支持

c# - 是否可以将 schematron 架构编译成 Biztalk 程序集

java - 以下 Guava 开发新功能

java - 注解和处理器之间的匹配