Ошибка полезной нагрузки JSON при получении данных из бэкэнда - PullRequest
0 голосов
/ 24 октября 2019

Я настроил API, который использует OAUth Mediator для генерации токена доступа во внешнем бэкэнде. Я тестирую конечную точку, используя cURL. От включения проводных журналов я вижу, что сообщение от cURL получено правильно, затем APIM использует внешний бэкэнд, который отвечает с желаемой информацией .

Однако я получаю две ошибки:

org.apache.axis2.AxisFault: Payload could not be written as JSON.
.
.
.
org.apache.axis2.AxisFault: Failed to submit the response

cURL никогда не получает отклик и время ожидания (пустой ответ от сервера).

Пожалуйста, смотрите прикрепленное изображение Carbon log.

На что следует обратить внимание:

  • Внешний API-интерфейс отвечает типом контента "application / hal-json". Это настраивается в моем API путем установки соответствующего поля Consumes
  • Axis2.xml был отредактирован для включения следующих строк в соответствующие разделы:

    <messageBuilder contentType="application/hal+json" class="org.apache.axis2.json.JSONStreamBuilder"/>        
    .
    .
    .
    <messageFormatter contentType="application/hal+json" class="org.apache.synapse.commons.json.JsonStreamFormatter"/>
    
  • У меня есть две политики посредничества

    In:

        <?xml version="1.0" encoding="UTF-8"?>
        <sequence name="secuenciaPrueba" statistics="enable" trace="enable" xmlns="http://ws.apache.org/ns/synapse">
            <log description="" level="full"/>
            <property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
            <class name="org.wso2.apim.mediators.oauth.OAuthMediator">
                <property name="endpointId" value="EP1"/>
            </class>
        </sequence>

Out:

        <?xml version="1.0" encoding="UTF-8"?>
        <sequence name="secuenciaPruebaOut" statistics="enable" trace="enable" xmlns="http://ws.apache.org/ns/synapse">
            <log level="full">
                <property name="OUT_MESSAGE" value="OUT_MESSAGE"/>
            </log>
            <log level="custom">
                <property expression="get-property('ENDPOINT_PREFIX')" name="Endpoint"/>
                <property expression="get-property('transport', 'Content-Type')" name="Content-Type"/>
                <property expression="get-property('msgID')" name="Correlation_Id"/>
            </log>
            <property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
        </sequence> 

Мне нужно вернуть данные JSON вcURL, чего здесь не хватает?

Carbon log

1 Ответ

0 голосов
/ 25 октября 2019

Проблема заключалась в неправильности классов messageFormatter и messageBuilder. Правильные настройки:

<messageFormatter contentType="application/hal+json" 
class="org.apache.synapse.commons.json.JsonStreamFormatter"/> 
.
.
. 
<messageBuilder contentType="application/hal+json" 
class="org.apache.synapse.commons.json.JsonStreamBuilder"/>
...