Servicios web - Ayuda

Saludos a la comunidad , este vez recurro a los experto para a clarar mi duda sobre este ejemplo que descargue de la red, haciéndole una modificación, que fue solo agregar un paquete llamado DAO, con una InterfaceDao y su ImplementDao ,al ejecutar el servicio y acceder la clase return interoperabilidadDao.getHelloWorld me regresa un null, y ya no se implementa la tercera clase , me faltaran anotaciones o estoy haciendo algo mal, agradezco de antemano sus comentarios esperan que haya expuesto bien mi dudad para este caso. saludos a todos.

 

 

 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

No tienes implementación de la interface

Así como indicas tu código, mas que regresar null, imagino que tienes una   (a menos que tengas una configuración de spring en XML donde inyectes   a  

Solución:
 
Con anotaciontitis te sirve el famoso   de Spring, ó el no tan popular   de JEE > 6. Pero claro, eso necesita configuración.

Perfectisimo

Gracias por tu apoyo java.daba.doo he aclarado la duda y esto esta funcionando y agregando el @Autowired de igual manera.

Saludos.

Fe de erratas

Por cierto escribí mal la anotación estándar de JEE, es  

Imagen de ezamudio

@Resource

En JEE puedes usar @Resource, no? no sabía que existiera @Inject (siempre he usado @Resource)

JEE5

ah mira, la anotación   la usaba especificamente para el lookup de los EJB. nunca se me ocurrió que funcionara para otros recursos.

Cuando salió JEE 6 (me parece que en java hispano que por cierto hay una entrada de JEE7) publicaron que alguien escribió acerca de que la nueva versión de JEE reemplazaba totalmente a Spring. Fue en esa versión cuando salió la anotación  , por eso mismo pensé que tenían diferente comportamiento   e  

Imagen de Valerio

Duda

Perdón por mi intromisión pero veo que están sobre el tema de web service, mi pregunta es ¿como invocar un web service desde otro web service y si es viable o no?, se que este no es el tema pero esa es mi duda, saludos

Imagen de ezamudio

igual

Un web service lo invocas igual desde donde sea.

Imagen de Valerio

Ejemplo

Algun ejemplo de como invocar el web service desde otro web service, lo que invocado como cliente, en este caso lo quiero invocar de servicio a servicio

En el codigo de tu webservice

En el codigo de tu webservice pon un cliente conectándose al otro webservice.

Imagen de Valerio

Ayuda

Mire, para estos casos de Web services soy nuevo apenas estoy empezando con ello, le agradecería si me pusiera un ejemplo el mas mínimo aunque sea para guiarme, Saludos

Imagen de rodrigo salado anaya

No te bloquees

No te bloquees con el pensamiento de que eres nuevo en alguna tecnología u otra, usa la lógica y vuelve a leer los comentarios de ezamudio y OscarRyz.

Saludos.

Aja, por ejemplo:Si tu

Aja, por ejemplo:

Si tu webservice se llamara Foo.bar() similar a tu hello world
 

Lo "unico" que tienes que hacer para llamarlo desde tu servicio web hello world es:
 

Y pues ya. Estas llamando a un servicio web ( Foo ) desde otro ( HelloWorld ).

Imagen de Valerio

Dudas

Gracias hice uno como el que me paso el ejemplo y si me quedo, el problema es que el web service que quiero consumir sobre una URL, es decir nada mas me lo pasaron

entonces no se como esta desarrollado y es lo que quiero invocar en otro webservice

mis web service los hago de la sig forma:

 

, y en este caso desconosco en que parte pondria la URL y todo lo demas.

XML del WS
 

saludos

Esa URL es la definicion del

Esa URL es la definicion del servicio (WSDL significa WebServices Description Language y se pronuncia aproximadamente: "wisdel" ) y te dice que operaciones tiene.

Para poderlo usar tienes que crear un cliente por ejemplo con Axis2 o wsimport.

Despues de ejecutarlos ya tendras una clase java que puedes invocar, ejemplo:

 

Imagen de Valerio

Despues de gererar los .class

Hola mi estimado , me puedes orientar , ya tengo los .class de hay que sigue o como le hago es que ya me bloquie y tengo que entregarlo para este vienes y las prisas me están confundiendo mas, Saludos

Pues ya, lo usas en tu app.

Pues ya, lo usas en tu app.

Por ejemplo
 

Imagen de Valerio

Lo ultimo

Hola que tal!!! le escribo para decirle que hice como el ejemplo que me paso y no me genera ningún error

 

El Web Service lo agregue como cliente en Net beans, mi duda es :

como le ago para pasarle los parametros del xml SEND

 
y recibir este resultado
XML RESPONSE

 

Disculpe por las molestias pero soy nuevo en este tema y apenas le estoy en entendiendo gracias a ustedes

Saludos

Imagen de Valerio

Parámetros de entrada y salida

el parametre que le envio es la version ejemplo : version ='1.1.2'

y el servicio me responde con un valor ovleano ejemplo;
res='True', de pendiendo la version

Revisa las clases que se

Revisa las clases que se generaron ( y/o el WSDL donde se describe el servicio ) ahi hay una clase que se llama parametros que supongo que es como le puedes pasar .... ehh.. pues los parametros.

Que hace si escribes:

 

Si vuelves a correr la herramienta con la opcion   que deja el código java generado, quizá así sea mas fácil explorar lo que puedes usar.

Una confusión común es esperar manejar XML cuando se usan webservices que usan SOAP. Cuando se genera el cliente lo que usas es Java directamente; el cliente transforma la peticion en XML y la parsea por lo que tu ya no recibes un XML sino un valor en la variable de tipo  

Imagen de Valerio

Gracias

gracias por todo mi estimado , con su ayuda he podido consumir un web servicie

 

Mi duda es como convierto este programa en un web service, lo que me pidieron es hacer un web service universal que dentro de ese web service consumir varios web service, y eso lo que no se como

Saludos

Antes un par de

Antes un par de recomendaciones:

Cuando agregues código en el foro utiliza el tag <code> para darle formato.

También, en java la convención es utilizar la llave que abre en la misma linea

 

Regresando a tu pregunta original, lo primero que tienes que hacer es entender que es lo que tienes que hacer (por absurdo que parezca). Aunque se puede interpretar de varias maneras eso de "Crear un webservice universal que consuma varios webservices" lo mejor sera que aclares con quien te lo pidió a que se refiere exactamente. Ejemplos de uso, como funcionaria? Cuales serian las entradas y cuales las salidas? Que es lo que se necesita y para que?

Puede ser que ( a mi me paso mucho y honestamente me sigue pasando ) por no querer demostrar que no sabes algo aceptas las cosas aunque no tienes idea de lo que se esta pidiendo. Cuando eso pasa, ni modo, a preguntar y preguntar hasta que quede claro. No me refiero a la implementacion, esa se soluciona con código e intentando varias alternativas, me refiero al requerimiento funcional, a QUE es lo que se necesita y para que se necesita.

Lo que mencionas no tiene mucho sentido, al menos asi nada mas. Puede ser que requieras algo tan sencillo como un proxy, o tengas que adaptar algo como un service bus, o un webservice dinámico o alguna otra cosa.

Así que ve y pregunta exactamente a que se refieren con eso del un webservice universal y ejemplos de uso. No es que pidas un documento de requerimientos funcionales de 60 hojas firmado por el arquitecto de blabalba pero si es importante que tengas una descripción de lo que se requiere y especialmente que TU lo entiendas.

Y cuando lo sepas nos platicas porque suena interesante y es intrigante.

Imagen de Valerio

Hola que tal, mire de acuerdo

Hola que tal, mire de acuerdo a su recomendación le pregunte a la persona que me pidió este servicio, lo que el me dijo que tienen dos proveedores de recargas electrónicas el cual ellos les enviaron cada quien su servicio web para que lo consuman y hagan las recargas, ellos lo consumen desde una aplicación de iOs uno de los dos servicios web disponibles, el problema que ellos tienen es que aveces unos de los servicios se cae y no se pueden hacer las recargas, entonces lo que ellos me piden hacer es un web services que los consuma esos dos que ya tienen y posiblemente contraten otro proveedor para otros servicios .

Dicen que quieren hacer una palanca , a la hora de que se caiga un servicio activar el otro que esta disponible, pero eso es hacerlo dentro de el web service universal , ya que no quieren agregar mas web services que contraten porque cada ves que agregan uno tienen que liberar otra versión y eso lo que quieren estar evitando, liberando versión cada vez que se contrate otro proveedor , es por eso que se pretende crear un web service universal que consuma los servicios que estén consumiendo ellos y

por medio de una tabla de la base de datos ellos deciden que servicio activar o no

Ok, a ver si entendí: Una

Ok, a ver si entendí: Una aplicación iOS se conecta a un WS de un proveedor de recargas. Lo que se necesita es poder incorporar a otro u otros proveedores sin tener que cambiar el cliente iOS cada vez.

Ahora si ya tiene sentido.

Entonces, la solución consiste en que la app iOS se conecte al nuevo WS y este sirva de adaptador ( o palanca ) para conectarse a algún otro.

Pues lo mismo.

Un webservice expone un programa usando un protocolo basado en XML. Tu programa hace lo que tu quieras que haga y exponerlo como webservice es ponerle "elementos" o "cosas" que haga que funcione como WS y otros cliente pueden consumirlo ( llamarlo, invocarlo, ejecutarlo)

Para dar mas claridad aqui van los conceptos de WS, WS-Client y finalmente un ws que tambien es client.

Webservice

Por ejemplo para un hola mundo, tu programa seria asi:

 

Ese es un programa en Java, ok? Nada mas sencillo como eso.

Si decidieras exponerlo como ws, podrías usar JAX-WS ( Java API for XML Web Services ) y la herramienta wsgen que viene con el SDK de Java, también se pueden usar otras herramientas, como Axis2 pero ahorita wsgen es la mas fácil de explicar.

Se necesitaría hacer algo como esto:
 

y el resultado lo puedes poner en un contenedor web como tomcat.

La d-e-s-c-r-i-p-c-i-ó-n del servicio web esta en un archivo llamado WSDL ( pronunciado como güisdol ). WSDL por sus siglas en ingles Web Service Definition Language significa: lenguaje de definición de servicios web.

El cliente ( webservice client )

Para consumirlo hay que generar un "cliente".

Como el servicio definido en el WSDL esta en formato XML, que es un formato neutral ( no es propio de ningún lenguaje de programación en especifico ) este puede ser llamado en cualquier otro lenguaje de programación. Por ejemplo Objective-C ( usado en iOS) , C#, PHP, Ruby o cualquier otro incluyendo Java

Para generar el cliente en Java puedes usar la herramienta wsgen que al final te deja archivos .class que se pueden utilizar desde tu programa Java.

Digamos que quieres general el cliente para llamar al webservice para convertir temperatura descrito en:

Despues de ejecutar ws import tendrías las clases para escribir una llamada como esta:

 

Webservice que ademas es client

Entonces, si un webservice no es otra cosa que un programa expuesto como WS y ese programa puede ser a su vez otro cliente para llamar a uno desde otro tendrías que hacer algo como esto:
 

Y listo!!!! tu webservice puede llamar a otros.

Conclusion

Para llamar a algún otro servicio, tienes que generar el cliente para ese otro e incluirlo en el código:
 

Si quisieras llamar a un tercer proveedor habría que tomar su WSDL generar el cliente e incluirlo en el código con otro if o con algún otro mecanismo. Esto requiere que la aplicación se reinicie lo cual debería de tomar solo unos minutos, pero el cliente iOS no se entera.

Para hacerlo super dinámico y que no haya downtime habría que forzar a que todos los proveedores usaran el mismo wsdl con los mismos métodos y los mismos tipos de datos y lo único que cambiaría seria la maquina a la cual conectarse y permitir modificar en el servidor ese valor, ya sea con una base de datos o con un archivo ( o una consola de administrador donde se pueda tomar ) O mejor aun, de forma automática, si un servidor no funciona intentar con otro.

Un tercer mecanismo es hacer que el ws pueda cargar clases dinamicamente ( hacer plugins ), que estas clases implementen una interfaz e internamente llamen al servicio web del proveedor. Así cuando se agregue un nuevo proveedor se crea un nuevo plugin, se agrega al servicio y listo.

Nada de esto es complicado ( al menos no a grandes rasgos ) pero aun asi yo te recomendaría dejarlo con algo tan simple como un if/else y reiniciar el servidor. Creo que hay cosas mas importantes como ponerle seguridad y evitar que cualquier persona desde cualquier lugar pueda abonarle saldo a un teléfono con tan solo saber que servicio web llamar.

Y pues ya.

Espero que esto te aclare mucho mas tu panorama. Se que es difícil darse cuenta de muchos de estos conceptos porque la información en la web asume que ya lo sabes y después de un rato lo sabrás. Creo que lo mas importante es lo que dice Rodrigo, quitarse la actitud de "soy noefito" y tratar de entender lo que va saliendo. Finalmente lo que hoy sabes manantial puede caer en desuso y tienes que aprender nuevas cosas que aun no se han inventado.

Refs:

Imagen de Valerio

Que tal mi estimado, me esta

Que tal mi estimado, me esta marcando error en la importaciones

import org.tempuri.TempConvertSoap;
import org.tempuri.TempConvert;

algún framework en especial hay que agregar o librería ?

las classes que acabas de

las classes que acabas de generar

Imagen de Valerio

Perdón en donde me esta

Perdón en donde me esta generando el error es en

TempConvert.getTempConvertSoap();

me marca este error

Cannot make a static reference to the non-static method getTempConvertSoap() from the type TempConvert

cuando hago esto:

TempConvertSoap ws = TempConvert.getTempConvertSoap();
String celsius = ws.fahrenheitToCelsius("100"); // :-o

Tienes que generar una

Tienes que generar una instancia de la clase. Revisa las clases generados ( son como 4 ) y busca como debes de usarlo.

Update;
 

De nuevo, es más importante que entiendas estos conceptos a que tengas un codigo que haga algo ( porque no sabras que es lo que está haciendo )

Imagen de Valerio

Este es mi servicio import

Este es mi servicio

import java.rmi.RemoteException;

import javax.jws.WebService;
import javax.jws.WebMethod;
// magic here
import org.tempuri.TempConvertSoapImpl;

@WebService
public class ConsumeGrados {

@WebMethod
public String sayHello( String to ) throws RemoteException {
// .. and here

TempConvertSoapImpl ws =new TempConvertSoapImpl();

String celsius = ws.fahrenheitToCelsius("100"); // :-o
ws .celsiusToFahrenheit(celsius);
return "Hola " + to + " did you know that 100 fahrenheit are in celsious: " + celsius;
}

}

ya lo deploye y no me genero ningun error

le envie este parametro
2

y lo que me retorno fue esto

Hola 2 did you know that 100 fahrenheit are in celsious: null

no si algo esta fallado porque me trae un valor NULL

Nota: las clases que se generaron son:

TempConvert.class
TempConvertLocator.class
TempConvertSoap.class
TempConvertSoapImpl.class
TempConvertSoapSkeleton.class
TempConvertSoapStub.class

Tu generador es distinto.

Tu generador es distinto. Revisa los métodos e investiga como crear una instancia correctamente, puede ser que se cree con u metodo de otra clase.

Imagen de Valerio

Que tal... listo ya logre

Que tal... listo ya logre consumirlo, lo único que hice es cambiarme de eclipse a netbeans y funcionó a la perfección

Estoy haciendo una prueba con un web service mio desarrollado en java y me genera diferentes clases

no se si varían a la hora de consumirlo por ser desarrollados en plataformas diferentes

Imagen de Valerio

Hola, Solo me queda agradecer

Hola, Solo me queda agradecer por el tiempo dedicado a mis dudas, gracias a eso pude consumir servicios web uno de java y el otro en .Net
en uno solo

Saludos

Yey.. que bueno que te sirvió

Yey.. que bueno que te sirvió y que bueno que regresas a avisar.

Varias veces ezamudio y yo hemos comentado que mucha gente viene, pregunta y no la volvemos a ver, lo cual a veces es descorazonador ( bueno a mí, porque el chochos creo que tiene atole en las venas ) y nos ( bueno ME ) hace pensar que esto no sirve de mucho. Pero pues como como no tengo tanto nivel como otros compañeros que dicen que esto de ayudar con cosas super básicas es una pérdida de tiempo, pues lo sigo haciendo. Además sirve que aprendo yo también porque yo jamás había usado wsimport ( jojo y Valerio se cae de la silla ), había usado muchos otros, pero el concepto es e-x-a-c-t-a-m-e-n-t-e el mismo.

Imagen de Valerio

Si andaba confundido de echo

Si andaba confundido de echo pero gracias a usted pude resolverlo.......

pasando a otro tema , la empresa me paso otro sevicio

a la hora de generar el cliente no me deja me dice:

Reason: undefined element declaration s:schema

le dejo el servicio para ver si usted puede probar generando un cliente o si le marca el mismo error que a mi , al no poder generar el cliente

Saludos

Imagen de neko069

@Valerio

@Valerio por favor no juegues con mis sentimientos, intenté hacer la prueba para crear el cliente en base al url que pegaste y no hay ningún WSDL, exijo mi dinero de regreso.

Imagen de Valerio

Si es la URL que pegue,

Si es la URL que pegue, mire

si lo pega en el explorador vera como lo despliega el XML

pero no puedo generar el cliente en netbeans me marca un error

Saludos....