Mostrando las entradas con la etiqueta WebService. Mostrar todas las entradas
Mostrando las entradas con la etiqueta WebService. Mostrar todas las entradas

martes, mayo 19, 2009

WSWS3549E: Error: WSDL2Java could not discover a suitable StubWriter for null.

Estabamos creando un cliente de webservice en Rational Web Developer 6.0.
El servicio estaba hecho en visual basic o .net
Cuando tratabamos de consumirlo recibimos un error de WSWS3549E: Error: WSDL2Java could not discover a suitable StubWriter for null.

Buscando un poco en la red, encontre que el problema es que RWD6.0 no utiliza soap 1.2 y por eso no me dejaba crear el cliente.

Encontré 3 posibles soluciones:
llamar a los desarrolladores del servicio y pedir que lo publiquen sin soporte soap 1.2, esto cambiando el web.config agregando estas lineas. Con esto logre crear el cliente correctamente.






Crear el cliente usando Axis, ahi logré utilizar el servicio.











Modificar "a mano" los wsdl quitando las llamadas a soap 1.2













Hasta ahí todo bien... pero... mas cosas pasaron en esa implementación....

Ref. http://www.ibm.com/developerworks/forums/thread.jspa?threadID=113283&tstart=30

continuará.-

jueves, abril 16, 2009

Error WSWS3047E al consumir un webservice en Rational Web Developer

Relacionado al Post Anterior, estabamos tratando de consumir un webservice desde el Rational Web Developer de IBM.
Cuando consumiamos el webservice desde visual basic o desde el SoapUi, lograbamos consumirlo perfectamente, pero al tratar de consumirlo desde el RWD6 nos daba error.

El problema específico que estabamos teniendo con este webservice es que luego de invocar al mismo, al traer los resultados de la ejecución nos estaba dando este mensaje:


WebServicesFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultString: org.xml.sax.SAXException: WSWS3047E: Error: No se puede deserializar el elemento cod_Cuenta del bean dataTransferObject.customerABE.customerDomain.framework.scl.tmmas.com.RegistroComercialDTO.
faultActor: null
faultDetail:

El servicio se ejecutaba, es decir, la llamada fue correcta y se hacian las acciones del servicio. Pero no lograbamos obtener el objeto que trae los resultados obtenidos de la ejecución. El servicio no fue desarrollado por nosotros y no teniamos acceso tampoco a los logs del servidor (del servicio) como para poder identificar el problema. Esto nos hizo perder mucho tiempo en pruebas infructuosas.

Instalamos y probamos el TCPMon para rastrear el problema y encontramos que la respuesta del webservice si se estaba enviando por la red, pero que (como dice el error) no se podía parsear. Cambiamos los wsdl con tipos de datos String asumiendo alguna posible incompatibilidad de tipos entre el servicio y el cliente. No funcionó.

Los servicios fueron desarrollados sobre WebLogic.

Luego de algunas investigaciones, encontramos que al parecer habia cierta información que se enviaba en la respuesta que no era acorde a las especificaciones RFC de XML. Y que esto es lo que estaba dando el problema.

http://www-01.ibm.com/support/docview.wss?uid=swg21220377


Procedimos a cambiar nuevamente el wsdl indicandole la propiedad
elementFormDefault="unqualified" al wsdl y recrear el cliente y apartir de ahi empezamos a consumir correctamente los servicios.

El unqualified es porque el weblogic no genera los namespaces usando las especificaciones RFC al 100% mientras que el websphere sí.


saludos!