0

シンプルなタイプを作りました

   <xsd:simpleType name="IntOrBlank">
            <xsd:union memberTypes="xsd:int">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:enumeration value=""/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:union>
        </xsd:simpleType>

次に、axis2 から wsdl2java を使用してスタブを作成します。この型から整数値を取得しようとするまで、送信と受信が機能しているように見えました。私のコードは次のとおりです。

IntOrBlank get_part_custom_field7 = each_record[0].get_part_custom_field7(); オブジェクト object = get_part_custom_field7.getObject();

現在、オブジェクトは null です。SOAPメッセージは

   <bm:_part_custom_field7>9</bm:_part_custom_field7>
4

2 に答える 2

0

コードをたどると、wsdl2java がスタブを正しく生成していないことがわかりました。作成されたオブジェクトは java.math.BigInteger でしたが、スタブはオブジェクトが Integer のインスタンスであることを確認するためのチェックを行いました。その結果、オブジェクトは例外をスローせずに null になります。にタイプを変更しました

  <xsd:simpleType name="IntOrBlank">
        <xsd:union memberTypes="xsd:integer">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value=""/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>

そして問題を解決しました

于 2010-07-22T02:17:37.023 に答える
0

そのような使用をやめることをお勧めしますunion

思い通りに処理できないツールを 1 つ見つけただけですが、他にもたくさんあるはずです。unionこの文脈ではあまり意味がありません。この場合、どの Java タイプを使用する必要がありますか? Object?

この場合はどうですか:

  <xs:simpleType name="SillyUnion">
    <xs:union memberTypes="xs:int xs:string"/>
  </xs:simpleType>

これに wsdl2java で使用するデータ型は何ですか? Objectまた?このデータを使用するプログラマーは、整数データまたは文字列データが含まれているかどうかをどのように判断しますか? このデータを使用するすべての人が最初に確認する必要があるということですか?

ユニオンは、当時は良いアイデアのように思えたものの 1 つですが、以前考えられていたほど役に立たないことが判明しました。

于 2010-07-22T02:26:05.237 に答える