2017-02-14 22 views
0

Я выполняю http-вызов, чтобы получить RSS-канал от newspaper xml feed от латинской америки, а затем преобразовать тело ответа в JSON. Проблема с латинскими американовыми газетами - это обычное правило, чтобы найти латинские символы, которые необходимо закодировать, например á é í ó ú.Apache Camel неправильная кодировка после сортировки xml на json с http

Проблема заключается в том, что ответ не закодирован должным образом, я получаю описание как этот: Las lluvias llegar��an a la ciudad de C��rdoba jueves y viernes seg��n prev�� el Servicio Meteorol��gico Nacional (SMN)

Я попытался установить параметры кодирования для компонента HTTP и xmljson маршала и ни один из обоего работ. Я также пытался форсировать заголовки Content-Type для application/rss+xml; charset=utf-8 и application/json; charset=utf-8, но ни один.

Я использую следующий DataFormat:

<dataFormats> 
    <xmljson id="xmljson"/> 
</dataFormats> 

И мой маршрут выглядит следующим образом:

<route id="rss"> 
    <from uri="direct:rss"/> 
    <setHeader headerName="CamelHttpUri"> 
     <simple>"http://srvc.lavoz.com.ar/rss.xml"</simple> 
    </setHeader> 
    <setHeader headerName="CamelHttpMethod"> 
     <constant>GET</constant> 
    </setHeader> 
    <to uri="http://rss"/> 
    <marshal ref="xmljson"/> 
</route> 

Пример ответ был бы:

{ 
    "channel": { 
    "title": "LaVoz", 
    "link": "http://srvc.lavoz.com.ar/rss.xml", 
    "description": [], 
    "language": "en", 
    "item": [ 
     { 
     "title": "��Se vienen las lluvias a C��rdoba?", 
     "link": "http://srvc.lavoz.com.ar/ciudadanos/se-vienen-las-lluvias-cordoba", 
     "description": "Las lluvias llegar��an a la ciudad de C��rdoba jueves y viernes seg��n prev�� el Servicio Meteorol��gico Nacional (SMN) aunque se mantendr�� el promedio de las temperaturas.�� Este martes estuvo cielo algo nublado con una temperatura m��nima de 14�� registrada a las 6.10 y una m��xima de 29,5�� a las 15.30, seg��n indic�� el Observatorio Meteorol��gico C��rdoba.�� Pron��stico extendido Hay probabilidad de tormentas para jueves y viernes. Mir�� el pron��stico.�� Ciudadanos", 
     "pubDate": "Tue, 14 Feb 2017 21:19:21 +0000", 
     "dc:creator": { 
      "@xmlns:dc": "http://purl.org/dc/elements/1.1/", 
      "#text": "redaccionlavoz" 
     }, 
     "guid": { 
      "@isPermaLink": "false", 
      "#text": "1099119 at http://srvc.lavoz.com.ar" 
     } 
    },... 

Обновление:
- I f маршрут возвращает ответ XML (без сортировки его в JSON), кодирование работает, как ожидалось.
- Если вместо сортировки маршрут регистрирует содержимое тела с ответом XML в регистраторе, проблема также возникает.

+0

Пробовали ли вы Is0 8859-1? –

+0

@SoucianceEqdamRashti да, это не сработало. Любой из ISO 8859-1 или UTF-8 должен решить проблему кодирования. – fuxes

ответ

1

Друг смог решить его, преобразовывая тело в String с помощью convertBodyTo с использованием UTF-8 перед сортировкой.

Конечный код выглядит следующим образом:

<route id="rss"> 
     <from uri="direct:rss"/> 
     <setHeader headerName="CamelHttpUri"> 
      <simple>"http://srvc.lavoz.com.ar/rss.xml"</simple> 
     </setHeader> 
     <setHeader headerName="CamelHttpMethod"> 
      <constant>GET</constant> 
     </setHeader> 
     <to uri="http://rss"/> 

     <convertBodyTo type="String" charset="UTF-8" /> 
     <setProperty propertyName="CamelCharsetName"> 
     <constant>utf-8</constant> 
     </setProperty> 

     <marshal ref="xmljson"/> 
    </route> 
+0

Большое спасибо! Это сэкономило много времени. –