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