es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Informe jasper con caracteres Unicode que arroja una excepción de argumento ilegal

Tengo una aplicación web desarrollada en el marco de trabajo Grails. En ella, hay algunos informes desarrollados utilizando Jasper Report. Los informes se llaman desde el controlador de Grails utilizando el complemento Jasper. Los informes se generaban desde la aplicación web sin problemas.

Hace algunos días, implementé SSL en mi servidor Tomcat en el que se ejecuta esta aplicación. Después de implementar SSL, los informes que contienen caracteres Unicode lanzan el siguiente error:

Encontré lo siguiente en el registro del servidor relacionado con esto:

2021-12-24 13:34:24,864 [https-openssl-apr-443-exec-1147] ERROR
errors.GrailsExceptionResolver – Se produjo una IllegalArgumentException al procesar la solicitud: [POST] /reportCenter/callReport El carácter Unicode [?] en el punto de código [2,459] no se puede codificar, ya que está fuera del rango permitido de 0 a 255. El seguimiento de la pila es el siguiente:
java.lang.IllegalArgumentException: El carácter Unicode [?] en el punto de código [2,459] no se puede codificar, ya que está fuera del rango permitido de 0 a 255.

Sin embargo, los demás informes que no contienen caracteres Unicode funcionan correctamente. He buscado en Google el problema durante horas, pero sin suerte. ¿Alguien puede ayudar, por favor?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que después de implementar SSL en su servidor Tomcat, los informes que contienen caracteres Unicode están encontrando un error donde el carácter no se puede codificar, ya que está fuera del rango permitido de 0 a 255.

    Esto puede deberse al hecho de que la implementación de SSL ha causado un cambio en la codificación de caracteres predeterminada utilizada por la aplicación web. Para resolver este problema, puede intentar establecer la codificación de caracteres explícitamente en su método de controlador Grails que llama al informe Jasper.

    Para hacerlo, puede intentar agregar la siguiente línea de código al inicio de su método de controlador Grails:

    response.setCharacterEncoding("UTF-8");
    

    Esto establece la codificación de caracteres en UTF-8, que se utiliza comúnmente para manejar caracteres Unicode.

    Alternativamente, también puede intentar establecer la codificación de caracteres predeterminada para su aplicación web en el archivo conf/web.xml del servidor Tomcat, de la siguiente manera:

    <filter>
      <filter-name>setCharacterEncodingFilter</filter-name>
      <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
      <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
      <async-supported>true</async-supported>
    </filter>
    <filter-mapping>
      <filter-name>setCharacterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    Esto establece el filtro de codificación de caracteres en UTF-8, que se aplicará a todas las URL bajo su aplicación web.

    Esperemos que una de estas soluciones pueda ayudar a resolver el problema con los caracteres Unicode en sus informes Jasper después de implementar SSL en su servidor Tomcat.

Comments are closed.