Pregunta

Es una aplicación que se ha construido utilizando la costura 2.2 y que está funcionando perfectamente bajo Jboss 4.1.2. Debido al apoyo de mi ISP me tendrán que actualizar a la versión 5.1 de JBoss. Yo trato de ejecutar misma aplicación bajo JBoss 5 y todo iba bien, pero una cosa sola fallado.

Es un pedazo de código que genera cierta JSON para alimentar un gráfico construido usando abierto bibliotecas Flash Chart . También uso JofC bibliotecas para generar el JSON para estas tablas. Así el enfoque que hemos utilizado básicamente tiene una fábrica de costura que imprime un JSON y lo que haga referencia a esta fábrica en una página en blanco .xhtml desde donde las cargas tabla de la JSON requerido para rendir adecuadamente. Siga algunos fragmentos:

La página XHTML donde el taller de costura se llama:

<f:view xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   contentType="text/json; charset=UTF-8">

   #{jsonGraficoPesoUsuario}

</f:view> 

El método de fábrica que genera la cadena JSON:

@Factory("jsonGraficoPesoUsuario")
 public String graficoPesoUsuario()
 {
...

   String jsonString = chart.toString();
   log.info("JSonString ==>> " + jsonString);
//   try {
//    jsonString = URLEncoder.encode(jsonString, "UTF-8");
//   } catch (UnsupportedEncodingException e) {
//    log.error("Erro ao tentar fazer o encode da string json ==>> " + e.getMessage());
//    e.printStackTrace();
//   }
   return jsonString;

Bien El código también muestra que hemos tryied que codifica la cadena JSON antes de enviar pero de nuevo sin éxito. En la línea donde se imprime JSON a log.info la cadena JSON está perfectamente conservada, pero utilizando JBoss5 lo que sucede es que las comillas dobles () caracteres "se sustituyen por caracteres HTML de escape.

Se espera que la cadena de seguimiento JSON para una correcta alimentación del gráfico y este se comporte correctamente en jboss4:

{"y_axis":{"min":100,"colour":"#96A9C5","grid-colour":"#DDDEE1","max":112},"title":{"text"
:"Gráfico de evolução de Peso"},"bg_colour":"#FFFFFF","is_decimal_separator_comma":1,"elements":[{"text":"Peso","values":[100.5,101.5,102.5,
102,103,107,109,110.5,108],"font-size":10,"type":"line","tip":"Linha do Peso"}],"num_decimals":2,"is_fixed_num_decimals_forced":1,"x_axis":{
"colour":"#96A9C5","grid-colour":"#DDDEE1","labels":{"rotate":"-24","labels":["01/05/10","15/05/10","25/05/10","01/06/10","09/06/10","25/06/
10","05/07/10","10/07/10","20/07/10"]}},"is_thousand_separator_disabled":0} 

Sin embargo, que el uso de la cadena JBoss5 seguimiento se imprime, observe la sustitución html codifican comillas dobles:

{&quot;y_axis&quot;:{&quot;min&quot;:100,&quot;colour&quot;:&quot;#96A9C5&quot;,&quot;grid-colour&quot;:&quot;#DDDEE1&quot;,&quot;max&quot;:112},&quot;title&quot;:{&quot;text&quot;:&quot;Gr&aacute;fico de evolu&ccedil;&atilde;o de Peso&quot;},&quot;bg_colour&quot;:&quot;#FFFFFF&quot;,&quot;is_decimal_separator_comma&quot;:1,&quot;elements&quot;:[{&quot;text&quot;:&quot;Peso&quot;,&quot;values&quot;:[100.5,101.5,102.5,102,103,107,109,110.5,108],&quot;font-size&quot;:10,&quot;type&quot;:&quot;line&quot;,&quot;tip&quot;:&quot;Linha do Peso&quot;}],&quot;num_decimals&quot;:2,&quot;is_fixed_num_decimals_forced&quot;:1,&quot;x_axis&quot;:{&quot;colour&quot;:&quot;#96A9C5&quot;,&quot;grid-colour&quot;:&quot;#DDDEE1&quot;,&quot;labels&quot;:{&quot;rotate&quot;:&quot;-24&quot;,&quot;labels&quot;:[&quot;01/05/10&quot;,&quot;15/05/10&quot;,&quot;25/05/10&quot;,&quot;01/06/10&quot;,&quot;09/06/10&quot;,&quot;25/06/10&quot;,&quot;05/07/10&quot;,&quot;10/07/10&quot;,&quot;20/07/10&quot;]}},&quot;is_thousand_separator_disabled&quot;:0}

ya he comprobado locale o.s y también hizo una configuración en jboss http canal para codificar el cuerpo en server.xml:

<!-- A HTTP/1.1 Connector on port 8080 -->
      <Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.address}" 
               connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true"/>

No funcionó. Nosotros usamos UTF-8 para todos los recursos y las páginas de nuestra aplicación.

¿Alguna pista?

Tx con antelación. [] S

¿Fue útil?

Solución

Me tomó un vistazo a la documentación JSF para revisarlo y encontró f: Etiqueta pie de la letra. Se ha solucionado el problema. Ahora mi página .xhtml donde se imprime la cadena JSON es como:

<f:view xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   contentType="text/json" >

  <f:verbatim> 
   #{jsonGraficoPesoUsuario}
   </f:verbatim>
</f:view>

Ahora, la cadena de resultado JSON es no cambió y el gráfico se muestra correctamente.

[] s

Otros consejos

No sé si esto ayuda, pero voy a intentarlo.

En conjunto components.xml

<web:character-encoding-filter encoding="UTF-8" override-client="true" url-pattern="*.seam" />

Crear un filtro que ponerlo todo en UTF-8

public class UTF8Filter implements Filter {

  public void destroy() {}

  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)   throws IOException, ServletException {
    // set encoding to UTF-8
    req.setCharacterEncoding("UTF-8");
    chain.doFilter(req, res);
    return;
  }

  public void init(FilterConfig arg0) throws ServletException {}

}

y habilitar este filtro en web.xml

<filter>
  <filter-name>UTF8 Filter</filter-name>
  <filter-class>my.package.filter.UTF8Filter</filter-class>
</filter>

Si esto no ayuda, puede codificar manualmente la cadena

 //If you only have problem with &quot; you can do this
 jsonString.replaceAll("&quot;","\\\"");

No estoy seguro de la expresión regular funcionará correctamente, pero se puede tratar. También puede utilizar quizá StringEscapeUtils de Apache Commons para escapar correctamente todo el HTML.

String output=new String(input.getBytes(),"UTF-8");

dando así resuelto el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top