我对 JAXB 很陌生,所以我在破解这个(我认为)非常简单的用例时遇到了困难。
我有一组模式。我无法控制这些,我无法改变它们。在这些模式中,我有诸如
之类的声明<xs:complexType name="CustomerType">
...
我尝试从这些生成类。所以这样的声明就变成了
@XmlType(name = "CustomerType", propOrder = {
"field1",
"field2"
})
public class CustomerType {
...
然后我需要使用此类通过 RestTemplate 创建 XML 消息。问题是,XML 消息中的对象不应该是“CustomerType”,而应该只是“Customer”。就像我说的,我无法编辑模式。我也无法直接编辑生成的源。我需要某种外部定制来告诉源生成过程或编码过程如何转换对象的名称。任何建议将不胜感激。
最佳答案
您可以使用绑定(bind)来自定义类或属性名称。通常,您将拥有一个类似于 bindings.xjb
的文件,如下所示:
<jaxb:bindings version="1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
<jaxb:bindings node="xsd:customType[@name='CustomerType']">
<jaxb:class name="Customer"/>
</jaxb:bindings>
<jaxb:bindings node="xsd:customType[@name='CustomerType']//xsd:element[@name='field1']">
<jaxb:property name="f1"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
您可以使用绑定(bind)自定义很多内容(请参阅 this ),但肯定不是所有内容。
关于java - 使用 JAXB 自定义对象/元素名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49914429/