我正在使用 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();
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 时抛出异常一样。
你是如何解决@Trups的,我有完全相同的问题