java - 使用 JAXB 自定义对象/元素名称

标签 java jaxb resttemplate jaxb2 jackson2

我对 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/

相关文章:

java - 对 servlet 的 POST 请求返回 GET 方法的结果

JAVA为什么arrayCopy是系统调用?

java - Eclipse 如何查看 Java 文件而不是类文件

java - 如何使用 AsyncRestTemplate 同时调用多个电话?

java - RestTemplate 使用动态键映射 JSON 键值对对象

java - 如何检查是否存在多个约束违规?

java - 如何修复netbeans中的java语言级别错误

xml - jaxb 或 Coldfusion 的等价物

Hadoop 作业 : Error injecting constructor, JAXBException

java - JAXB - 来自 XmlAttribute 的标志 'required' 在原始类型上被忽略