我有以下代理:
<proxy name="expedientes" transports="https http" startOnLoad="true" trace="enable" statistics="enable">
<target inSequence="main" outSequence="main" faultSequence="main">
<endpoint>
<address uri="https://someweb/somepath/"/>
<property name="Authorization" expression="fn:concat('Basic ', base64Encode('user:password'))" scope="transport"/>
</endpoint>
</target>
</proxy>
使用此默认主序列:
<sequence name="main">
<in>
<log level="full"/>
<filter source="get-property('To')" regex="http://localhost:9000.*">
<send/>
</filter>
</in>
<out>
<send/>
</out>
</sequence>
当我删除过滤器并将其保留为:
<sequence name="main">
<in>
<log level="full"/>
<send/>
</in>
<out>
<send/>
</out>
</sequence>
我收到以下错误“发送消息时出现意外错误:org.apache.axis2.AxisFault:系统无法从/services/expedientes/indice.xml推断传输信息”:
TID: [] [WSO2 ESB] [2013-02-15 12:42:05,531] ERROR
{org.apache.synapse.core.axis2.Axis2Sender} - Unexpected error during sending message out
{org.apache.synapse.core.axis2.Axis2Sender}org.apache.axis2.AxisFault: The system cannot infer the transport information from the /services/expedientes/indice.xml URL. at
...
out消息应该(显然)使用相同的传输来回答请求(HTTP GET)。但这与“过滤器”有什么关系呢?
答案 0 :(得分:0)
基本上在上面的配置段(带有过滤器中介的段)中,它会检查消息的“TO”标头属性,它是否等于"http://localhost:9000.*"
。
如果该条件被触发,它只是将您的消息发送到目的地。否则消息会在“out”调解员内部发送。
当你删除所发生的表达时,它试图发送所有进入“in”mediator的消息而不知道天气有“To”属性。 在您的情况下,传入的消息不包含有效的“To”属性。
发送消息的主序列中的默认调解器是“out”调解器。 “in”调解器不知道消息应该作为响应发送,否则你没有明确说明它是一个共振消息。你可以通过使用这样的配置来实现它
<header action="remove" name="To"/>
<property action="set" name="RESPONSE" scope="default" type="STRING" value="true"/>
但它强烈依赖于您的用例
我建议您通过WSO2 ESB 查看有关消息中介的一些参考资料。
以下是很好的参考资料,我发现希望你能找到更多
谢谢,