Мы используем talend для создания ETL. Один из используемых нами компонентов - tRESTClient , чтобы взаимодействовать со службой REST на нашей платформе. Мы используем talend версии 7.1.
Недавно эта служба REST изменила версию своей библиотеки HTTP-сервера ( libmicrohttpd , служба REST основана на C / C ++). В частности, перешел с limicrohttpd 0.9.48 на 0.9.70. И поскольку мы внесли изменения, интеграция в ETL начала давать сбой. Мы видим подобное сообщение в трассировке talend:
--------------------------------------
time=2020-08-05 08:26:01| lvl=INFO | ver=1.0| Inbound Message
----------------------------
ID: 1
Response-Code: 204
Encoding: ISO-8859-1
Content-Type:
Headers: {Cache-Control=[no-cache, no-store, max-age=0, must-revalidate], connection=[keep-alive], Date=[Wed, 05 Aug 2020 06:26:03 GMT], Expires=[0], fiware-correlator=[894f7ff0-d6e4-11ea-b1bd-fa163ec74401], Pragma=[no-cache], Referrer-Policy=[same-origin], Server=[nginx], Strict-Transport-Security=[max-age=31536000; includeSubdomains;], X-Content-Type-Options=[nosniff], X-Frame-Options=[SAMEORIGIN], X-XSS-Protection=[1; mode=block]}
--------------------------------------
Exception in component tRESTClient_1 (VLCI_ETL_MEDIOAMBIENTE_INSERT_CB)
javax.ws.rs.client.ResponseProcessingException: Problem with reading the data, class org.dom4j.Document, ContentType: */*.
at org.apache.cxf.jaxrs.impl.ResponseImpl.reportMessageHandlerProblem(ResponseImpl.java:437)
at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:379)
at org.apache.cxf.jaxrs.impl.ResponseImpl.readEntity(ResponseImpl.java:314)
at org.apache.cxf.jaxrs.impl.ResponseImpl.readEntity(ResponseImpl.java:304)
…
Мы все еще исследуем проблему, но подозреваем, что одно из изменений, внесенных в libmicrohttpd, могло быть связано. В частности, с libmicrohttd 0.9.48 (когда работает ETL) заголовок Content-Length: 0 был включен в 204 ответа. В libmicrohttpd 0.9.70 (когда ETL не работает) такой заголовок Content-Length: 0 не включается.
Это известная проблема? Я имею в виду, ожидается ли сбой tRESTClient (версия 7.1), если «Content-Lengh: 0» не включен в 204 ответа?
Обратите внимание, что спецификация HTTP довольно четко определяет использование Content-Length в 204 ответах. Из RF C 7321 (который, насколько мне известно, является нормативным стандартом для HTTP) раздел 6.1 :
Сервер НЕ ДОЛЖЕН отправлять поле заголовка Content-Length в любой ответ с кодом состояния 1xx (информационный) или 204 (без содержимого) »
, поэтому, если tRESTClient не поддерживает его, я понимаю, что это ошибка в talend (может быть решена в версии после версии 7.1 релизы?)
Любые отзывы об этом действительно приветствуются! Спасибо за внимание.