【问题标题】: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;
就是这样。希望对你有帮助:)。