Как мне установить кодирование JBoss 5, чтобы вести себя как бывший JBoss 4.1?

StackOverflow https://stackoverflow.com/questions/4103708

Вопрос

Это приложение, которое было построено с помощью шва 2.2, и он отлично работает под jboss 4.1.2. Из-за поддержки от моего провайдера мне придется обновить jboss до версии 5.1. Я пытался запустить же приложение под jboss 5, и все выглядело нормально, но одна вещь не удалась.

Это кусок кода, который генерирует некоторую JSON для подачи диаграммы, создаваемой с использованием Откройте библиотеки флэш-диаграммы. Анкет Я также использую JOFC библиотеки Чтобы генерировать JSON для этих графиков. Ну, подход, который мы использовали в основном, имеет заводскую завод, которая печатает JSON, и, чем мы делаем ссылку на эту фабрику на пустой странице. Следуйте некоторым фрагментам:

Страница XHTML, на которой называется заводская завод:

<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> 

Фабричный метод, который генерирует строку 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;

Ну, код также показывает, что мы попробовали кодировать строку JSON перед отправкой, но опять же без успеха. В линии, где он напечатан JSON для log.info, строка JSON идеально сохранилась, но используя JBOSS5, что происходит, так это то, что «Двойные цитаты) заменяются HTML Escape».

Ожидается, что строка следования JSON правильно подат диаграмму, и это ведет себя правильно при 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} 

Но, чем использовать JBOSS5, напечатана следующая строка, обратите внимание на замену кодирования HTML для двойных кавычек:

{&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}

Я уже проверил Locale OS, а также сделал конфигурацию на канале JBoss HTTP, чтобы кодировать корпус в 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"/>

Это не сработало. Мы используем UTF-8 для всех ресурсов и страниц в нашем приложении.

Какие -нибудь подсказки?

TX заранее. [] S.

Это было полезно?

Решение

Я посмотрел на документацию JSF, чтобы просмотреть его и найти F: Verbatim Tag. Это исправило проблему. Теперь моя страница .xhtml, где напечатана строка JSON, похожа:

<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>

Теперь результат строки JSON не изменяется, и график правильно отображается.

] S.

Другие советы

Я не знаю, поможет ли это, но я попробую.

В компонентах .xml Set.

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

Создайте фильтр, который установит все в 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 {}

}

И включить этот фильтр в web.xml

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

Если это не поможет, вы можете вручную кодировать строку

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

Я не уверен, что регулярность будет работать правильно, но вы можете попробовать. Вы также можете использовать Stringescapeutils от Apache Commons, чтобы правильно избежать всех HTML.

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

Давая так, как это решило проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top