Рассмотрим следующий поток, который выполняет аутентификацию через HTTP для службы. Я вижу, что возвращается код состояния HTTP 201
(создан), который должен запускать отношения/поток response
. Однако, как вы можете видеть в журнале ниже, запускается только отношение original
.
Зеленые линии обозначают поток «ответа». Пурпурный цвет указывает на «первоначальный» поток.
POST /token
свойстваЗдесь вы можете видеть, что отношение original
запускается, а response
— нет, даже несмотря на то, что код состояния 201
находится в диапазоне «успех».
2023-01-29 15:22:08,341 INFO [Timer-Driven Process Thread-7] o.a.n.processors.standard.LogAttribute LogAttribute[id=fe0ace38-0185-1000-376d-8737d0e020f8] logging for flow file StandardFlowFileRecord[uuid=6b9f010a-f287-449c-8bef-94840c5cfa2f,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1674862641879-1, container=default, section=1], offset=13494, length=107],offset=0,name=6b9f010a-f287-449c-8bef-94840c5cfa2f,size=107]
---------------------ORIGINAL---------------------
FlowFile Properties
Key: 'entryDate'
Value: 'Sun Jan 29 15:22:07 UTC 2023'
Key: 'lineageStartDate'
Value: 'Sun Jan 29 15:22:07 UTC 2023'
Key: 'fileSize'
Value: '107'
FlowFile Attribute Map Content
Key: 'filename'
Value: '6b9f010a-f287-449c-8bef-94840c5cfa2f'
Key: 'invokehttp.request.duration'
Value: '738'
Key: 'invokehttp.request.url'
Value: '...'
Key: 'invokehttp.response.url'
Value: '...'
Key: 'invokehttp.status.code'
Value: '201'
Key: 'invokehttp.status.message'
Value: ''
Key: 'invokehttp.tx.id'
Value: 'efca13ac-16a1-4a27-a8e1-d04110d48523'
Key: 'mime.type'
Value: 'application/json'
Key: 'path'
Value: './'
Key: 'responseBody'
Value: '...'
Key: 'uuid'
Value: '6b9f010a-f287-449c-8bef-94840c5cfa2f'
---------------------ORIGINAL---------------------
Единственное, что, как мне кажется, может вызвать проблему, это то, что я пишу тело ответа в атрибут. Я попытался проверить, установив для этого имени атрибута пустую строку, но это просто дает мне ошибку в журнале. Я предположил, что без установленного имени атрибута телом ответа будет FlowFile, отправленный в отношение ответа, но, похоже, это не работает.
Обновление: я создал второй процессор InvokeHTTP
и заменил отношения/отключил старый. Поток работал правильно, пока я не установил Response Body Attribute Name
, а затем связь response
перестала срабатывать. Однако мне нужно установить этот атрибут, чтобы я мог извлечь сообщение об ошибке из ответа в случае сбоя. Я думаю, мне нужно включить опцию Response Generation Required
и проверить код состояния в потоке отношений response
. Однако это не идеально.
На этот запрос есть ответ JSON.
При использовании имени атрибута тела ответа запускается только исходный маршрут. Это поведение InvokeHTTP, вы можете проверить документацию.
Имя атрибута FlowFile, используемое для записи тела ответа HTTP для файлов FlowFile, переданных в исходное отношение.
Вы можете использовать этот способ для своей проблемы,
InvokeHTTP (original route)-> RouteOnAttribute - (Success - ${invokehttp.status.code.ge(200):and(${invokehttp.status.code.le(299)})})
Когда вы устанавливаете атрибут имени атрибута тела ответа, это означает, что вам не нужен новый потоковый файл, вы хотите просто добавить новый атрибут в существующий потоковый файл.
Спасибо. Я читал документы, но они не ясны в этом отношении. Даже цитата, которую вы вставили выше, не понятна.
Это должно быть о том, что ваш ответ API равен нулю. Потому что, когда вы хотите получить ответ по атрибуту, InvokeHTTP проверяет флаг «bodyExists». если (outputBodyToRequestAttribute && bodyExists)