代码之家  ›  专栏  ›  技术社区  ›  Zach

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

  •  17
  • Zach  · 技术社区  · 15 年前

    我有一个现有的XML模式,其中包含一个我希望使用JAXB映射到某种Java映射的类型。我的构建过程采用模式并创建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类型之间映射,所以我不能使用它。

    2 回复  |  直到 13 年前
        1
  •  10
  •   ngreen    11 年前

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

    XJC工具提供了 ,理论上应该能够处理更复杂的结构。不幸的是,这一点尚未得到实施:

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

    例如,能够映射 哈希映射的架构类型可能是 模型驱动的设计/实现。 AFAICS,这在今天是不可能的。 生成的代码。

        2
  •  6
  •   maximdim    15 年前