7

axis2(バージョン1.6.1)からwsdl2javaを使用してWebサービスクライアントを生成しようとしています。

./wsdl2java.sh -uri http://www.ncbi.nlm.nih.gov/entrez/eutils/soap/v2.0/efetch_snp.wsdl

このサービスを呼び出すと、例外が発生します。

org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {http://www.ncbi.nlm.nih.gov/soap/eutils/efetch_snp}Rs

    try {
        EFetchSnpServiceStub fetchService = new EFetchSnpServiceStub();
        EFetchSnpServiceStub.EFetchRequest reqIdSnp = new EFetchSnpServiceStub.EFetchRequest();
        reqIdSnp.setId("193925233");
        EFetchSnpServiceStub.EFetchResult resIdSnp = fetchService.run_eFetch(reqIdSnp);
    } catch (Exception e) {
        System.out.println(e.toString());
    }   

ただし、 soaptestを使用すると、結果にRsタグが表示されます。

<Rs rsId="193925233" snpClass="snp" snpType="notwithdrawn" molType="genomic" bitField="050000000005000000000100" taxId="3702">

この例外を修正するにはどうすればよいですか?WSDLは私の管理下にありません。

4

2 に答える 2

11

予期しないサブエレメントエラーは、主にADBデータバインディングタイプのAxis2で発生します。SOAP応答に含まれるタグのシーケンスが、wsdlから形成されたJavaクラスの属性のシーケンスと同じでない場合。

例えば、

応答または要求XMLのシーケンスにa、b、c要素が必要であり、実際のXMLのシーケンスにa、d、c要素がある場合、Axis2はdという名前の予期しない要素を受け取ったと文句を言います。

これは、wsdlのタグの順序を変更することで解決できます。

注:そうでない場合は、他の理由でここを確認してください

于 2012-04-12T07:17:23.467 に答える
1

NCBI eutilsでも同じ問題が発生し、wsdlファイルを編集してから、クライアントクラスをローカルで再生成することで問題を解決しました。私はあなたが期待していたことを正確に確認するためにsoaptestを使用し、それらを一致させました。私の場合、DbInfoTypeオブジェクトに「DbBuild」という名前の要素がありませんでした。

于 2014-02-12T19:47:28.880 に答える