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

devolver listado de objetos en servicio web

Estas en el tema de devolver listado de objetos en servicio web en el foro de Java en Foros del Web. Hola, Tengo que implementar un programa de reserva de habitaciones en un hotel mediante servicio web y tengo una duda. ¿Puedo devolver una lista de ...
  #1 (permalink)  
Antiguo 25/10/2011, 04:08
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 18 años, 1 mes
Puntos: 1
devolver listado de objetos en servicio web

Hola,

Tengo que implementar un programa de reserva de habitaciones en un hotel mediante servicio web y tengo una duda. ¿Puedo devolver una lista de objetos? He probado el servicio web devolviendo un String y me funciona pero lo he editado para que me devuelva un list<habitaciones> y al testear el servicio, no me muestra nada.
La operacion se llama mostrarHabitaciones y lo que quería era que devuelva un listado con todas las habitaciones de la base de datos.
Código JAVA:
Ver original
  1. @WebMethod(operationName = "MostrarHabitaciones")
  2.     public List<Habitaciones> MostrarHabitaciones() {
  3.         //TODO write your implementation code here:
  4.         List<Habitacion> listado=null;
  5.  
  6.         try{
  7.         ResultSet rs = st.executeQuery("select * from habitaciones");
  8.         Habitacion h;
  9.        
  10.             while ( rs.next() )
  11.             {
  12.                 h= new Habitacion();
  13.                 h.numero=rs.getInt(2);
  14.                 h.capacidad=rs.getInt(3);
  15.                 h.precio=rs.getInt(4);
  16.                 listado.add(h);
  17.             }
  18.         }catch(Exception e){ System.out.println("Error al realizar consulta"); }
  19.         return listado;
  20.     }
Luego tengo una clase que se llama Habitacion con todos los getters y los setters. Se que la consulta a la base de datos va bien, porque cuando devolvia un string con el numero de las habitaciones, me devolvía bien. ¿Es posible hacer algo de esto? O si no, ¿Cómo podría devolver las habitaciones con sus características de forma que lo admita?

Gracias.
  #2 (permalink)  
Antiguo 25/10/2011, 09:16
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: devolver listado de objetos en servicio web

Muevo tu tema al Foro de Java.

Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 25/10/2011, 15:31
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: devolver listado de objetos en servicio web

Pues eso va a depender de cómo hayas creado tu cliente y el webservice

http://www.devdaily.com/blog/post/ja...ead-array-list
__________________
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.
  #4 (permalink)  
Antiguo 26/10/2011, 01:22
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: devolver listado de objetos en servicio web

Hasta qué punto depende?
Lo único que he hecho ha sido crear una web application y dentro crear un webService con netbeans. Es tal y como lo he hecho en otros ejercicios, y me funciona si lo que devuelvo es un String...
El código del sevicio es:

Código JAVA:
Ver original
  1. package ws;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.ResultSet;
  6.  
  7. import java.sql.SQLException;
  8. import java.sql.Statement;
  9. import java.util.List;
  10. import javax.jws.WebMethod;
  11. import javax.jws.WebService;
  12.  
  13.  
  14. @WebService()
  15. public class GestionHotel {
  16.     private Statement st;
  17.     private Connection connection;
  18.     public GestionHotel() throws ClassNotFoundException, SQLException{
  19.        try{
  20.         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  21.  
  22.         connection=DriverManager.getConnection("jdbc:odbc:hotel");
  23.         st=connection.createStatement();
  24.         } catch(Exception e){ System.out.println("Error al cargar el Driver"); }
  25.     }
  26.        /**
  27.      * Web service operation
  28.      */
  29.     @WebMethod(operationName = "MostrarHabitaciones")
  30.     public List<Habitacion> MostrarHabitaciones() {
  31.         //TODO write your implementation code here:
  32.         List<Habitacion> listado=null;
  33.         Habitacion h;
  34.         try{
  35.         ResultSet rs = st.executeQuery("select * from habitaciones LIMIT 0,1");
  36.          
  37.             while ( rs.next() )
  38.             {
  39.                 h= new Habitacion();
  40.                 h.setNumero(rs.getInt(2));
  41.                 h.setCapacidad(rs.getInt(3));
  42.                 h.setPrecio(rs.getInt(4));
  43.                 listado.add(h);
  44.             }
  45.        
  46.         }catch(Exception e){ System.out.println("Error al realizar consulta"); }
  47.        
  48.         return listado;
  49.     }
  50.        
  51.  
  52. }

