为什么调用在wso2 esb中不起作用

为什么调用在wso2 esb中不起作用,wso2,call,esb,mediator,Wso2,Call,Esb,Mediator,我对wso2 esb有问题。 我编写了一个代理,在这个代理中,我调用了一个端点来对原始输入进行一些更改。但是调用前和调用后的日志是相同的(应该不同)。似乎呼叫根本不起作用。当我向outsequence发送respone时,它是空的。有人能说为什么会这样吗?(我已经在soupUI测试了我的端点) 这是我的代理: <inSequence> <property name="transport.vfs.ReplyFileName" value="GET" scop

我对wso2 esb有问题。 我编写了一个代理,在这个代理中,我调用了一个端点来对原始输入进行一些更改。但是调用前和调用后的日志是相同的(应该不同)。似乎呼叫根本不起作用。当我向outsequence发送respone时,它是空的。有人能说为什么会这样吗?(我已经在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>

**
**
试试
blocking=“false”
。请注意,进行此更改不会使调用中介程序为asynchonus。无论阻塞是真是假,它都是同步的。阻塞只是一个实现细节

调用中介器用于将消息从ESB发送到 终点。您可以在阻塞或非阻塞模式下调用服务 态度

在非阻塞模式下调用服务时,底层工作进程 线程返回而不等待响应。在阻塞模式下 底层工作线程被阻止,并在之后等待响应 将请求发送到端点。阻塞模式下的调用中介是 与调出中介非常相似

在阻塞模式和非阻塞模式中,调用中介器都以 同步方式。因此,中介在服务结束后暂停 当 收到答复。Call mediator允许您创建 独立于底层架构的配置


引用自

试试这个。更改列表:

  • 已删除
    响应
    中介
  • 呼叫
    替换为
    发送
  • 按out顺序添加了
    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>
    
    
    

启用导线日志,请参阅。@巴西亚非常感谢你。现在我可以在控制台中看到所需的输出。但是为什么在正常情况下我看不到结果呢?如何保存此结果?启用wire log后,可以看到正确的输出。你能告诉我为什么会这样吗?如何保存结果?为什么respond不向out sequence发送任何内容?启用wire log与功能没有任何连接。您可以禁用它,然后重试确认。重新启动后,您的更改可能已正确部署。我刚刚注意到您使用了
respond
mediator,这在这里是无法使用的。我将在这里发布另一个答案。尝试一下。不幸的是,再次进行这些更改后,我无法看到后续的输出。它给了我这个错误:“error-vfstranportsender在附加VFS文件系统属性时出错。null error-vfstranportsender无法确定要发送消息的输出传输信息”。我该怎么办?提前感谢您可以尝试删除
OUT\u ONLY
属性吗?删除此属性后,我可以看到结果。但它给了我一个错误,因为我使用VFS,这是异步的。在发送部分,我将响应写入一个文件。这是错误:“VFS传输不支持同步响应。请使用适当的(仅限输出)消息交换模式”您所说的
发送部分是什么意思?接下来,我应该将结果发送到文件。这是聚合后的我的代码:“