我实现了一个代理服务来缓存来自后端(其余)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属性,但它没有改变任何内容。
我真的无法弄清楚这里发生了什么,谢谢回答......
答案 0 :(得分:0)
您使用的ESB版本是什么?此租户是否具体?
这已在ESB 4.8.0中确定。你可以找到附加到[1]的修复程序 但是,从ESB 4.9.0开始不支持响应缓存。