WedX - журнал о программировании и компьютерных науках

Talend: tRESTClient возвращает пустой ответ после удаления

Я новичок в Таленде. Я использую 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()?

18.05.2015

Ответы:


1

Мне удалось найти решение этой проблемы.

Я заменил компонент tRESTClient на tJavaRow, который создает клиент cxf, вызывает службу и добавляет ответ в выходную строку.

WebClient client = WebClient.create(context.serviceFullUrl);
client.path("rest/path/"+in1.serviceId);
client.accept("application/xml");
Response response = client.delete();        
String r = response.readEntity(String.class);

output_row.statusCode = response.getStatus();
output_row.string = r;
output_row.body = null;

Импорт:

import javax.ws.rs.core.Response;
import org.apache.cxf.jaxrs.client.WebClient;

Talend Studio может выдать NoClassDefFoundError, но во время выполнения задание работает хорошо.

Но я уверен, что должно быть лучшее решение.

19.05.2015
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]