Apache Unexpected subelement exception while generating a webservice client

martin s picture martin s · Apr 11, 2012 · Viewed 16.9k times · Source

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.

Answer

shashankaholic picture shashankaholic · Apr 12, 2012

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