我有一个 xsd 模式,我从中生成一些 java 类。我正在使用 jaxb 作为一代。
我希望能够生成一个带有 @XmlRootElement
注释的类,但我希望 @XmlRootElement 名称属性与生成的类的名称不同。
在我的 xsd 中,我定义了以下内容:
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
....
</xs:sequence>
</xs:complexType>
</xs:element>
这段代码生成以下 java 类:
@XmlRootElement(name = "customer")
public class Customer {
...
}
@XmlRootElement
的名称属性与生成的类的名称相同。我希望生成的类名是 CustomerReques
吨。我尝试使用
jaxb:class
定义来改变类名。事实上,这个选项改变了类名,但删除了 @XmlRootElement
注释,我需要它存在。以下xsd:
<xs:element name="customer">
<xs:complexType>
<xs:annotation>
<xs:appinfo>
<jaxb:class name="CustomerRequest"/>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
生成此类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "customer", propOrder = {
})
public class CustomerRequest {
}
如何使
@XmlRootElement
的属性名称注释与生成的类名不同而不会丢失注释?解决方案更新:
用户 Xstian 提出了使用外部绑定(bind)的正确解决方案。
仅供引用,我将使用转换为使用内联绑定(bind)的解决方案更新我自己的帖子:
<xs:element name="customer">
<xs:complexType>
<xs:annotation>
<xs:documentation>Request object for the operation that checks if a customer profile exists.</xs:documentation>
<xs:appinfo>
<annox:annotate>
<annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="customer"/>
</annox:annotate>
<jaxb:class name="CustomerRequest"/>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
</xs:sequece>
</xs:complexType>
</xs:element>
最佳答案
我建议你使用这个绑定(bind)
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:annox="http://annox.dev.java.net"
xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix">
<bindings schemaLocation="../your.xsd">
<bindings node="//xs:element[@name='customer']//xs:complexType">
<annox:annotate>
<annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement"
name="customer" namespace="yourNamespaceIfYouWant">
</annox:annotate>
</annox:annotate>
<class name="CustomerRequest"/>
</bindings>
</bindings>
</bindings>
类(class)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"header"
})
@XmlRootElement(name = "customer", namespace = "yourNamespaceIfYouWant")
public class CustomerRequest
关于JAXB 架构到 Java 不同的 XmlRootElement 名称和类名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26544633/