Посредник кэша ESB WSO2: кеширование в порядке, но клиенту отправляется пустой ответ

Я реализовал прокси-сервис для кеширования ответа от серверной (остальной) веб-службы. Мне нужно обработать ответ EP, например изменить ContentType на application / xml, поэтому я определил последовательность «OnCacheHit», в конце которой я использую посредник отправки для отправки сообщения обратно клиенту. Но клиент получает пустой ответ (независимо от того, вызываю ли я службу напрямую из своего браузера или из другой прокси-службы).

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="PS_with_cache"
    transports="https http local" startOnLoad="true" trace="disable"><description />
    <target>
        <inSequence>
            <log level="full" category="DEBUG" xmlns="http://ws.apache.org/ns/synapse" />
            <cache id="someCache" scope="per-host" collector="false"
                hashGenerator="org.wso2.caching.digest.DOMHASHGenerator" timeout="10">
                <onCacheHit>
                    <property name="ContentType" value="application/xml"
                        scope="axis2" type="STRING" />
                    <!-- I have to remove the To header, else it points towards PS_with_cache itself,
                    generating a "Malformed destination EPR" exception -->
                    <header name='To' action="remove"/>
                    <!-- logging the full payload of the message shows that 
                    the cache returned whzat i expected -->                 
                    <log category="DEBUG" level="full" />
                    <send/>
                </onCacheHit>
                <implementation type="memory" maxSize="1000" />
            </cache>
            <property name="HTTP_METHOD" value="GET" scope="axis2" type="STRING" />
            <send>
                <endpoint key="Back_end_rest_endpoint" />
            </send>
        </inSequence>

        <outSequence>
            <property name="ContentType" value="application/xml" scope="axis2"
                type="STRING" />
            <cache id="someCache" scope="per-host" collector="true" />
            <send />
        </outSequence>
    </target>
</proxy>

Он отлично работает, пока ответ не находится в кеше. Полный журнал внутри последовательности onCacheHit показывает, что кеш возвращает ожидаемый ответ. Так что проблема заключается в последующей "отправке".

Я предполагал, что сообщение было неправильно обработано как запрос, а не как ответ, поэтому я попытался изменить свойство synapse.isresponse, но это ничего не изменило.

Я действительно не могу понять, что здесь происходит, спасибо, что ответили ...


person Hugo    schedule 04.03.2014    source источник


Ответы (1)


Какую версию ESB вы используете и зависит ли от этого клиента?

Это было обнаружено в ESB 4.8.0. Вы можете найти исправление в [1]. Однако, начиная с ESB 4.9.0, кэширование ответов не поддерживается.

[1] https://wso2.org/jira/browse/ESBJAVA-3665

person asanthi    schedule 04.05.2016
comment
Привет и добро пожаловать в SO, и спасибо за ваш ответ. Обратите внимание, что хотя предоставленная вами ссылка может предоставить необходимую информацию для OP, чтобы ответить на этот вопрос, ссылки на сайты не приветствуются на SO. пожалуйста, взгляните на stackoverflow.com/help/how-to-answer Но не расстраивайтесь, предоставленная информация, вероятно, поможет OP - person Deepend; 04.05.2016