在WSO2ESB 4.7.0中使用CallOut Mediator有什么用

时间:2013-11-11 12:31:37

标签: wso2 wso2esb wso2carbon

我正在使用wso2esb4.7.0.i正在使用单个代理中的不同操作我找到了一个示例博客,我经历了那个。但我不太清楚这个博客我的代理是这样的

    <inSequence xmlns="http://ws.apache.org/ns/synapse">
       <log level="full">
          <property name="M1" value="***************HITTING Transaction PROXY****************"/>
       </log>

       <property name="id" expression="//id/text()"/>
       <property name="name" expression="//name/text()"/>
        <payloadFactory media-type="xml">
          <format>
             <p:my_insert xmlns:p="http://ws.wso2.org/dataservice">           
                <xs:id xmlns:xs="http://ws.wso2.org/dataservice">$1</xs:id>           
                <xs:name xmlns:xs="http://ws.wso2.org/dataservice">$2</xs:name>       
             </p:my_insert>
          </format>
          <args>
             <arg expression="get-property('id')" evaluator="xml"/>
             <arg expression="get-property('name')" evaluator="xml"/>
          </args>
       </payloadFactory>
       <callout serviceURL="https://localhost:9445/services/DTPDS/" action="urn:my_insert">
          <source xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
          <target xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
       </callout>
       <payloadFactory media-type="xml">
          <format>
             <p:pos_insert xmlns:p="http://ws.wso2.org/dataservice">           
                <xs:id xmlns:xs="http://ws.wso2.org/dataservice">$1</xs:id>           
                <xs:name xmlns:xs="http://ws.wso2.org/dataservice">$2</xs:name>       
             </p:pos_insert>
          </format>
          <args>
             <arg expression="get-property('id')" evaluator="xml"/>
             <arg expression="get-property('name')" evaluator="xml"/>
          </args>
       </payloadFactory>
       <callout serviceURL="https://localhost:9445/services/DTPDS/" action="urn:pos_insert">
          <source xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
          <target xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
       </callout>
<log level="full>
<property name="message" value="working"/>
</log>
<inSequence>

在callout meditor上面的服务url用于命中端点和action是关于端点操作但有什么用 SOURCE和TARGET我试图接收到该来源的端点响应以及目标,但我无法得到响应那么两者的用途是什么 以及我如何将我的回复发送给我的客户,这意味着我可以在哪里获得此响应,我需要定义我的接收顺序请参考我任何明确的解释博客

1 个答案:

答案 0 :(得分:1)

'source'使用XPath表达式或注册表项指定请求消息的有效内容。 'target'指定将在当前消息上下文中附加结果有效负载(响应)的节点。

通过在示例配置中指定给定,响应将作为消息上下文中SOAP消息正文的第一个子对象附加。

callout mediator和send mediator之间的区别在于callout mediator将通过阻塞调用将响应返回到相同的序列。在send中,响应将返回到OutSequence,您可以在其中将其发送回客户端。

所以在这里你可以使用Send mediator(inSequence的结尾)来将消息发送到OutSequence。然后再在outSequence内部发送一个send,使其返回给客户端。

例如:

将下面的配置添加到inSequence的结尾

<header name="To" action="remove"/>
<property name="RESPONSE" value="true"/>
<send/>

然后在outSequence里面,再做一次发送。

    <outSequence>
        <send/>
    </outSequence>