Pues la vida al fin habia sido color de rosa en la generacion de web service client en axis2 utilizando el metodo de generacion de cliente desde linea de comando encontrado aqui.
Resulta que los webservices que nos entregan ahora son el Soap 1.2 y estos generaron ciertos problemas.
No soy experta en generacion de web service clients, menos en Soap 1.2, pero he aqui nuestros problemas encontrados y las soluciones a ellos.
Honestamente creo y recomiendo que lo ideal es que generes los clientes utilizando el jax-ws. No tengo conocimientos extensos en este tampoco, pero si se que es mas facil la generacion y consumo de estos. Nosotros desafortunadamente por integracion al proyecto no podemos dejar el Axis y si te encuentras en nuestro mismo barco, espero aqui encuentres ayuda.
La generacion del Cliente se realizo como siempre con la linea de comando y sin necesidad de cambiar nada en el codigo generado.
Primer Error:
org.apache.axis2.AxisFault: BEA-382032: The message must be an instance of: {http://www.w3.org/2003/05/soap-envelope}Envelope
{http://schemas.xmlsoap.org/soap/envelope/}VersionMismatch
<faultcode>soapenv:VersionMismatch</faultcode>
Solucion:
Como el error decia que el problema es que la version que se esta recibiendo el http://schemas.xmlsoap.org/soap/envelope/ y la que esta esperando es http://www.w3.org/2003/05/soap-envelope, se tuvo que poner esta en duro en el stub generado.
La url que debes cambiar no se encuentra tal cual, aparece como _operationClient.getOptions().getSoapVersionURI() en el metodo toEnvelope. Donde encuestres este metodo de toEnvelop cambia el _operationClient.getOptions().getSoapVersionURI() por "http://www.w3.org/2003/05/soap-envelope".
Segundo Error:
org.apache.axis2.AxisFault: Must Understand check failed for header http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd : Security
{http://www.w3.org/2003/05/soap-envelope}MustUnderstand
Solucion:
Para este investigamos en varias paginas. Un compañero encontro la solucion en la siguiente pagina:
http://msdn.microsoft.com/en-us/library/ms977327.aspx
Para corregir el error en los headers por seguridad se hizo lo siguiente en codigo:
Después de realizar el Envelop (luego del método toEnvelop), deben colocar el siguiente código:
Con estos cambios, todo lo de mas funciono como siempre.
Saludos.
Resulta que los webservices que nos entregan ahora son el Soap 1.2 y estos generaron ciertos problemas.
No soy experta en generacion de web service clients, menos en Soap 1.2, pero he aqui nuestros problemas encontrados y las soluciones a ellos.
Honestamente creo y recomiendo que lo ideal es que generes los clientes utilizando el jax-ws. No tengo conocimientos extensos en este tampoco, pero si se que es mas facil la generacion y consumo de estos. Nosotros desafortunadamente por integracion al proyecto no podemos dejar el Axis y si te encuentras en nuestro mismo barco, espero aqui encuentres ayuda.
La generacion del Cliente se realizo como siempre con la linea de comando y sin necesidad de cambiar nada en el codigo generado.
Primer Error:
org.apache.axis2.AxisFault: BEA-382032: The message must be an instance of: {http://www.w3.org/2003/05/soap-envelope}Envelope
{http://schemas.xmlsoap.org/soap/envelope/}VersionMismatch
<faultcode>soapenv:VersionMismatch</faultcode>
Solucion:
Como el error decia que el problema es que la version que se esta recibiendo el http://schemas.xmlsoap.org/soap/envelope/ y la que esta esperando es http://www.w3.org/2003/05/soap-envelope, se tuvo que poner esta en duro en el stub generado.
La url que debes cambiar no se encuentra tal cual, aparece como _operationClient.getOptions().getSoapVersionURI() en el metodo toEnvelope. Donde encuestres este metodo de toEnvelop cambia el _operationClient.getOptions().getSoapVersionURI() por "http://www.w3.org/2003/05/soap-envelope".
Segundo Error:
org.apache.axis2.AxisFault: Must Understand check failed for header http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd : Security
{http://www.w3.org/2003/05/soap-envelope}MustUnderstand
Solucion:
Para este investigamos en varias paginas. Un compañero encontro la solucion en la siguiente pagina:
http://msdn.microsoft.com/en-us/library/ms977327.aspx
Para corregir el error en los headers por seguridad se hizo lo siguiente en codigo:
Después de realizar el Envelop (luego del método toEnvelop), deben colocar el siguiente código:
OMNamespace xsi =
getFactory(_operationClient.
createOMNamespace(url,
"wsse");
SOAPHeaderBlock soapHeaderBlock
=env.getHeader().
soapHeaderBlock.
Iterator
it = env.getHeader().
headerBlock.setRole("http://
|
Con estos cambios, todo lo de mas funciono como siempre.
Saludos.
Como podria agregar 2 nuevos elementos al Header?
ReplyDeleteEn mi caso necesito 2 elementos, no atributos:
Gracias!
Mis 2 elementos que deseo agregar....
Deletewsa:To xmlns:wsa="http://mws2.safetypay.com/direct/ws/v.1.0/"
wsa:Action xmlns:wsa="urn:safetypay:contract:mws:direct:CommunicationTest"
Cuales serian las funciones a utilizar?