Ошибка APIM: команда cURL DELETE в API возвращает ошибку времени выполнения

Мой API имеет службу DSS в качестве серверной части и имеет связанные ресурсы для операций GET, POST, PUT и DELETE. Однако, когда я выполняю операцию DELETE в службе, даже если на бэкэнде это произошло успешно, APIM возвращает ошибку времени выполнения:

curl -v -H "Authorization: Bearer 356bcb27f82c849e383d3765e0ccce" -X DELETE http://localhost:8280/fte/1.0/users/105/vacations/13
* Hostname was NOT found in DNS cache
*   Trying localhost...
* Connected localhost (localhost) port 8280 (#0)
> DELETE /fte/1.0/users/105/vacations/13 HTTP/1.1
> User-Agent: curl/7.36.0
> Host: localhost:8280
> Accept: */*
> Authorization: Bearer 356bcb27f82c849e383d3765e0ccce
>
< HTTP/1.1 202 Accepted
< Access-Control-Allow-Headers: authorization,Access-Control-Allow-Origin,Content-Type
< Content-Type: application/xml; charset=UTF-8
< Date: Tue, 09 Sep 2014 07:38:00 GMT
* Server WSO2-PassThrough-HTTP is not blacklisted
< Server: WSO2-PassThrough-HTTP
< Transfer-Encoding: chunked
<
* Connection #0 to host localhost left intact
<am:fault xmlns:am="http://wso2.org/apimanager"><am:code>0</am:code><am:type>Status report</am:type><am:message>Runtime Error</am:message><am:description>Error while building message</am:description></am:fault>[

Как я могу предотвратить такую ​​​​ошибку? Нужно ли выходное сообщение от серверной службы, чтобы она не отображала эту ошибку времени выполнения?

Спасибо


person Drew    schedule 09.09.2014    source источник


Ответы (1)


Это происходит из-за того, что ваша внутренняя служба не отвечает телом сообщения. Скорее он отправляет только код состояния HTTP. APIManager пытается создать сообщение из этой пустой полезной нагрузки. Чтобы предотвратить, вы можете открыть свою конфигурацию API (репозиторий/deploymnet/server/synapse-config/default/api) и для операции DELETE перед отправкой на серверную часть сделать это как одностороннее сообщение, установив свойство OUT_ONLY.

<property name="OUT_ONLY" value="true"/>

Убедитесь, что вы установили это свойство только для операции DELETE. Если другие операции возвращают какое-либо тело ответа, это свойство повлияет на них.

person Ratha    schedule 09.09.2014
comment
спасибо за ответ, но на основе моей конфигурации API у меня нет конкретной настройки для операции удаления, вот строка ресурсов из API ` ‹resource method=POST GET DELETE OPTIONS PUT url-mapping=/*›` и как вы сказали, неправильное размещение этого свойства повлияет на тело ответа других операций. Есть ли способ справиться с этим? - person Drew; 10.09.2014
comment
В рамках проверки последовательности для HTTP-метода DELETE затем установите это свойство OUT_ONLY (да, это немного настраиваемая логика посредника, которую вам нужно сделать). Вы также можете использовать пользовательскую опцию последовательности для этого. См. этот документ: docs.wso2.com/display/AM170/Adding+Mediation +Расширения - person Ratha; 10.09.2014
comment
большое спасибо! Я тоже думал о пользовательском посредничестве, так как это единственный способ установить свойство для операции удаления. Огромное спасибо за помощь! - person Drew; 10.09.2014