繁体   English   中英

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

[英]Getting incomplete json as result of toD(url) for few cases

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

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

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

使用:camel-spring-boot-bom > 3.9.0 camel-spring-boot-dependencies > 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();

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()
    // ...
;

当用户直接从 pdf 文件中复制粘贴数据时,客户端就会发生这种情况,这些文件具有 STX(文本开头)等控制字符。

这最好在源代码中修复,以避免必须在每个使用 REST-API 的应用程序中清除它,但您也可以使用 replaceAll 和正则表达式从消息正文中删除特定的控制字符。

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

.toD("header.dataSetAccessUrl")与此无关,但您可能希望在路由开始时验证 header。 就像当 header 是 null 时抛出异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM