Software Guru Conference & Expo 2014

Dudas con WS

Buenas, mi duda es la siguiente: Tengo que desarrollar un WS que reciba un XML y devuelva este mismo XML pero con valor agregado, ya me decidi por hacerlo con Spring y Apache CXF, estuve haciendo unos pequeños ejemplos y me resulto facil tomar un servicio de Spring, anotarlo y de manera automatica se genera el WSDL para el cliente, el tema es el siguiente como le indico al servicio que tiene que recibir un XML??? y como le indico que tiene que retornar un XML?? He pensado en que me envien un arreglo de caracteres o que lo suban a un repositorio y bajarlo, pero quiero saber si existe una manera generica de indicarle al servicio que me envien el XML sin importar que tecnologia o lenguaje de programacion este usando el cliente.

Recibo cualquier comentario, liga, duda, ejemplo, etc. Muchas gracias.

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.
Imagen de neko069

Example

Algo así no?

@WebService
public class ExampleWs {
    @WebMethod
    public String recibirFichero(byte[] bytes, String nombreFichero) {
        //aqui haces algo con el fichero y bueno, le pones el nombre o no se =)
        return "Fichero recibido";
    }
    @WebMethod
    public byte[] lanzarFichero(String url) {
        final byte[] bytes = //metodo para generar el fichero de bytes segun el parametro url
        return bytes;
    }
}
Imagen de javadicto

Gracias por contestar

Que onda neko, si habia pensado recibir un arreglo de byte, mi duda es si esto es trasparente para el cliente-ws en cuestion de la tecnologia utilizada, ya que el cliente puede ser php, net, etc, el arreglo de byte de java es equivalente a los arreglos de byte para cualquier otro lenguaje??

Imagen de neko069

Pues mira...

Pues mira...
Actualmente estoy trabajando con C# (no me vean así, no fué mi elección) y pensaba armar un ejemplo, peeeeero no tengo el JDK (sólo el JRE) y no puedo instalar cosas en mi máquina, así que, por el momento, lo que más pude hacer, es buscarte algo de información respecto a ése punto, encontré los siguientes temas del foro de SO.

Tema 1.
Tema 2.
Tema 3.
Tema 4.

Espero te sean las ligas de ayuda.

Imagen de javadicto

Muchas gracias

OK, al parecer el byte[] es la solución. Ahora estoy viendo como mi servicio retorne mas de un valor o afecte los parametros del servicio.

Saludos

Imagen de ezamudio

qué horror

una abominación más bajo el disfraz de web service... para qué usar web services si van a estar manejando XML a mano? la única ventaja de los web services es que puedes evitar precisamente eso, y la van a negar...

Imagen de javadicto

Que onda ezamudio, siempre

Que onda ezamudio, siempre con tus comentarios atinados (no estoy siendo sarcastico), quiero entender lo que expones. Puedo entonces recibir y enviar XMLs sin la necesidad de que sea un byte[ ]?? Puedes de favor apoyarme con una liga o ejemplo, estuve revisando la documentacion de Apache CXF pero no encuentro la forma, estuve intentando retornar un attachment mtom y ahi insertar el XML como un DataHandler.

Imagen de ezamudio

concepto

el concepto es lo que creo que está mal.

Los web services generalmente ya manejan XML. Es lo que utilizan para enviar todos sus datos. Suponte que haces un web service que recibe una cadena y recibe otra cadena. A nivel de tu código, tienes un método, String saluda(String nombre) y ya. No hay XML. SI publicas eso como WS entonces quien quiera invocarlo tendrá dos opciones: armar un montón de XML a mano para codificar ahí dentro de toda esa maraña un nombre, y enviártelo, o usar un cliente de web service como CXF, Axis o lo que sea. Y entonces tendrán un método similar al tuyo, en un proxy o stub que se encargará de tomar esa cadena que le pasan, digamos "Juan", y rodearla de toneladas de XML para que le llegue a tu servicio y se pueda decodificar y finalmente se invoque tu método saluda con "Juan" y tú devuelves un "Hola, Juan!" y eso se rodea de megabytes de XML y se devuelve y el cliente lo lee y lo parsea y le quita todo ese XML y al final obtiene la cadena que enviaste.

Si quieres enviar una estructura más compleja, se puede. Simplemente defines una clase, la decoras con anotaciones (opcionalmente) y las usas como parámetros y valores de respuesta en tus métodos que publicas como web services. Los consumidores de dichos servicios podrán crear sus proxies o stubs con la herramienta de su preferencia, o armar el XML a mano como les indique el WSDL de tu servicio.

Entonces, si ya tienes todo eso, por qué carambas quieres enviar XML como un dato? es como decir "ah no, no importa que ya los web services hagan todo eso, yo tengo que recibir no una simple cadena en mi método, quiero recibir el nombre pero rodeado de un montón de XML, así <dato><nombre>juan</nombre></dato>" ¿POR QUÉ?

Imagen de neko069

Igual los XML que va a

Igual los XML que va a enviar/recibir son para configurar otra cosa.... o no sé.

Imagen de arterzatij

Un poco de