WSO2 ESB — доступ к исходному сообщению из-за ошибки

Моя цель — поместить сообщения, которые возвращают мыльную ошибку, в очередь, чтобы повторить их позже.

У меня почти все работает, но самая важная часть: я не могу получить доступ к исходному сообщению из-за последовательности ошибок моего прокси :(

Сначала я сделал прокси-сервис, который возвращает ошибку для заданного значения или OK для других значений:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestProxyService" transports="http https" startOnLoad="true" trace="disable">
    <target>
        <inSequence>
            <log level="custom">
                <property name="TestProxyService" value="InSequence"/>
            </log>
            <switch xmlns:bnc="http://bnc.org/" source="//bnc:id">
                <case regex="1">
                    <log level="custom">
                        <property name="TestProxyService" value="Send Error !"/>
                    </log>
                    <makefault version="soap11">
                        <code xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/" value="soap11Env:VersionMismatch"/>
                        <reason value="ERROR ERROR ERROR"/>
                        <detail>ERROR</detail>
                    </makefault>
                    <respond/>
                </case>
                <default>
                    <log level="custom">
                        <property name="TestProxyService" value="No Error"/>
                    </log>
                    <log level="custom">
                        <property name="id" expression="//bnc:id"/>
                    </log>
                    <payloadFactory media-type="xml">
                        <format>
                            <bnc:response>OK</bnc:response>
                        </format>
                        <args/>
                    </payloadFactory>
                    <respond/>
                </default>
            </switch>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
</proxy>

И это работает нормально

Затем я сделал еще один прокси, который использует первый в качестве конечной точки для проверки очереди при ошибке:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="QueuingProxyService" transports="https http" startOnLoad="true" trace="disable">
    <target>
        <inSequence>
            <property name="FORCE_ERROR_ON_SOAP_FAULT" value="true" scope="default" type="STRING"/>
            <send>
                <endpoint key="TestProxyServiceEndpoint"/>
            </send>
        </inSequence>
        <outSequence>
            <send/>
        </outSequence>
        <faultSequence>
            <store messageStore="No1MessageStore"/>
            <makefault version="soap11">
                <code xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/" value="soap11Env:VersionMismatch"/>
                <reason value="There has been an error"/>
                <detail>We will retry later</detail>
            </makefault>
            <send/>
        </faultSequence>
    </target>
</proxy>

Сохраняемое сообщение — это сообщение, созданное makefault в TestProxy.

Я попытался сохранить исходное сообщение в свойстве (в inSequence) с помощью

<property name="OriginalBody" expression="$body" scope="axis2" type="OM"/>

но в faultSequence, когда я делаю это:

<log level="custom">
    <property name="OriginalBody" expression="get-property('OriginalBody')"/>
</log>

В результате я получил ноль :(

У кого-нибудь есть идея?

Спасибо !


person CBrunain    schedule 03.06.2015    source источник


Ответы (1)


удалите область «ось2» при определении свойства «OriginalBody» или явно укажите область видимости = «по умолчанию»:

<property name="OriginalBody" expression="$body" type="OM"/>
person Jean-Michel    schedule 03.06.2015