WSO2 API Manager 2.0.0-получение запроса GET и отправка сообщения в бэкэнд

Я создал RESTful API в wso2-am 2.0.0. Но я сталкиваюсь с проблемой и немного помогу.
У меня есть ресурс с GET http методом, который получает url param, и я сделал полезную нагрузку SOAP для отправки по почте в backend (backend-soap11).

Для этого я использовал пользовательскую последовательность «in»:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="JSONtoSOAP" trace="disable"
    >
    <log description="Entrada" level="full" separator=",">
    <property expression="get-property('uri.var.cpfCnpj')" name="cpfcnpj" />
    <property name="trace"
        value="IN LOG" />
    </log>
    <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING" />
    <property name="messageType" scope="axis2" type="STRING"
    value="application/soap+xml" />
    <enrich>
        <source type="inline">
            <soap:Envelope >
                <soap:Body />
            </soap:Envelope>
        </source>
        <target action="replace" type="envelope" />
    </enrich>
    <payloadFactory media-type="xml">
        <format>
            <man:QueryCustomerDetailsRequestMessage
                >
                <man:documentNumber>

I've created an RESTful API in wso2-am 2.0.0. But I'm face a problem and a would some help. I have a resource wiht GET http method which receive an url param and I made a SOAP payload to send via POST to backend (backend is soap11).

For this, I used a custom 'in' sequence:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="JSONtoSOAP" trace="disable"
    >
    <log description="Entrada" level="full" separator=",">
    <property expression="get-property('uri.var.cpfCnpj')" name="cpfcnpj" />
    <property name="trace"
        value="IN LOG" />
    </log>
    <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING" />
    <property name="messageType" scope="axis2" type="STRING"
    value="application/soap+xml" />
    <enrich>
        <source type="inline">
            <soap:Envelope >
                <soap:Body />
            </soap:Envelope>
        </source>
        <target action="replace" type="envelope" />
    </enrich>
    <payloadFactory media-type="xml">
        <format>
            <man:QueryCustomerDetailsRequestMessage
                >
                <man:documentNumber>$1</man:documentNumber>
                <man:tagetCRM />
            </man:QueryCustomerDetailsRequestMessage>
         </format>
        <args>
            <arg evaluator="xml" expression="get-property('uri.var.cpfCnpj')" />
        </args>
    </payloadFactory>
    <property name="REST_URL_POSTFIX" value="" scope="axis2" />
    <header name="Action" scope="default" value="queryCustomerDetails" />
    <log description="Saida" level="full" separator=",">
        <property name="trace" value="DEBUG LOG" />
    </log>
</sequence>

Until here, without problem.

But when I try to call the resource from any restClient (SOAPui for example or wso2-am store) result in Runtime exception, like this:

<?xml version='1.0' encoding='UTF-8'?>
<soap:Envelope >
    <soap:Body>
       <am:fault >
           <am:code/>
           <am:type>Status report</am:type>
           <am:message>Runtime Error</am:message>
           <am:description/>
       </am:fault>
     </soap:Body>
 </soap:Envelope>

Note that code and description tags are empty, and when I checked the server's log I found:

[2016-09-30 16:53:44,603]  INFO - LogMediator STATUS = Executing default 'fault' sequence, ERROR_CODE = null, ERROR_MESSAGE = null

This is the correct way to produces a restful API and call a SOAP backend?

Anybody knows about this issue? (I believe, this feature works on WSO2 ESB).

Somebody could help-me?

Thanks a lot!

</man:documentNumber>
<man:tagetCRM />
</man:QueryCustomerDetailsRequestMessage>
</format>
<args>
<arg evaluator="xml" expression="get-property('uri.var.cpfCnpj')" />
</args>
</payloadFactory>
<property name="REST_URL_POSTFIX" value="" scope="axis2" />
<header name="Action" scope="default" value="queryCustomerDetails" />
<log description="Saida" level="full" separator=",">
<property name="trace" value="DEBUG LOG" />
</log>
</sequence>

Пока здесь, без проблем.

Но когда я пытаюсь вызвать ресурс из любого restClient (SOAPui например или WSO2-am store) привести к исключению во время выполнения, как это:

<?xml version='1.0' encoding='UTF-8'?>
<soap:Envelope >
    <soap:Body>
       <am:fault >
           <am:code/>
           <am:type>Status report</am:type>
           <am:message>Runtime Error</am:message>
           <am:description/>
       </am:fault>
     </soap:Body>
 </soap:Envelope>

Обратите внимание, что теги кода и описания пусты, и когда я проверил журнал сервера, я нашел:

[2016-09-30 16:53:44,603]  INFO - LogMediator STATUS = Executing default 'fault' sequence, ERROR_CODE = null, ERROR_MESSAGE = null

Это правильный способ создать restful API и вызвать серверную часть SOAP?

Кто-нибудь знает об этом? (Я считаю, что эта функция работает на WSO2 ESB).

Кто-нибудь может помочь мне?

Большое спасибо!

1 ответ

  1. Вы можете попробовать следующее:

    • В издателе задайте тип конечной точки HTTP/SOAP
    • В вашей последовательности не установите REST_URL_POSTFIX в «», но удалите свойство полностью

    Дэнни