Come faccio a impostare JBoss 5 codifica a comportarsi come l'ex JBoss 4.1?
-
29-09-2019 - |
Domanda
Si tratta di un'applicazione che è stato costruito usando seam 2.2 ed è in esecuzione perfettamente sotto Jboss 4.1.2. A causa del sostegno dal mio ISP dovrò aggiornare JBoss alla versione 5.1. Ho provato a correre stessa applicazione sotto JBoss 5 e tutto andava bene, ma una sola cosa non è riuscita.
Si tratta di un pezzo di codice che genera un po 'di JSON per alimentare un grafico costruito utilizzando Aperto librerie Flash Chart . Io uso anche JofC librerie per generare il JSON per questi grafici. Bene l'approccio che abbiamo utilizzato fondamentalmente ha una fabbrica di cucitura che stampa un JSON e di noi fare riferimento a questa fabbrica in una pagina vuota .xhtml da dove i carichi grafico la richiesta JSON per rendere correttamente. Seguire alcuni frammenti:
La pagina xhtml dove la fabbrica cucitura viene chiamato:
<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>
Il metodo factory che genera la stringa 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;
Bene il codice dimostra anche che abbiamo tryied codifica la stringa JSON prima di inviare di nuovo, ma senza successo. Nella riga in cui è stampato JSON per log.info la stringa JSON è perfettamente conservato, ma utilizzando JBoss5 quello che succede è che i "(virgolette) caratteri vengono sostituiti da caratteri di escape HTML.
La stringa di follow JSON è previsto per alimentare correttamente la carta e questo si comporta correttamente in 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}
Ma che usare JBoss5 la stringa di seguito viene stampato, si noti la sostituzione HTML codificano per le doppie virgolette:
{"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}
Ho già controllato locale O.S e ha fatto anche una configurazione su JBoss http canale per codificare il corpo in 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"/>
Non ha funzionato. Usiamo UTF-8 per tutte le risorse e le pagine della nostra applicazione.
Degli indizi?
Tx in anticipo. [] S
Soluzione
Ho preso uno sguardo a documentazione JSF di rivedere e trovò f: tag parola per parola. E 'risolto il problema. Ora la mia pagina .xhtml in cui stampare la stringa JSON è simile:
<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>
Ora la stringa risultato JSON non è cambiato e la grafica visualizzata correttamente.
[] s
Altri suggerimenti
Non so se questo aiuterà, ma ci proverò.
Nel set components.xml
<web:character-encoding-filter encoding="UTF-8" override-client="true" url-pattern="*.seam" />
Crea un filtro che impostare tutto a 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 {}
}
e attivare questo filtro in web.xml
<filter>
<filter-name>UTF8 Filter</filter-name>
<filter-class>my.package.filter.UTF8Filter</filter-class>
</filter>
Se questo non risolve il problema, è possibile codificare manualmente la stringa
//If you only have problem with " you can do this
jsonString.replaceAll(""","\\\"");
Non sono sicuro la regex funzionerà correttamente, ma si può provare. Si può forse anche utilizzare StringEscapeUtils da Apache Commons per sfuggire correttamente tutti HTML.
String output=new String(input.getBytes(),"UTF-8");
Dando in questo modo ha risolto il problema.