y mi clase de Habitación es la siguiente:
Código java:
Ver original
  1. public class Habitacion {
  2.     public int numero;
  3.     public int precio;
  4.     public int capacidad;
  5.    
  6.     public Habitacion(){
  7.        super();
  8.     }
  9.  
  10.     public int getCapacidad() {
  11.         return capacidad;
  12.     }
  13.  
  14.     public void setCapacidad(int capacidad) {
  15.         this.capacidad = capacidad;
  16.     }
  17.  
  18.     public int getNumero() {
  19.         return numero;
  20.     }
  21.  
  22.     public void setNumero(int numero) {
  23.         this.numero = numero;
  24.     }
  25.  
  26.     public int getPrecio() {
  27.         return precio;
  28.     }
  29.  
  30.     public void setPrecio(int precio) {
  31.         this.precio = precio;
  32.     }
  33.  
  34.  
  35. }

De momento no he implementado el cliente, hasta que no vea que sale bien el resultado de Test Web Service. De todas formas lo que haré será otro nuevo proyecto, New WebServiceClient y ponerle la ruta del wsdl de este servicio para poder agregarlo... Hay algo que esté mal? Lo haríais de otra forma?
Como tengo que usar el servicio web para gestionar el tema de la reserva de habitaciones, se me había ocurrido que una de las operaciones sea mostrar habitaciones y luego vendría la de realizar reserva... a lo mejor hay otras formas de hacerlo.
  #5 (permalink)  
Antiguo 26/10/2011, 02:40
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: devolver listado de objetos en servicio web

Me he dado cuenta de que si devuelvo int, con el size() del listado, lo hace correcto, es decir intro duce bien el número de habitaciones que hay en la lista, pero en cambio si devuelvo una lista: List<Habitaciones> no me llega a funcionar el deploy...
Código java:
Ver original
  1. @WebMethod(operationName = "MostrarHabitaciones")
  2.     public List<Habitacion> MostrarHabitaciones() { //si pongo int en el resultado y en el return hago listado.size(), me muestra correctamente el número de habitaciones
  3.        
  4.         List<Habitacion> listado=new ArrayList<Habitacion>();
  5.         Habitacion h=null;        
  6.         try{
  7.         ResultSet rs = st.executeQuery("select * from habitaciones WHERE 1");
  8.        
  9.             while ( rs.next() )
  10.             {
  11.                 h= new Habitacion();
  12.                 h.setNumero(rs.getInt(2));
  13.                 h.setCapacidad(rs.getInt(3));
  14.                 h.setPrecio(rs.getInt(4));
  15.                 listado.add(h);
  16.             }
  17.            
  18.         }catch(Exception e){ System.out.println("Error al realizar consulta"); }
  19.        
  20.         return listado;
  21.     }

Alguien sabe por qué puede pasar?

Última edición por leeann; 26/10/2011 a las 04:26
  #6 (permalink)  
Antiguo 28/10/2011, 04:33
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: devolver listado de objetos en servicio web

el error que me muestra es este:
GRAVE: Exception while loading the app
GRAVE: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: Servlet web service endpoint '' failure

os suena?
  #7 (permalink)  
Antiguo 28/10/2011, 06:10
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: devolver listado de objetos en servicio web

Hola:

Depende un poco de la herramienta que estés usando. Yo suelo devolver un array y con jax-ws metro funciona bien.

