7

我正在尝试从axis2(版本1.6.1)生成一个带有wsdl2java的webservice客户端。

./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 Tag。

<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 回答