Foros del Web » Programación para mayores de 30 ;) » Java »

Cliente Axis 1.2 para consumir WS Axis 2

Estas en el tema de Cliente Axis 1.2 para consumir WS Axis 2 en el foro de Java en Foros del Web. Hola a Todos los forista: Después de unos días de descanso, he vuelto a la batalla con los WebServices y las distintas formas de consumirlos. ...
  #1 (permalink)  
Antiguo 02/07/2013, 15:33
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Cliente Axis 1.2 para consumir WS Axis 2

Hola a Todos los forista:

Después de unos días de descanso, he vuelto a la batalla con los WebServices y las distintas formas de consumirlos.

Hace algunos días publiqué una pregunta que quedó sin respuesta y sigo haciendo pruebas:

http://www.forosdelweb.com/f45/como-...r-10g-1060097/

Ahora estoy en lugar de utilizar JAX-WS estoy tratando de consumir un cliente generado con Axis 2...

Les explico nuevamente cuál es el problema y a continuación planteo lo que he investigado. Actualmente tenemos publicados varios servicios web con Axis 1.4, pero estamos haciendo la migración hacia JAX-WS o Axis 2... sin embargo el problema que tenemos no es en realidad con el WS, sino con los clientes que tenemos... dichos clientes están basados en Axis 1, y básicamente lo hacen de esta manera:

Código Java:
Ver original
  1. package clientews;
  2.  
  3. import org.apache.axis.client.Call;
  4. import org.apache.axis.client.Service;
  5.  
  6. public class cliente {
  7.     public cliente() {
  8.     }
  9.    
  10.     public static String consumir(Object[] parametros){
  11.         String regresar = null;
  12.         Service service = null;    
  13.         Call call       = null;
  14.         String endpoint = null;
  15.         try {
  16.           endpoint = "http://localhost:8084/HolaMundo/HolaMundo";          
  17.           service = new Service();
  18.           call = (Call) service.createCall();
  19.           call.setTargetEndpointAddress(new java.net.URL(endpoint));
  20.           call.setOperationName("hello");          
  21.           regresar=String.valueOf(call.invoke(parametros));          
  22.         }// try
  23.         catch (Exception e) {
  24.           e.printStackTrace();
  25.         }// catch
  26.         finally {
  27.           return regresar;
  28.         }// finally
  29.       }
  30.  
  31.     public static void main(String[] args) {
  32.         try {            
  33.             String parametro = "José";
  34.             String respuesta = consumir(new Object[]{parametro});
  35.             System.out.println("respuesta: --->" + respuesta);
  36.         } catch (Exception e) {
  37.             System.err.println(e.toString());
  38.         }
  39.     }
  40. }

Ahora, la teoría dice que cualquier cliente debería de consumir cualquier WS, (al menos eso es lo que tengo entendido) sin embargo, al cambiar la URL del endpoint y colocar la del WS en Axis2 o en JAX-WS no se invoca y marca error...

Ahora bien, investigando un poco, encontré que el problema está con el namespace del WSDL que se genera, sin embargo no he encontrado una manera de modificar este archivo WSDL para que el cliente no tenga que hacer cambios... navegando por la red encontré esta página:

http://axis.apache.org/axis2/java/co...migration.html

Y veo noté que aunque es prácticamente la misma forma de invocar el WS que puse arriba, si tiene una pequeña diferencia:

Código Java:
Ver original
  1. call.setOperationName(new QName("http://soapinterop.org/", "echoString"));

En esta línea, el namspace se declara en el constructor del objeto QName...

Haciendo este cambio, el Cliente funciona correctamente. Sin embargo no es factible que le pidamos a nuestros clientes que hagan cambios en sus páginas, sino que lo ideal es poder configurar el WS para que funciones sin problemas...

el archivo WSDL del WS que estoy probando dice lo siguiente:

Código XML:
Ver original
  1. <wsdl:definitions
  2. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  3. xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://calculadora.es"
  4. xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
  5. xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
  6. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  7. xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
  8. xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  9. xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
  10. targetNamespace="http://calculadora.es">

Si observan, el targetNamespace está como

Código:
targetNamespace="http://calculadora.es"
En mi cliente, cuando pongo esto:

Código MySQL:
Ver original
  1. call.setOperationName("saludar");

La aplicación marca el siguiente error:

Código:
namespace mismatch require http://calculadora.es found none
Cuando lo hago así:

