consulta Casteo

5 views
Skip to first unread message

Fernando Carlos Coba

unread,
Jan 18, 2012, 11:26:41 PM1/18/12
to ues...@googlegroups.com
Buenos Días.

Profesor le envió este correo para ver si usted me puede tirar una idea de como poder solucionar el error que tengo (todo se encuentra en la imagen de abajo), el error se produce cuando tiene que hacer la convercion de un objeto ProductoBeans a uno del tipo Producto, tomando como ejemplo el ultimo de todos los integradores (unidad 4) utilizo una declaración transforms pero no me funciono, eh tratado de realizar el casteo de otras maneras como por ejemplo : List<ProductoBeans> listadoBeans = (Producto)(prodBeans.getListadoProductos()); pero no me funcionaron ningunas de las situaciones al contrario me terminan mostrando errores en el log que son inentendibles por lo menos para mi, también probé realizándolo de la siguiente manera: List<Producto> listadoBeans = prodBeans.getListadoProductos(); trabajando directamente sobre la clase de entidad Producto que es la generada en el proyecto de JPA pero tampoco me funciono, estoy seguro de que existen otras formas de hacer lo que necesito pero la verdad es que en Internet es tanta la cantidad de info que ya me termine perdiendo y ninguna me funciono. 
A continuación le pego un print de pantalla del IDE con el código y el log del error, las lineas donde se producen los errores están marcadas con un punto, también le pego una imagen del código del integrador de la unidad 4 donde usted hace uso del transforms.
En el log de la imagen muestro las causas que producen la excepcion, dicha excepcion es  A system exception occurred during an invocation on EJB ProductoWS method public java.util.List listaProductos.ProductoWS.getListaProductos()
javax.ejb.EJBException



image.png



image.png


Desde ya Muchas Gracias.

PD: Le adjunto un archivo .txt con la informacion completa del log.

Saludos.


--
Fernando Coba

image.png
image.png
errorLog.txt

Daniel

unread,
Jan 19, 2012, 7:39:27 AM1/19/12
to ues...@googlegroups.com
Fernando:
El stacktrace dice que tu ProductoSessionBeans.getListadoProductos no devuelve lo que estas pidiendo (Una lista de productos).
Nota: Para leer el stacktrace tenes q ir a donde dice "Caused by" luego ver q tipo de excepcion es (en este caso un classcastexception) y por ultimo ir a la linea de tu codigo donde se origina (linea 39). Ahi tenes que ver por que tu lista no tiene el tipo de objeto que estas intentando resolver (en este caso, es una lista que la pasas desde otra función: ProductoSessionBeans.getListadoProductos)

Podes pegar acá el código de esa función?

Saludos

2012/1/19 Fernando Carlos Coba <fernan...@gmail.com>



--
_________________

 Daniel Oliva Bianco

_________________
 

image.png
image.png

Fernando Carlos Coba

unread,
Jan 19, 2012, 9:55:32 AM1/19/12
to ues...@googlegroups.com
Profesor a continuacion le paso el codigo de las funciones que se van llamando.

Esta funcion es utilizada en la Clase ProductoSessionBeans dentro del proyecto EJB. (pDao = ProductoDaoImplementacion, es la clase donde se declaran las consultas con JPA)

public List<Producto> getListadoProductos(){
    return pDao.getProductos();
    }







getProductos es una funcion que esta declarada en el proyecto JPA (clase ProductoDaoImplementacion)y las consulta es la siguiente:

public List<Producto> getProductos() {

List<Producto> listaProductos = em.createQuery("SELECT idproducto, descripcion, precio" +
   "stock" FROM productos).getResultList();
return listaProductos;
}

PD: no utilizo ningun tipo de libreria ni de JPA ni de SPRING.

Gracias.

Saludos
--
Fernando Coba

Daniel

unread,
Jan 19, 2012, 10:21:01 AM1/19/12
to ues...@googlegroups.com
El error esta en que el resultado de un createQuery no te devuelve una lista de "Producto" si no un listado de objetos.

Yo haria algo asi (pero tambien podes hacerlo en el metodo transform de tu otra clase):

//es feo pero deberia funcionar
public List<Producto> getProductos() {
@SuppressWarnings("unchecked")
List<Producto> listaProductos = (List<Producto>)em.createQuery("SELECT idproducto, descripcion, precio" +
   "stock" FROM productos).getResultList();
return listaProductos;
}



o tambien es correcto:

public List<Producto> getProductos() {
List<Producto> listaProductos = new ArrayList<Producto>();

List lista = em.createQuery("SELECT idproducto, descripcion, precio" +
   "stock" FROM productos).getResultList();
for(Object prod : lista){
//aca se puede chequear si prod is instance of Producto
listaProductos.add((Producto) prod)
}
return listaProductos;
}


2012/1/19 Fernando Carlos Coba <fernan...@gmail.com>
List<Producto> listaProductos = em.createQuery("SELECT idproducto, descripcion, precio" +
   "stock" FROM productos).getResultList();


Fernando Carlos Coba

unread,
Jan 19, 2012, 10:28:48 AM1/19/12
to ues...@googlegroups.com
Barbaro, ya con eso me diste una idea por donde encararlo, soy intentaba hacerle la conversion dentro de la clase del EJB y no se me cruzo por la cabeza hacerlo directamente en la clase del JPA.

Gracias.

Saludos  
--
Fernando Coba

Reply all
Reply to author
Forward
0 new messages