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

[SOLUCIONADO] Guardar imagen en base64 con restful

Estas en el tema de Guardar imagen en base64 con restful en el foro de Java en Foros del Web. Buenas, verán tengo un pequeño inconveniente al querer guardar una imagen con el siguiente método: Código: @POST @Path("imagenGuardar") @Consumes({("application/json")}) @Produces("text/plain") public int guarda(Imagenes entity) { ...
  #1 (permalink)  
Antiguo 08/01/2016, 11:20
LDN
 
Fecha de Ingreso: diciembre-2015
Mensajes: 22
Antigüedad: 8 años, 4 meses
Puntos: 0
Mensaje Guardar imagen en base64 con restful

Buenas, verán tengo un pequeño inconveniente al querer guardar una imagen con el siguiente método:

Código:
@POST
    @Path("imagenGuardar")
    @Consumes({("application/json")})
    @Produces("text/plain")
    public int guarda(Imagenes entity) {
        em.persist(entity);
        em.flush();
        return entity.getIdImagenes();
    }
Al probar el web service, inserto lo siguiente:

Código:
[{"descripcion":"Imagen trasera","idActivo":84,"idImagenes":8,"imagen":"R0lGODlhEAAQAPfAAAgAAPgAAP8JCQhUAAZBAABgmAAGCg6ZAI/W//X79Pf89wAQGju3/+/3+z9wjQCc+GbG/+/x8uPz4Q6YAAAGAAAaKgCR5gpoAACH1u/5//YAABehCSanGEWzOePw4e/z9SgAAABWiP+Hh/9eXpXLjwBMebDAr+/2+gMkAKgAAGkAAP8uLvH5/5CZj+zx7Pz+/P8eHnkAAIgAAOT1/5gAABGn//+cnC9WbO/y9Njv1vz+/zmvLPT7/wAtSEkAAMnr/4+eprgAAAB1uu/1+LPdr5Cej4+aoAA4Wuf2/wCS5//Pz8joxP/T04/H6I/H583rygZAAAAkOkJhP+cAAK3eqP9zc/L68d/y3Yp/fwCI10u2QP8zM+P04f9ISP+ysq+zr0eUP/L68gleADRdLwIaAAARHAU2AGjCXkBKPxkAAIGXfw2PAAoAAAU3AFkAAI+epy9EUQAHAI/M74+ntgEQAI++2QAbK+Dy3rrl/wyl/zkAAPR/f+Tw4y+NxIXOfk++/wppAHDFZ//c3ABCai+f4ACS6DeELwB+x//Hx4S3f/j8+G7J/0qsPwBqqENiP//x8QyGAEV4P93x2ssPD3vKcwdLAAyFAACI2EeVP7LQrwt7AOf15tgAANoPDwldAIKgf4Suf6jcome0X8gAAGWbX3HFaN7x3O/y7yAkH9HszghTAC9+rMDlvOvx6glfAJTGjy9FUcLfvwt8AA2OAJTTjS+e3wpyAEV/P+34/1O5SNzw2Y/Shw2QAMXnwf8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAMAALAAAAAAQABAAAAjGAIEJFDjhgMEDEwYqBLZmDZFfEH8RabjQEgkJgThs2MAhkAQSlgZqepVjB4eTKHfkeKVJ4IVNWjrIhCizg5ZNF4BdyEQrl89cEH/mopXpgphfpc4oPQNx6ZlSv8QM+EWJUsSrVK0OqPRr1y6sEb3+qkTgV6hQByEePPuLQBsTqYjIfShxbioTbYBJUfCk7xOIfp8okCIQRREFd65cMaj4joIiKAaSafEiQRgrVsIkeNGCzEI6aL5c/YKGzsKBcSigokAhzsKAADs="}]
Pero al ejecutar me lanza la siguiente exception:

Código:
exception 
javax.servlet.ServletException: Exception [EclipseLink-6065] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
Exception Description: Cannot add the object [activo.entities.Imagenes[ idImagenes=8 ]], of class [class activo.entities.Imagenes], to container [class activo.entities.Imagenes].
Internal Exception: java.lang.ClassCastException: activo.entities.Imagenes cannot be cast to java.util.Collection


root cause 
Exception [EclipseLink-6065] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
Exception Description: Cannot add the object [activo.entities.Imagenes[ idImagenes=8 ]], of class [class activo.entities.Imagenes], to container [class activo.entities.Imagenes].
Internal Exception: java.lang.ClassCastException: activo.entities.Imagenes cannot be cast to java.util.Collection


root cause 
java.lang.ClassCastException: activo.entities.Imagenes cannot be cast to java.util.Collection


note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1 logs.
No se muy bien a lo que se refiera lo de java.util.Collection. No se si es necesario hacer algo diferente al guardar la imagen
  #2 (permalink)  
Antiguo 08/01/2016, 15:47
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Guardar imagen en base64 con restful

¿Por qué pones corchetes?

Los corchetes indican array, y en tu método estás esperando un único objeto.

Ojo, el formato de JSON que tienes que usar dependerá del Provider que estés usando y de la configuración que hayas elegido.

https://jersey.java.net/documentatio...on.html#d4e947

En concreto puedes tener problemas con cómo se interpretan los arrays.
__________________
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.
  #3 (permalink)  
Antiguo 12/01/2016, 12:39
LDN
 
Fecha de Ingreso: diciembre-2015
Mensajes: 22
Antigüedad: 8 años, 4 meses
Puntos: 0
Mensaje Respuesta: Guardar imagen en base64 con restful

Ya e quitado los corchetes, y me a marcado lo siguiente:

Código:
type Exception report

messageInternal Server Error

descriptionThe server encountered an internal error that prevented it from fulfilling this request.

exception 
javax.servlet.ServletException: javax.ejb.EJBException: Transaction aborted


root cause 
javax.ejb.EJBException: Transaction aborted


root cause 
javax.transaction.RollbackException: Transaction marked for rollback.


root cause 
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'ACTIVO' in 'field list'
Error Code: 1054
Call: INSERT INTO imagenes (ACTIVO, DESCRIPCION, IMAGEN, ID_ACTIVO) VALUES (?, ?, ?, ?)
	bind => [4 parameters bound]
Query: InsertObjectQuery(activo.entities.Imagenes[ idImagenes=0 ])


root cause 
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'ACTIVO' in 'field list'
Error Code: 1054
Call: INSERT INTO imagenes (ACTIVO, DESCRIPCION, IMAGEN, ID_ACTIVO) VALUES (?, ?, ?, ?)
	bind => [4 parameters bound]
Query: InsertObjectQuery(activo.entities.Imagenes[ idImagenes=0 ])


root cause 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'ACTIVO' in 'field list'
El uso de los corchetes lo hago en otros web service y me va perfecto, tengo el problema en saber como subir las o la imagen, en específico el formato que debe llevar.
  #4 (permalink)  
Antiguo 12/01/2016, 14:24
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Guardar imagen en base64 con restful

Buenas,

Lo que indica Xerelo es correcto. Los corchetes solo se deben usar si el valor a enviar es una coleccion (una lista o array, por ejemplo). Si en otros web services funciona sera porque estos esperan una coleccion y no un objecto simple.

Respecto al error, este no puede ser mas claro:
Código Exception:
Ver original
  1. Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'ACTIVO' in 'field list'
  2. Error Code: 1054
  3. Call: INSERT INTO imagenes (ACTIVO, DESCRIPCION, IMAGEN, ID_ACTIVO) VALUES (?, ?, ?, ?)
  4.     bind => [4 parameters bound]

La columna ACTIVO no existe en la tabla imagenes.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 14/01/2016, 22:00
LDN
 
Fecha de Ingreso: diciembre-2015
Mensajes: 22
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Guardar imagen en base64 con restful

Les comento, pude resolver mi problema, el problema estaba en dos partes, como bien me lo dijeron debo enviar la imagen sin corchetes, de la siguiente manera:

Código:
{"descripcion":"Imagen trasera","idActivo":{"idActivo":"84"},"idImagenes":0,"imagen":"R0lGODlhEAAQAPfAAAgAAPgAAP8JCQhUAAZBAABgmAAGCg6ZAI/W//X79Pf89wAQGju3/+/3+z9wjQCc+GbG/+/x8uPz4Q6YAAAGAAAaKgCR5gpoAACH1u/5//YAABehCSanGEWzOePw4e/z9SgAAABWiP+Hh/9eXpXLjwBMebDAr+/2+gMkAKgAAGkAAP8uLvH5/5CZj+zx7Pz+/P8eHnkAAIgAAOT1/5gAABGn//+cnC9WbO/y9Njv1vz+/zmvLPT7/wAtSEkAAMnr/4+eprgAAAB1uu/1+LPdr5Cej4+aoAA4Wuf2/wCS5//Pz8joxP/T04/H6I/H583rygZAAAAkOkJhP+cAAK3eqP9zc/L68d/y3Yp/fwCI10u2QP8zM+P04f9ISP+ysq+zr0eUP/L68gleADRdLwIaAAARHAU2AGjCXkBKPxkAAIGXfw2PAAoAAAU3AFkAAI+epy9EUQAHAI/M74+ntgEQAI++2QAbK+Dy3rrl/wyl/zkAAPR/f+Tw4y+NxIXOfk++/wppAHDFZ//c3ABCai+f4ACS6DeELwB+x//Hx4S3f/j8+G7J/0qsPwBqqENiP//x8QyGAEV4P93x2ssPD3vKcwdLAAyFAACI2EeVP7LQrwt7AOf15tgAANoPDwldAIKgf4Suf6jcome0X8gAAGWbX3HFaN7x3O/y7yAkH9HszghTAC9+rMDlvOvx6glfAJTGjy9FUcLfvwt8AA2OAJTTjS+e3wpyAEV/P+34/1O5SNzw2Y/Shw2QAMXnwf8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAMAALAAAAAAQABAAAAjGAIEJFDjhgMEDEwYqBLZmDZFfEH8RabjQEgkJgThs2MAhkAQSlgZqepVjB4eTKHfkeKVJ4IVNWjrIhCizg5ZNF4BdyEQrl89cEH/mopXpgphfpc4oPQNx6ZlSv8QM+EWJUsSrVK0OqPRr1y6sEb3+qkTgV6hQByEePPuLQBsTqYjIfShxbioTbYBJUfCk7xOIfp8okCIQRREFd65cMaj4joIiKAaSafEiQRgrVsIkeNGCzEI6aL5c/YKGzsKBcSigokAhzsKAADs="}
El otro problema era del GlassFish, no se por qué, pero el GlassFish que trae por defecto netbeans tiende a fallar mucho, lo que hice es quitarlo, eliminar todo lo que tenía de él, desde archivos del programa hasta archivos temporales.

Después solo copie y pegue mi antiguo método, les dejo aquí por si alguien lo quiere.
  #6 (permalink)  
Antiguo 14/01/2016, 22:00
LDN
 
Fecha de Ingreso: diciembre-2015
Mensajes: 22
Antigüedad: 8 años, 4 meses
Puntos: 0
Mensaje Respuesta: Guardar imagen en base64 con restful

Código:
 @POST
    @Path("guardarImagenes")
    @Consumes({"application/json"})
    @Produces("text/plain")
    public int guardarImagenes(Imagenes entity) {
        if(entity.getIdActivo().getIdActivo()!=0){
            em.persist(entity);
            return 1;
        } else {
            return 0;
        }
    }

Etiquetas: mysql, rest, web-services
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 21:03.