0

CXF を使用して Web サービスを公開しています。@XmlID および @XmlIDREF JAXB アノテーションを使用して、マーシャリング/アンマーシャリング中にオブジェクト グラフの参照整合性を維持しています。

WSDL には、これを表す xs:id および xs:idref 属性を持つ要素が正しく含まれています。

サーバー側では、すべてがうまく機能します。@XmlIDREF で注釈が付けられた型のインスタンスは、@XmlID 注釈で注釈が付けられたものと同じインスタンス (== の場合) です。

ただし、WSDLToJava でクライアントを生成すると、参照 (@XmlIDREF で注釈が付けられたもの) は java.lang.Object 型になります。

参照の型が java.lang.String (参照される型の ID と一致するため) または参照される型自体と同じになるように、JAXB バインディングをカスタマイズする方法はありますか?

4

3 に答える 3

1

インライン JAXB バインディングを使用して、使用するタイプを示します。その後、JAXB 生成コードは正しい型になります。

<complexType name="Column">
    <sequence>
        <element name="name" type="string" maxOccurs="1" minOccurs="1"></element>
        <element name="referencedColumn" type="IDREF" maxOccurs="1" minOccurs="0">
            <annotation>
                <appinfo>
                    <jaxb:property>
                        <jaxb:baseType name="Column"/>
                    </jaxb:property>
                </appinfo>
            </annotation> 
        </element>
    </sequence>
    <attribute name="id" type="ID" use="required"></attribute>
</complexType>

jaxbまた、要素で名前空間と JAXB バージョンを宣言する必要があることに注意してくださいschema

<schema targetNamespace="http://example.com/schema" 
    elementFormDefault="qualified" 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    jaxb:version="1.0">
于 2010-04-09T12:45:35.873 に答える
0

OK、これはうまくいきません。スキーマでは参照の型を指定できず、異なる複合型を指す IDREF が存在する可能性があるため、JAXB が IDREF の正しい型でコードを生成することはできません。JAXB は参照のタイプをどのように知るのでしょうか? XML スキーマへの拡張機能がそれを実現します! :)

于 2009-01-14T11:27:38.857 に答える
0

以下は、少なくともタイプ xs:IDREF の要素/属性の文字列プロパティを作成するようです。良いスタートですが、理想としては、JAXB は、参照されている要素と同じタイプのプロパティを生成します。やり方がわかったらまた報告します。この結果は、残念なことに独自のコンバーターを作成する必要があることを示している可能性があります。

<jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <jxb:globalBindings>
            <jxb:javaType name="java.lang.String" xmlType="xs:IDREF" parseMethod="javax.xml.bind.DatatypeConverter.parseString" printMethod="javax.xml.bind.DatatypeConverter.printString" />
        </jxb:globalBindings>
</jxb:bindings>
于 2009-01-14T11:10:48.513 に答える