[英]JAXB schema to Java Different XmlRootElement name and Class name
我有一個xsd架構,我正在從中生成一些java類。 我正在使用jaxb代代相傳。
我希望能夠生成一個使用@XmlRootElement
注釋的類,但我希望@XmlRootElement name屬性與生成的類的名稱不同。
在我的xsd中,我定義了以下內容:
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
....
</xs:sequence>
</xs:complexType>
</xs:element>
這段代碼生成以下java類:
@XmlRootElement(name = "customer")
public class Customer {
...
}
@XmlRootElement
的name屬性與生成的Class的名稱相同。 我希望生成的類名是CustomerReques
t。
我已經嘗試使用jaxb:class
定義來更改classe名稱。 實際上,此選項會更改類名,但會刪除@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使用外部綁定提出了正確的解決方案。 僅供進一步參考,我將使用內聯綁定轉換的解決方案更新我自己的帖子:
<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>
我建議你使用這個綁定
<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>
類
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"header"
})
@XmlRootElement(name = "customer", namespace = "yourNamespaceIfYouWant")
public class CustomerRequest
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.