WSO2 ESB缓存中介:缓存没问题,但空响应发送回客户端

时间:2014-03-04 10:58:55

标签: wso2 wso2esb synapse

我实现了一个代理服务来缓存来自后端(其余)Web服务的响应。我对EP的响应有一些处理方法,例如将ContentType更改为application / xml,因此我定义了一个“OnCacheHit”序列,最后我使用send mediator将消息发送回客户端。但客户端收到一个空响应(无论我是直接从我的浏览器还是从另一个代理服务调用该服务)。

<?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属性,但它没有改变任何内容。

我真的无法弄清楚这里发生了什么,谢谢回答......

1 个答案:

答案 0 :(得分:0)

您使用的ESB版本是什么?此租户是否具体?

这已在ESB 4.8.0中确定。你可以找到附加到[1]的修复程序 但是,从ESB 4.9.0开始不支持响应缓存。

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