5

私はいくつかの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、生成されたクラスの名前と同じです。生成されるクラス名をCustomerRequest にしたい。

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>
4

1 に答える 1

7

このバインディングを使用することをお勧めします

<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
于 2014-10-24T09:52:16.203 に答える