2012-04-11 80 views
7

我试图从axis2(版本1.6.1)生成wsdl2java web服务客户端。Apache生成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不受我控制。

+0

没有“但是” - Axis抱怨在那里的元素,而不是缺席。 – 2012-04-11 21:24:42

+0

是的,但我能做些什么,该轴接受这个Rs标签? – 2012-04-11 21:57:10

+0

在我们看到完整的响应之前,至少直到发生元素“Rs”的点以及WSDL的相关部分(元素类型声明)之前,没有人能够回答这个问题。也许服务的响应确实违反了WSDL合约,这完全有可能。也许它使用的是比你所拥有的更新的WSDL。 – 2012-04-11 22:01:08

回答

11

意外的子元素错误主要发生在ADB数据绑定类型的Axis2中。当来自SOAP响应的标记序列与由wsdl形成的java类中的属性序列不同时。

例如,

如果响应或请求XML必须有A,B,在序列c的元素 和实际的XML有一个,d,序列在C元素,那么Axis2中会 抱怨说它收到一个名为d的Unexpected元素。

它可以通过更改wsdl中的标记序列来解决。

注:If this is not the case, check here for other reasons

+0

该链接似乎已损坏。 – Eyal 2012-10-11 12:04:34

+0

你可以选择这个:[http://axis.apache.org/axis2/java/core/faq.html#unexpected_subelement](http://axis.apache.org/axis2/java/core/faq。 HTML#unexpected_subelement) – Carlos 2012-11-07 17:38:27

1

我刚刚与NCBI eutils同样的问题,通过编辑WSDL文件,然后在本地重新生成客户端类解决它。我使用了soaptest,就像你做的那样,看看它究竟是什么,然后让它们匹配起来。在我的情况下,他们在他们的DbInfoType对象中缺少名为“DbBuild”的元素。

相关问题