java - 用于覆盖或删除 XMLSchemaType xs :token 的 JAXB 绑定(bind)

标签 java jaxb xsd xjc maven-jaxb2-plugin

我正在使用 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 绑定(bind)从元素中删除 xs:token 类型或将其更改为 xs:string?简单的解决方案是从 xsd 中删除类型,但是是否可以在不修改 xsd 的情况下使用绑定(bind)?

最佳答案

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

<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 是无害的,并且不会更改字符串值。

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

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

关于java - 用于覆盖或删除 XMLSchemaType xs :token 的 JAXB 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18894572/

相关文章:

c# - 验证 C# Web 服务作为参数接收的 Delphi 中的 XML 模式

java - 根据 XSD 验证多个 XML 文件的最佳方法是什么?

Xml 架构扩展顺序

java - 检索传递给 JVM 的主类/jar 文件名

java - 二维表和 NullPointerException

xml - 让 JAXB 运行得更快

java - JAXB/Jersey - Feed 不显示我的嵌套列表 - 知道吗?

java - 使用 next() 时扫描仪中出现 NoSuchElementException

java - Spring 3.2 + Jersey 。上下文初始化失败。适用于 Spring 3.1

JAXB:限定属性禁用默认命名空间 xmlns =""?