为什么呼叫不在wso2 esb中工作

时间:2017-01-30 11:34:13

标签: wso2 call esb mediator

我遇到wso2 esb的问题。 我写了一个代理,我调用端点对原始输入做了一些更改。但是呼叫前和呼叫后的日志是相同的(它应该是不同的)。似乎这个调用根本不起作用。当我发送respone到outsequence时它是null。任何人都可以说为什么会这样吗? (我在soupUI中测试了我的端点)

这是我的代理人:

      <inSequence>
     <property name="transport.vfs.ReplyFileName" value="GET" scope="transport"/>
     <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
     <smooks config-key="smooks-csv1">
        <input type="text"/>
        <output type="xml"/>
     </smooks>
     <iterate continueParent="true"
              preservePayload="true"
              attachPath="//csv-set"
              expression="//csv-set/search"
              sequential="true">
        <target>
           <sequence>
              <xslt key="gov:/first.xsl"/>
              <xslt key="gov:/second.xsl"/>
              **<log level="full"/>
              <call blocking="true">
                 <endpoint>
                    <address uri="MyEndPiont"/>
                 </endpoint>
              </call>
              <log level="full"/>**
           </sequence>
        </target>
     </iterate>
     <respond/>
  </inSequence>
  <outSequence>
     <aggregate>
        <completeCondition>
           <messageCount min="0" max="100"/>
        </completeCondition>
        <onComplete expression="//Guest">
        </onComplete>
     </aggregate>
  </outSequence>

2 个答案:

答案 0 :(得分:1)

试试这个。变更清单:

  • 删除了respond调解员。
  • call替换为send
  • 按顺序添加send

      <inSequence>
         <property name="transport.vfs.ReplyFileName" value="GET" scope="transport"/>
         <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
         <smooks config-key="smooks-csv1">
            <input type="text"/>
            <output type="xml"/>
         </smooks>
         <iterate continueParent="true"
                  preservePayload="true"
                  attachPath="//csv-set"
                  expression="//csv-set/search"
                  sequential="true">
            <target>
               <sequence>
                  <xslt key="gov:/first.xsl"/>
                  <xslt key="gov:/second.xsl"/>
                  <log level="full"/>
                  <send>
                     <endpoint>
                        <address uri="MyEndPiont"/>
                     </endpoint>
                  </send>
               </sequence>
            </target>
         </iterate>
      </inSequence>
      <outSequence>
         <aggregate>
            <completeCondition>
               <messageCount min="0" max="100"/>
            </completeCondition>
            <onComplete expression="//Guest">
            </onComplete>
         </aggregate>
         <send />
      </outSequence>
    

答案 1 :(得分:0)

试试blocking="false"。请注意,进行此更改不会使呼叫调解员成为asynchonus。无论阻塞是真还是假,它都是同步的。阻止只是一个实现细节。

  

Call mediator用于将消息从ESB发送到   端点。您可以在阻止或非阻塞中调用服务   方式。

     

以非阻塞模式调用服务时,基础工作程序   线程返回而不等待响应。在阻止模式下,   底层工作线程被阻塞并等待响应之后   将请求发送到端点。在阻止模式下调用mediator是   非常类似于Callout调解员。

     

在阻塞和非阻塞模式下,Call mediator的行为都在   同步方式。因此,调解在服务后暂停   调用并从序列中的下一个调解器恢复时   收到回复。呼叫中介允许您创建您的   独立于底层架构的配置。

引自https://docs.wso2.com/display/ESB500/Call+Mediator