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

jueves, 15 de octubre de 2009

Como cambiar el EndPoint o EPR de AXIS2

Cuando se genera con axis2 un web services, de forma dinamica.. o sea que el WS te cree el WSDL en forma dinamica, el motor de Axis2 tiene un comportamiento, que a mi me trajo algunos problemas.

Es decir, Cuando por ejemplo queremos probar el WS con el cliente de eclipse, uno agarra y pone la direccion del ws.
Ej:

http://IP_PUBLICA/RoboCupWS/services/RoboCupService?wsdl

Luego de esto el cliente de WS nos trae todos los metodos que contiene ese WS y hasta aca todo muy lindo, el problema es que el motor de axis2 genera automaticamente el WSDL y como ENDPOINT pone la ip LOCAL DE LA MAQUINA...
Con lo cual cuando queremos pedir un metodo al ws, se lo estariamos pidiendo a la ip local de esa maquina, la cual para nosotros no existe.... nosotros queriamos que le pida el metodo a la IP PUBLICA.

Bueno la forma de arreglar este problemita es configurando el ENDPOINT en el axis2.

Para hacer esto hacemos lo siguiente:

- Dentro del proyecto del WS , nos vamos a la carpeta WebContent/WEB-INF/conf

Y dentro de esta carpeta vamos a encontrar el archivo de configuracion de axis2, que se llama axis2.xml.

Dentro de este archivo vamos a buscar esto:





y como podemos ver ahi, configurando esto vamos a cambiar el ENDPOINT del ws.

ej:



200.175.45.1-->

o

fenderstratocaster.com-->


De esta manera ya tenmos configrado el ENDPOINT del ws, y no vamos a tenr ningun problema.

IMPORTANTE:

Tener en cuenta que haciendo esto, estamos harcodeando el ENDPI¿OINT, por lo cual esto ya no va a ser dinamico, y si el dia de mañana sacamos el WS de ese server y lo migramos a otro server, vamos a tener que cambiar el dns o ip del ENDPOINT para ese nuevo server.

miércoles, 2 de septiembre de 2009

Como acceder al ServeltContext de un Servicio Web Axis2

Trabajando con Axis2 neceistaba tener un Servelet por afuera del Servicio, que sea un servidorcito UDP, y que parsee una trama UDP, que me llegaba todo el tiempo a ese servlet.

Entonces necesitaba parsear los datos UDP, y poder mandarlos atravez del WS.

Para eso iba a neceistar que mi servicio WS, pudiera agarrar esos datos parseados del Servlet. El metodo de comunicacion entre ese Servlet y mi Servicio del WS de axis2 iba a tener que ser el Contexto de la aplicacion, osea el ServletContext, entonces me puse a buscar la manera de poder acceder desde el servicio de axis2 al servletcontes de la aplicacion, y lo pude hacer gracias a esta data:


If you are using Axis2 Web Archive (WAR) distribution, then you can easily get these information from the messagecontext.

Accessing Remote IP address from the message context: You can get the remote IP address of the client corresponding to the current message as follows:

String remoteAddress = (String)msgCtx.getProperty("REMOTE_ADDR");


----

Accessing ServletContext from the message context: You can obtain the ServletContext
from message context as follows:

ServletContext servletContext = (ServletContext)MessageContext.getProperty
("transport.http.servletContext");

ServletContext servletContext = (ServletContext)MessageContext.getCurrentMessageContext().getProperty("transport.http.servletContext");


----

Accessing HttpServletRequest from the message context: You can obtain the
HttpServletRequest from message context as follows:

HttpServletRequest httpServletRequest = (HttpServletRequest)MessageContext.getProperty
("transport.http.servletRequest");


Esta ultima es la que utilice para acceder al contexto.