1

我正在使用 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 的正确行为),但我想避免这种情况。

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

4

1 回答 1

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>
于 2013-09-20T11:02:15.740 回答