以下を使用して Web サービスを作成しました。
- Apache Axis 2 CodeGen Wizard v.1.6.2 (バインディング: ADB)
- エクリプス ジュノ
- トムキャット7
- Java 6
サービスはカスタム Java オブジェクト (DataBean) をクライアントに返しますが、クライアント コードで例外に遭遇しました。
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {schemaTargetNs}message
私が調査したことから、何度も何度も...これは非常に一般的な問題だと思いますが、それを修正するために何をすべきかについての決定的な答えはまだ得られていません.
このフォーラムや他のフォーラムの投稿では、WSDL を変更する必要がある (一部の名前空間) か、クライアント スタブを変更する必要があると述べています。ADB にバグがあると言う人さえいます。これは確かに以前のバージョンの Axis のバグでしたが、バグが修正されたことを示すメール アーカイブの投稿が多数あります。これらのメーリング アーカイブは、以前のバージョンの Axis2 に関連していました。
今私の質問は次のとおりです。
- それはまだバグですか?
- WSDL または Client スタブで正確に何を変更する必要がありますか?
言及する価値があるのは、「文字列」をクライアントに返す同様の Web サービスを作成したことです。それは正常に動作します! そのため、複雑なデータ型が含まれていると失敗します。
「既知の制限」という見出しの下に、ApacheのWebサイトにいくつかの情報がありました...
「ADB は「単純な」データバインディング フレームワークであることを意図しており、すべてのタイプのスキーマをコンパイルすることを意図していません。次の制限が最も強調されています。
- 複合型の拡張と制限."
それが問題ですか?
次の WSDL ファイルのスニペットは、あなたにとって興味深いかもしれません...
<wsdl:types>
<xs:schema xmlns:ax26="http://mywebservice/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="schemaTargetNs">
<xs:import namespace="http://mywebservice/xsd"/>
<xs:element name="getMsg">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="reqData" nillable="true" type="ax25:DataBean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getMsgResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="ax25:DataBean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://mywebservice/xsd">
<xs:complexType name="DataBean">
<xs:sequence>
<xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
さて、どうすれば問題を解決できますか? ここに他のコード スニペットを含める必要がありますか?