在少数情况下,由于 toD(url) 导致 json 不完整

问题描述 投票:0回答:2

我正在使用 apache Camel 并从另一个系统拥有的数据湖中获取数据。 虽然在大多数情况下,这个流程工作得非常好,但对于极少数事件,我观察到我的应用程序收到的数据不完整 和流程中断说 com.fasterxml.jackson.databind.JsonMappingException:非法未加引号的字符((CTRL-CHAR,代码0)):必须使用反斜杠转义才能包含在字符串值中

我已经与提供数据的团队核实过 - 但他们已经确认最终没有发生任何变化,这让我不知道如何进一步解决这个问题

如果我使用curl命令并从数据湖下载数据,我会得到完整的json apache Camel 中还有其他方法可以尝试从 dataSetAccessUrl 下载数据吗? 快速帮助将不胜感激,因为这是一个产品问题

使用: 骆驼-spring-boot-bom > 3.9.0 骆驼弹簧启动依赖项> 3.9.0

    from("direct:fetchData")
    .log(LoggingLevel.INFO, LOGGER, "Invoking API ")
    .toD("${header.dataSetAccessUrl}") // accessing CCO  data sets
    .log(LoggingLevel.INFO, LOGGER, "response code is: ${header.CamelHttpResponseCode}, JSON Response ${body}")
    .log(LoggingLevel.DEBUG, LOGGER, "JSON Response ${body}").end();
java spring-boot apache-camel
2个回答
0
投票

com.fasterxml.jackson.databind.JsonMappingException: Illegal unquoted character ((CTRL-CHAR, code 0)):
表示 JSON 响应包含非法字符。发生这种情况时,您应该将失败的 JSON 响应写入文件,并在 VSCode 或其他支持 JSON 语法突出显示的编辑器中查看它。

from("direct:fetchData")
    .onException(JsonMappingException.class)
        .log(LoggingLevel.ERROR, "Json mapping failed. ${exception.message}")
        .to("file:{{fetchdata.mapping.failed}}")
    .end()
    // ...
;

曾经在客户端发生过这种情况,当时用户直接从具有 STX(文本开始)等控制字符的 pdf 文件复制粘贴的数据。

最好在源代码中修复此问题,以避免必须使用 REST-API 在每个应用程序中清除此问题,但您也可以使用 ReplaceAll 和 regex 从消息正文中删除特定的控制字符。

// Removes stx control character from message body
String body = exchange.getMessage().getBody(String.class);
exchange.getMessage().setBody(body.replaceAll("[\\x02]", ""));

.toD("header.dataSetAccessUrl")
与此无关,但您可能希望在路线开始时验证该标头。就像当 header 为 null 时抛出异常一样。


0
投票

你是如何解决@Trups的,我有完全相同的问题

© www.soinside.com 2019 - 2024. All rights reserved.