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.
- Inicie sesión o regístrese para enviar comentarios
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:
de Spring, ó el no tan popular
de JEE > 6. Pero claro, eso necesita configuración.
Con anotaciontitis te sirve el famoso
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
@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
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
igual
Un web service lo invocas igual desde donde sea.
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.
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
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 ).
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:
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
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
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
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.
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:
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
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 )
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.
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
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.
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
@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.
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....