Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Apache Unexpected subelement exception while generating a webservice client

I'm trying to generate a webservice client with wsdl2java from axis2 (version 1.6.1).

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

When I call this service, I get an Exception.

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());
    }   

With soaptest however I can see the Rs Tag in the result.

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

How can I fix this exception? The WSDL is not under my control.

like image 587
martin s Avatar asked Apr 11 '12 20:04

martin s


2 Answers

Unexpected subelement error mostly occur in Axis2 in ADB databinding type. When the sequence of tags coming in SOAP response is not same as that of attributes in java class formed from wsdl.

For example,

If response or request XML must have a, b, c elements in a sequence and actual XML has a, d, c elements in the sequence, then Axis2 would complain saying that it received an Unexpected element named d.

It can be resolved by changing the sequence of tags in wsdl.

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

like image 82
shashankaholic Avatar answered Sep 23 '22 12:09

shashankaholic


I just had the same problem with NCBI eutils and solved it by editing the wsdl file and then regenerating the client classes locally. I used soaptest as you did to see exactly what it was expecting and then made them match up. In my case, they were missing the element named "DbBuild" in their DbInfoType object.

like image 21
Ben Avatar answered Sep 24 '22 12:09

Ben