【问题标题】:Apache Camel wrong encoding after marshalling xml to json from http将 xml 从 http 编组为 json 后,Apache Camel 编码错误
【发布时间】:2017-02-14 21:34:34
【问题描述】:

我正在执行 http 调用以从来自拉丁美洲的 newspaper xml feed 获取 RSS 提要,然后将响应正文转换为 JSON。 拉丁美洲报纸的问题是报纸很容易找到需要编码的拉丁字符,例如á é í ó ú

问题是响应没有正确编码,所以我得到这样的描述: Las lluvias llegar��an a la ciudad de C��rdoba jueves y viernes seg��n prev�� el Servicio Meteorol��gico Nacional (SMN)

我尝试为 http 组件和 xmljson 编组设置编码参数,但两者都不起作用。我还尝试为 application/rss+xml; charset=utf-8application/json; charset=utf-8 强制使用 Content-Type 标头,但都没有。

我正在使用以下数据格式:

<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"
        }
    },...

更新:
- 如果路由返回 XML 响应(不将其编组为 JSON),则编码按预期工作。
- 如果不是编组路由,而是将带有 XML 响应的正文内容记录到记录器中,也会出现问题。

【问题讨论】:

  • 你试过 IS0 8859-1 吗?
  • @SoucianceEqdamRashti 是的,它没有用。任何 ISO 8859-1 或 UTF-8 都可以解决编码问题。

标签: json xml apache-camel jbossfuse


【解决方案1】:

一位朋友在编组之前使用 UTF-8 将正文转换为 convertBodyTo 的字符串,从而解决了这个问题。

结束代码如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2015-05-18
    • 1970-01-01
    • 2019-07-02
    相关资源
    最近更新 更多