如果删除过滤器,为什么在WSO2 ESB中出现传输错误?

时间:2013-02-15 12:17:41

标签: wso2esb

我有以下代理:

<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)。但这与“过滤器”有什么关系呢?

1 个答案:

答案 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 查看有关消息中介的一些参考资料。

以下是很好的参考资料,我发现希望你能找到更多

谢谢,