2012-04-11 14 views
7

Ich versuche einen Webservice-Client mit wsdl2java von axis2 (Version 1.6.1) zu generieren.Apache Unerwartete Subelementausnahme beim Generieren eines Webservice-Clients

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

Wenn ich diesen Service anrufe, bekomme ich eine Ausnahme.

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

Mit soaptest jedoch kann ich den Rs Tag im Ergebnis sehen.

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

Wie kann ich diese Ausnahme beheben? Die WSDL ist nicht unter meiner Kontrolle.

+0

Es gibt kein "wie auch immer" - Axis beschwert sich darüber, dass das Element da ist, nicht abwesend. –

+0

Ja, aber was kann ich tun, dass die Achse dieses Rs-Tag akzeptiert? –

+0

Niemand kann das beantworten, bevor wir die vollständige Antwort zumindest bis zu dem Punkt, an dem das Element "Rs" auftritt, sowie die relevanten Teile der WSDL (die Elementtypdeklarationen) sehen. Vielleicht verletzt die Antwort des Dienstes wirklich den WSDL-Vertrag, das ist durchaus möglich. Vielleicht verwendet es eine neuere WSDL als die, die Sie haben. –

Antwort

11

Unerwarteter Subelement Fehler treten meistens in Axis2 in ADB Databinding Typ auf. Wenn die Reihenfolge der Tags, die in der SOAP-Antwort eingehen, nicht dieselbe ist wie die der Attribute in der Java-Klasse, die aus wsdl gebildet werden.

Zum Beispiel muss

Wenn Antwort oder Anforderung XML sagen, a, b, c Elemente in einer Sequenz hat und tatsächliche XML hat, Axis2 würde a, d, c Elemente in der Folge dann klagen dass es ein unerwartetes Element namens d erhalten hat.

Es kann aufgelöst werden, indem die Reihenfolge der Tags in WSDL geändert wird.

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

+0

Der Link scheint unterbrochen zu sein. – Eyal

+0

Sie können dies stattdessen überprüfen: [http://axis.apache.org/axis2/java/core/faq.html#unexpected_subelement](http://axis.apache.org/axis2/java/core/faq. html # unerwartetes_element) – Carlos

1

Ich hatte gerade das gleiche Problem mit NCBI eutils und löste es durch die WSDL-Datei bearbeiten und dann lokal die Client-Klassen zu regenerieren. Ich habe Seiftest verwendet, um genau zu sehen, was er erwartet hatte, und sie dann zusammengebracht. In meinem Fall fehlte ihnen das Element "DbBuild" in ihrem DbInfoType-Objekt.

Verwandte Themen