【问题标题】:JAXB binding to override or remove XMLSchemaType xs:token用于覆盖或删除 XMLSchemaType xs:token 的 JAXB 绑定
【发布时间】:2013-09-19 12:25:08
【问题描述】:

我正在使用 maven jaxb2 插件从 xsd 生成模型类。 xsd 使用 type=xs:token 指定某些元素,如下所示:

<xs:element name="medium_text" type="xs:token"/>

这会导致将以下注释添加到生成模型的字段中:

@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlSchemaType(name="token")
protected String medium_text;

问题是 CollapsedStringAdapter 删除了新行等(这是 xs:token 的正确行为),但我想避免这种情况。

如何使用 JAXB 绑定从元素中删除 xs:token 类型或将其更改为 xs:string?简单的解决方案是从 xsd 中删除类型,但是否可以在不修改 xsd 的情况下使用绑定?

【问题讨论】:

    标签: java jaxb xsd xjc maven-jaxb2-plugin


    【解决方案1】:

    您可以在绑定文件中使用以下内容。

    <jxb:bindings schemaLocation = "schema.xsd">
       <jxb:bindings node = "//xs:element[@name='medium_text']">
                 <jxb:javaType name="java.lang.String"/> 
       </jxb:bindings>
    </jxb:bindings>
    

    这会导致以下结果:

    @XmlElement(name = "mid_text", required = true)
    @XmlJavaTypeAdapter(Adapter1 .class)
    @XmlSchemaType(name = "token")
    protected String midText;
    

    但是,Adapter1 是无害的,不会更改字符串值。

    此外,如果您想对所有 tokens 执行此操作,您可以添加 globalBinding

      <jxb:globalBindings>
                <jxb:javaType name="java.lang.String"
                    xmlType="xs:token" />
      </jxb:globalBindings>
    

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2018-09-07
      • 2019-10-16
      • 1970-01-01
      相关资源
      最近更新 更多