【问题标题】:How to add XmlAdapter class via XSD file如何通过 XSD 文件添加 XmlAdapter 类
【发布时间】:2017-02-09 06:55:19
【问题描述】:

我是 XSD 和 JAXB 的新手。 我有一个 XSD 架构文件,比如 logic.xsd,它会生成一个完整的包,比如“com.ilume”,其中包含一些类 (Employee.java) 和 package-info.java 文件。

现在我想在同一个包中添加一个自定义适配器类(适配器类如How to configure JAXB so it trims whitespaces when unmarshalling tag value? 中显示的StringTrimAdapter 类)。 这个适配器类应该从我的 logic.xsd 生成(我应该在 logic.xml 文件中添加什么以便它可以生成 StringTrimAdapter?)

我想在 package-info.java 中添加 @XmlJavaTypeAdapter(MyNormalizedStringAdapter.class)。我应该在哪里写什么样的绑定?

【问题讨论】:

    标签: java xml web-services xsd jaxb


    【解决方案1】:

    我昨天也遇到了同样的问题。

    最好的解决办法是使用

    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)

    。 它是一个现有的内置类型适配器,可以帮助您修剪 CDATA 内容

    例如,让我们来看看这个 XML

    <books>
       <book>
          <name><![CDATA[ <br> Harry Potter </br>
            ]]></name>
    
       </book>
    </books>
    

    为此,您将拥有一个 Java 类。

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "books")
    public class Books {
    
        @XmlValue
        protected String name;
        ......
    }
    

    您必须在包含 CDATA 部分的变量名称上方添加该适配器

    @XmlValue
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    protected String name;
    

    然后IDE会要求你导入需要的库文件

    import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
    

    就是这样。希望对你有帮助:)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2021-05-09
      • 2019-12-05
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2017-11-28
      相关资源
      最近更新 更多