Я новичок в Таленде. Я использую 5.6.1 Talend Studio. Я отправляю запрос DELETE с помощью tRESTClient в службу. Я ожидаю получить ответ xml с кодами ошибок.
В журнале клиента я вижу xml, который мне нужен, но значения body и string в строке ответа пусты. Журнал tRESTClient:
ID: 1
Response-Code: 200
Encoding: ISO-8859-1
Content-Type: application/xml
Headers:
{Content-Length=[492],
content-type=[application/xml],
Date=[Mon, 18 May 2015 15:02:24 GMT],
Server=[Apache-Coyote/1.1]}
Payload:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:Response xmlns:ns1="..." xmlns:ns2="...">
<ns1:IsSuccess>false</ns1:IsSuccess>
<ns1:ErrorList>
<ns2:Error>
<ns2:Code>80</ns2:Code>
<ns2:Description>Can't find service</ns2:Description>
<ns2:Severity>error</ns2:Severity>
</ns2:Error>
</ns1:ErrorList>
</ns1:Response>
Я попытался добавить полезную нагрузку и другие поля в строку вывода клиентов, но безрезультатно. tLogRow после клиента:
|200|||
XML необходим для дальнейшей обработки, а простого кода состояния недостаточно. Запросы POST и GET работают нормально, я получаю данные ответа в виде строк или полей тела. При использовании службы DELETE с такими инструментами, как SOAP UI, все также в порядке, я получаю ожидаемый XML.
Может ли кто-нибудь предложить, почему я столкнулся с этой проблемой и как ее можно решить?
Обновление:
Играя с отладчиком, я обнаружил, что responseDoc_tRESTClient_1, который используется для создания тела или строки для выходной строки, всегда равен нулю. Он инициализируется нулевым значением в начале и никогда не изменяется.
Похоже, проблема связана с сгенерированным кодом для вызова службы. Например, если мы отправим запрос GET, он выдаст следующий код:
responseDoc_tRESTClient_1 = webClient_tRESTClient_1.get(responseClass_tRESTClient_1);
Если мы отправим запрос DELETE, он выдаст следующий код:
webClient_tRESTClient_1.invoke("DELETE", requestBody_tRESTClient_1);
Я видел, что webClient
также имеет метод .delete()
, который возвращает Response как метод .get(...)
. Есть ли способ заставить Talend
использовать метод .delete()
вместо .invoke()
?