Código java:
Ver original
  1. @WebMethod(operationName = "MostrarHabitaciones")
  2.     public Habitacion[] MostrarHabitaciones()  {
  3.            .....

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #8 (permalink)  
Antiguo 02/11/2011, 06:15
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: devolver listado de objetos en servicio web

He probado a devolver el array Habitacion[] pero lo mismo. El problema es que no llego ni a probar el servicio web. Tengo las 2 clases en un proyecto de netbeans y mi idea era crear el .class para luego meterlas dentro de la carpeta de axis. Tengo un servidor tomcat con axis2 funcionando.
El problema es que no me llega ni a hacer deploy, cuando le doy me pone:

The module has not been deployed.
at org.netbeans.modules.j2ee.deployment.devmodules.ap i.Deployment.deploy(Deployment.java:187)
at org.netbeans.modules.j2ee.ant.Deploy.execute(Deplo y.java:106)
at org.apache.tools.ant.UnknownElement.execute(Unknow nElement.java:291)
at sun.reflect.GeneratedMethodAccessor122.invoke(Unkn own Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tools.ant.dispatch.DispatchUtils.execut e(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:39 0)
at org.apache.tools.ant.Target.performTasks(Target.ja va:411)
at org.apache.tools.ant.Project.executeSortedTargets( Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project .java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.execut eTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Projec t.java:1251)
at org.apache.tools.ant.module.bridge.impl.BridgeImpl .run(BridgeImpl.java:284)
at org.apache.tools.ant.module.run.TargetExecutor.run (TargetExecutor.java:539)
at org.netbeans.core.execution.RunClassThread.run(Run ClassThread.java:154)
BUILD FAILED (total time: 8 seconds)


Y ahi me quedo... si en cambio con el mismo codigo cambio el metodo para que me devuelva un string, me lo hace bien. A lo mejor es que no se hace asi?
He estado siguiendo este tutorial: http://www.adictosaltrabajo.com/tuto...is2JavaBean#01
  #9 (permalink)  
Antiguo 02/11/2011, 09:45
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 1 mes
Puntos: 78
Respuesta: devolver listado de objetos en servicio web

Has probado de hacer.... mientras estás metiendo los datos en el objeto Habitacion, justo en ese bucle, hacer un System.out.println para ver por consola si realmente estás recogiendo los datos del ResultSet?

Y si los recoges, antes de que finalice el bucle vuelve a hacer lo mismo en el objeto Habitacion a ver si realmente están dentro esos datos.

Suerte.

Un saludo.
  #10 (permalink)  
Antiguo 02/11/2011, 09:59
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: devolver listado de objetos en servicio web

sé que entra en el bucle, porque si lo que devuelvo es un string y hago un return de uno de los campos de la primera habitación de la lista por ejemplo, me sale bien. el unico problema es al devolver un array o un list, que me da error desde netbeans y no puedo ni siquiera probarlo en el navegador...
El error que me muestra es el de mensaje anterior en rojo.
  #11 (permalink)  
Antiguo 02/11/2011, 13:19
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: devolver listado de objetos en servicio web

¿Habitacion tiene algún atributo raro? ¿o hace referencia a otra Habitacion?. Prueba con una clase que tenga un par de atributos simples (String, Integer, ...)

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #12 (permalink)  
Antiguo 02/11/2011, 14:23
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: devolver listado de objetos en servicio web

no la clase habitación la muestro en un mensaje anterior, la vuelvo a poner:

Código java:
Ver original
  1. public class Habitacion {
  2.     public int numero;
  3.     public int precio;
  4.     public int capacidad;
  5.    
  6.     public Habitacion(){
  7.        super();
  8.     }
  9.  
  10.     public int getCapacidad() {
  11.         return capacidad;
  12.     }
  13.  
  14.     public void setCapacidad(int capacidad) {
  15.         this.capacidad = capacidad;
  16.     }
  17.  
  18.     public int getNumero() {
  19.         return numero;
  20.     }
  21.  
  22.     public void setNumero(int numero) {
  23.         this.numero = numero;
  24.     }
  25.  
  26.     public int getPrecio() {
  27.         return precio;
  28.     }
  29.  
  30.     public void setPrecio(int precio) {
  31.         this.precio = precio;
  32.     }
  33.  
  34.  
  35. }

son variables sencillitas!
  #13 (permalink)  
Antiguo 04/11/2011, 02:25
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: devolver listado de objetos en servicio web

Por si os interesa, me han comentado que es mejor utilizar xstream y pasar las clases java a xml, enviar el xml y en el cliente hacer lo contrario...
No sé si alguien lo habrá hecho y le habrá funcionado, yo voy a probar a ver y os comento...
  #14 (permalink)  
Antiguo 17/10/2013, 16:15
 
Fecha de Ingreso: septiembre-2013
Ubicación: Mexico D.F.
Mensajes: 5
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: devolver listado de objetos en servicio web

Hola oigan yo si logro que me regrese el listado desde el tester desde donde genero el servicio, yo si uso JAX-SW mi problema es que al hacer el cliente no me regresa la lista, me podrian ayudar por favor, y se que si funciona por que cuando hago el cliente aun servicio que me regresa solo un dato si me funciona muy bien, y otra cosa rar cuando el cliente si me lo dectecta como list pero no me regresa nada solo un
[]...
nadamas, tengo que hacer algo mas?????

Etiquetas: devolver, listado, objetos, programa, servicio
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 12:43.