1

我有以下代理:

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

4

1 回答 1

0

基本上在上面的配置部分(带有过滤器中介的部分)它检查消息天气的“TO”标头属性是否等于 "http://localhost:9000.*"或不。如果触发了该条件,它只会将您的消息发送到目的地。否则消息在“out”中介内发送。

当您删除所发生的表达式时,它会尝试发送所有进入“in”调解器的消息,而不知道天气是否存在“To”属性。在您的情况下,传入的消息不包含有效的“收件人”属性。

主序列内发送消息的默认中介是“out”中介。“in”中介者不知道该消息应该作为响应发送,否则您没有明确说它是一条共振消息。您可以使用这样的配置来做到这一点

<header action="remove" name="To"/>
    <property action="set" name="RESPONSE" scope="default" type="STRING" value="true"/> 

但这在很大程度上取决于您的用例

我建议您阅读一些有关使用 WSO2 ESB 进行消息中介的参考资料。

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

谢谢,

于 2013-02-20T05:18:04.867 回答