2012-04-11 18 views
7

Próbuję wygenerować klienta usługi WWW z wsdl2java z axis2 (wersja 1.6.1).Apache Nieoczekiwany wyjątek podelementu podczas generowania klienta usługi WWW

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

Kiedy zadzwonię do tej usługi, otrzymuję wyjątek.

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

Z soaptest jednak widzę Tag R w wyniku.

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

Jak mogę naprawić ten wyjątek? WSDL nie jest pod moją kontrolą.

+0

Nie ma "jednak" - oś narzeka na obecność tego elementu, nieobecny. –

+0

Tak, ale co mogę zrobić, że oś akceptuje ten tag Rs? –

+0

Nikt nie może odpowiedzieć na to pytanie, zanim zobaczymy pełną odpowiedź, przynajmniej do momentu, w którym występuje element 'Rs', a także odpowiednie części WSDL (deklaracje typu elementu). Być może odpowiedź serwisu naprawdę narusza kontrakt WSDL, to jest całkowicie możliwe. Może używa nowszego WSDL niż ten, który masz. –

Odpowiedz

11

Niespodziewany podelement błąd występuje najczęściej w Axis2 w typie wiązań danych ADB. Gdy kolejność tagów przychodzących w odpowiedzi SOAP nie jest taka sama jak w przypadku atrybutów klasy java utworzonej z pliku wsdl.

Przykładowo

Jeżeli odpowiedź lub XML żądania muszą a, b, elementy C w ciągu i rzeczywiste XML A, D, elementy C, w kolejności, a następnie Axis2 będzie skarżą mówiąc że otrzymał nieoczekiwany element o nazwie d.

Można to rozwiązać, zmieniając kolejność tagów w kodzie WSDL.

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

+0

Link wydaje się być uszkodzony. – Eyal

+0

Zamiast tego możesz sprawdzić ten: [http://axis.apache.org/axis2/java/core/faq.html#unexpected_subelement](http://axis.apache.org/axis2/java/core/faq. html # nieoczekiwane_subelement) – Carlos

1

prostu miałem ten sam problem z eutils NCBI i rozwiązać go poprzez edycję pliku WSDL, a następnie regeneruje klas klientów lokalnie. Użyłem "takaptest", tak jak ty, aby zobaczyć dokładnie to, czego oczekiwałeś, a potem je dopasować. W moim przypadku brakowało elementu o nazwie "DbBuild" w ich obiekcie DbInfoType.

Powiązane problemy