2012-04-11 15 views
7

Estoy intentando generar un cliente de servicio web con wsdl2java desde axis2 (versión 1.6.1).Apache excepción de subelemento inesperado al generar un cliente de servicio web

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

Cuando llamo a este servicio, recibo una excepción.

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 la manera que pueda ver la etiqueta R en el resultado.

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

¿Cómo puedo solucionar esta excepción? El WSDL no está bajo mi control.

+0

No obstante, "Axis" se queja de que el elemento está allí, no ausente. –

+0

Sí, pero ¿qué puedo hacer para que ese eje acepte esta etiqueta Rs? –

+0

Nadie puede responder eso antes de que veamos la respuesta completa, al menos hasta el punto donde se produce el elemento 'Rs', así como las partes relevantes del WSDL (las declaraciones de tipo de elemento). Quizás la respuesta del servicio realmente está violando el contrato WSDL, eso es completamente posible. Tal vez usa un WSDL más nuevo que el que tienes. –

Respuesta

11

El subelemento inesperado se produce principalmente en Axis2 en el tipo de enlace de datos ADB. Cuando la secuencia de etiquetas que entra en la respuesta SOAP no es la misma que la de los atributos en la clase java formada a partir de wsdl.

Por ejemplo,

Si la respuesta o solicitud XML deben tener a, b, elementos de C en una secuencia y real XML ha a, d, c elementos en la secuencia, a continuación, Axis2 sería quejarse diciendo que recibió un elemento inesperado llamado d.

Se puede resolver cambiando la secuencia de etiquetas en wsdl.

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

+0

Parece que el enlace está roto. – Eyal

+0

Puede marcar este en su lugar: [http://axis.apache.org/axis2/java/core/faq.html#unexpected_subelement](http://axis.apache.org/axis2/java/core/faq. html # unexpected_subelement) – Carlos

1

yo sólo tenía el mismo problema con eutils NCBI y lo resolvió mediante la edición del archivo WSDL y luego regenerar las clases de cliente local. Usé la prueba de jabón como lo hice para ver exactamente lo que estaba esperando y luego hice que coincidieran. En mi caso, les faltaba el elemento llamado "DbBuild" en su objeto DbInfoType.

Cuestiones relacionadas