PDA

Ver la Versión Completa : Error "Message part {URL}Método was not recognized" al consumir servicio Web Java


Al González
02-05-2013, 08:23:24
Hola a todos.

Los servicios Web (Web services) es una de las muchas áreas en las que me declaro novato.

Para concluir cierta aplicación que me han encargado, me falta que ésta envíe ciertos datos a través de un servicio Web. Para esta parte opté por usar Delphi XE2, dado que su importador de archivos WSDL está más actualizado que el de Delphi 7.

Cuando trato de consumir el servicio Web, es decir, cuando intento llamar a uno de sus métodos, obtengo como respuesta una excepción de clase ERemotableException, cuyo mensaje es:

Message part {URL}Método was not recognized. (Does it exist in service WSDL?)

Donde URL es la URL del espacio de nombres indicado por el WSDL, y Método es el nombre del método que se intentó llamar.

La importación parece ocurrir correctamente, se genera un archivo .pas con todas las clases, métodos y funciones que definen al servicio Web, el método se importa con el mismo nombre que aparece en varios de los nodos del WSDL. Pero la llamada no se realiza.

Usando la aplicación de diagnóstico SoapUI, al lanzar la petición (request) tampoco se consigue ejecutar la llamada, aunque el error es diferente:

ERROR [WsdlSubmit] Exception in request: java.net.UnknownHostException: lpmx2xxxxx.xxm.na.xxg

Observando el archivo .log de esta herramienta, pude notar que el servicio Web está hecho en Java y es proporcionado mediante el servidor Apache.

El WSDL completo es:
<?xml version="1.0" encoding="UTF-8" ?>
<wsdl:definitions name="WSManagementxxxxerPointService" targetNamespace="http://www.xx.com.mx/xxxxportal/xxxxerPoint" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.xx.com.mx/xxxxportal/xxxxerPoint" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xs:schema elementFormDefault="unqualified" targetNamespace="http://www.xx.com.mx/xxxxportal/xxxxerPoint" version="1.0" xmlns:tns="http://www.xx.com.mx/xxxxportal/xxxxerPoint" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="UploadFile" type="tns:UploadFile" />
<xs:element name="UploadFileResponse" type="tns:UploadFileResponse" />
<xs:complexType name="UploadFile">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="xs:string" />
<xs:element minOccurs="0" name="arg1" type="xs:string" />
<xs:element minOccurs="0" name="arg2" type="xs:string" />
<xs:element minOccurs="0" name="arg3" type="xs:string" />
<xs:element minOccurs="0" name="arg4" type="xs:string" />
<xs:element name="arg5" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="UploadFileResponse">
<xs:sequence>
<xs:element name="return" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="UploadFile">
<wsdl:part element="tns:UploadFile" name="parameters" />
</wsdl:message>
<wsdl:message name="UploadFileResponse">
<wsdl:part element="tns:UploadFileResponse" name="parameters" />
</wsdl:message>
<wsdl:portType name="WSManagamentxxxxerPoint">
<wsdl:operation name="UploadFile">
<wsdl:input message="tns:UploadFile" name="UploadFile" />
<wsdl:output message="tns:UploadFileResponse" name="UploadFileResponse" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="WSManagementxxxxerPointServiceSoapBinding" type="tns:WSManagamentxxxxerPoint">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="UploadFile">
<soap:operation soapAction="" style="document" />
<wsdl:input name="UploadFile">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="UploadFileResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WSManagementxxxxerPointService">
<wsdl:port binding="tns:WSManagementxxxxerPointServiceSoapBinding" name="WSManagamentxxxxerPointPort">
<soap:address location="http://lpmx2xxxxx.xxm.na.xxg:8080/dwhlp-ejb-1.0.0-SNAPSHOT/WSManagamentxxxxerPoint" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Y la parte que podría ser relevante del archivo soapui-errors.log es la siguiente:
2013-05-01 20:12:50,860 ERROR [WsdlSubmit] Exception in request: java.net.UnknownHostException: lpmx2xxxxx.xxm.na.xxg
2013-05-01 20:12:50,891 ERROR [errorlog] java.net.UnknownHostException: lpmx2xxxxx.xxm.na.xxg
java.net.UnknownHostException: lpmx2xxxxx.xxm.na.xxg
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOpe rator.java:242)
at com.eviware.soapui.impl.wsdl.support.http.SoapUIMultiThreadedHttpConnectionManager$SoapUIClientConne ctionOperator.openConnection(SoapUIMultiThreadedHttpConnectionManager.java:274)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport$Helper.execute(HttpClientSupport.java:23 6)
at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport.execute(HttpClientSupport.java:345)
at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClien tRequestTransport.java:241)
at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


Supongo que ésta última es una especie de call stack de Java, y ese método getAllByName0, podría ser el que ha elevado la excepción.

NOTA: Algunas partes las he cambiado por motivos de confidencialidad.

El método en cuestión se llama UploadFile. La pregunta es: ¿por qué se eleva una excepción diciendo que ese método no fue reconocido?

De antemano gracias por la información que puedan proporcionarme.

Saludos.

Al González.

P.D. Antes de hacer esta consulta leí información en varias decenas de sitios Web, incluyendo los foros de la Comunidad Delphi, pero no encontré nada que pareciera específico de este problema. Esta vez Google me falló. :(

P.D. #2 Lo sé, tal vez resulte que el WSDL que me proporcionaron no esté reflejando el contenido actual del servicio Web. Si termina siendo eso, voy a exigir el doble de paga o por lo menos una buena botella de vino. :rolleyes: