2012-04-11 12 views
7

Sto provando a generare un client di servizio Web con wsdl2java da axis2 (versione 1.6.1).Apache Eccezione di sottoelemento imprevista durante la generazione di un client di servizio Web

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

Quando chiamo questo servizio, ottengo un'eccezione.

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

Con soaptest tuttavia posso vedere il tag Rs nel risultato.

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

Come posso risolvere questa eccezione? Il WSDL non è sotto il mio controllo.

+0

Non c'è "tuttavia" - l'Asse si lamenta dell'elemento presente, non assente. –

+0

Sì, ma cosa posso fare che l'asse accetti questo tag Rs? –

+0

Nessuno può rispondere prima di vedere la risposta completa, almeno fino al punto in cui si verifica l'elemento 'Rs', così come le parti rilevanti del WSDL (le dichiarazioni del tipo di elemento). Forse la risposta del servizio sta davvero violando il contratto WSDL, è assolutamente possibile. Forse usa un WSDL più recente di quello che hai. –

risposta

11

L'errore inaspettato del sottoelemento si verifica principalmente nell'Asse2 nel tipo di associazione dati ADB. Quando la sequenza di tag in arrivo nella risposta SOAP non è uguale a quella degli attributi nella classe java formata da wsdl.

Per esempio,

Se risposta o richiesta XML devono avere a, b, elementi C in una sequenza ed attuale XML è a, d, elementi C nella sequenza, quindi Axis2 sarebbe lamentano dicendo che ha ricevuto un elemento imprevisto chiamato d.

Può essere risolto modificando la sequenza di tag in wsdl.

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

+0

Il link sembra essere rotto. – Eyal

+0

Puoi invece controllare questo: [http://axis.apache.org/axis2/java/core/faq.html#unexpected_subelement](http://axis.apache.org/axis2/java/core/faq. html # unexpected_subelement) – Carlos

1

Ho appena avuto lo stesso problema con eutils NCBI e risolto modificando il file WSDL e quindi rigenerare le classi client localmente. Ho usato più sodo come hai fatto per vedere esattamente cosa si aspettava e poi li ho fatti abbinare. Nel mio caso, mancava l'elemento denominato "DbBuild" nel loro oggetto DbInfoType.

Problemi correlati