Código Java:
Ver original
  1. call.setOperationName(new QName("http://calculadora.es", "saludar"));

El cliente funciona perfectamente...

Ahora bien, no es factible que le pida a todos los clientes que modifiquen la forma en que invocan los ws con Axis 1.4 para incluir el namespace que hace referencia el archivo WSDL... entonces después de tanto rollo finalmente la pregunta...

¿cómo puedo modificar mi archivo WSDL para que no me marque este error y no tener que pedirle a los clientes que modifiquen esta línea de código, es decir, que tome por defecto el namespace que viene definido?

De antemano muchísimas gracias por el apoyo.

Saludos
Leo.
  #2 (permalink)  
Antiguo 03/07/2013, 04:04
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Cliente Axis 1.2 para consumir WS Axis 2

Hubiera estado bien que hubieras agradecido el que te señalara que te faltaba el namespace en el operation, en vez de decir que llegaste a esa conclusión por ti mismo.

Pues nada, que tus investigaciones sigan dando sus frutos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 03/07/2013, 08:09
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Cliente Axis 1.2 para consumir WS Axis 2

Hola Xerelo:

Cita:
Hubiera estado bien que hubieras agradecido el que te señalara que te faltaba el namespace en el operation, en vez de decir que llegaste a esa conclusión
por ti mismo.
Una disculpa por no haber agradecido tu aporte... como dije al inicio de mi post, tomé unos días de descanso y no había tenido tiempo de revisar las respuestas... es apenas ayer pude darle un vistazo a lo que me habías comentado en el otro post, aunque en realidad dí con la página de referencia antes de leer tu comentario, ni siquiera me había dado cuenta de que habías dado con la respuesta.

En los días que estuve de vacaciones, sinceramente traté de olvidarme del problema porque tenía un buen rato sin conseguir resultados... en ningún momento estoy tratando de robarme tu crédito ni nada por el estilo, pero creo que tampoco es justo que te lo tomes como algo personal, a final de cuentas todos aquí somos colaboradores y lo hacemos de manera desinteresada ¿o no es así?

Sin embargo también como comenté en este post, el problema persiste, pues si bien es un detalle con el namespace la pregunta sigue siendo si es posible modificar algo en el WS para no tener que hacer modificaciones en los clientes, ya que esta solución no es del todo factible.

Otra ves una disculpa Xerelo y gracias por el apoyo.
  #4 (permalink)  
Antiguo 03/07/2013, 10:27
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Cliente Axis 1.2 para consumir WS Axis 2

Cita:
en ningún momento estoy tratando de robarme tu crédito ni nada por el estilo, pero creo que tampoco es justo que te lo tomes como algo personal, a final de cuentas todos aquí somos colaboradores y lo hacemos de manera desinteresada ¿o no es así?
Como comprenderás, el crédito que pueda tener mi anónimo nombre de usuario me da igual.

De todas las personas que he ayudado ¿cuántas crees que se dignan en volver a entrar para dar las gracias o decir que les ha funcionado? Ni el 50%.

Y cuántos crees que piden ayuda un día sí y otro también sin agradecer casi nunca las respuestas, incluso volviendo a poner la misma pregunta porque la respuesta no le ha gustado o ni se molesta en comprobar si le han contestado.

Pues más de los que me gustaría.

Por ser colaboradores desinteresados, con más razón la gente debería dar las gracias y devolver la ayuda recibida con otros, muchos de los que preguntan constantemente jamás responden las dudas de otros. Así que sí, el poco valor que algunos le dan a la ayuda que piden, me lleva a darles un toque de atención o directamente pasarlos a la lista de ignorados para no ayudarlos nunca.

A veces pagan justos por pecadores, pero sin estos desahogos creo que hace tiempo que ya hubiera dejado de ayudar.

Tu servicio antiguo es de tipo rpc, el nuevo que has hecho no. Puedes empezar por ahí.

http://www.mkyong.com/webservices/ja...world-example/
http://docs.oracle.com/cd/E23943_01/...58/migrate.htm
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 03/07/2013, 10:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Cliente Axis 1.2 para consumir WS Axis 2

Hola de nuevo Xerelo:

Muchas Gracias por las ligas... Comienzo a analizarlas inmediatamente.

Saludos.
Leo.

Etiquetas: axis, cliente, consumir, html, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:03.