私はいくつかのJavaクラスを生成しているxsdスキーマを持っています。生成には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 {
...
}
の name プロパティは@XmlRootElement
、生成されたクラスの名前と同じです。生成されるクラス名をCustomerReques
t にしたい。
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 は、外部バインディングを使用して正しい解決策を提案しました。さらに参考までに、インライン バインディングを使用するために変換されたソリューションで、自分の投稿を更新します。
<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>