如何使用WSO2 ESB中的InboundEndpoints处理回复

时间:2015-11-20 13:50:54

标签: wso2esb

刚开始使用WSO2 ESB版本4.9.0中的InboundEndpoints。

我想创建一个入站端点,轮询传入的文件,将其转发给服务并将服务回复保存到文件中。

我已经阅读了可用的文档和示例,这就是我想出来的。

<inboundEndpoint xmlns="http://ws.apache.org/ns/synapse"
                 name="testinbound"
                 sequence="TestIn"
                 onError="fault"
                 protocol="file"
                 suspend="false">
   <parameters>
      <parameter name="interval">1000</parameter>
      <parameter name="coordination">true</parameter>
      <parameter name="transport.vfs.ContentType">text/xml</parameter>
      <parameter name="transport.vfs.LockReleaseSameNode">false</parameter>
      <parameter name="transport.vfs.AutoLockRelease">false</parameter>
      <parameter name="transport.vfs.ActionAfterFailure">DELETE</parameter>
      <parameter name="transport.vfs.CreateFolder">true</parameter>
      <parameter name="sequential">true</parameter>
      <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
      <parameter name="transport.vfs.FileURI">//C:/Test/ST/in</parameter>
      <parameter name="transport.vfs.MoveAfterFailure">//C:/Test/ST/failure</parameter>
      <parameter name="transport.vfs.DistributedLock">true</parameter>
      <parameter name="transport.vfs.FileNamePattern">.*\.xml</parameter>
      <parameter name="transport.vfs.Streaming">true</parameter>
      <parameter name="transport.vfs.MoveAfterProcess">//C:/Test/ST/original</parameter>
      <parameter name="transport.vfs.Locking">disable</parameter>
      <parameter name="transport.vfs.FileSortAscending">true</parameter>
      <parameter name="transport.vfs.FileSortAttribute">NONE</parameter>
      <parameter name="transport.vfs.Build">false</parameter>
   </parameters>
</inboundEndpoint>

其中&#34; TestIn&#34;序列看起来像:

<sequence xmlns="http://ws.apache.org/ns/synapse"
          name="TestIn"
          onError="fault"
          statistics="enable">
   <in>
      <send>
         <endpoint key="conf:/stock_quote_config/stock_quote_endpoint_reg"/>
      </send>
   </in>
</sequence>

现在我对这段代码的行为以及如何实现目标有几个问题。

  1. 如何获得服务的回复?我试图在<out>序列中添加TestIn介体。我得到了以下内容:

    OutMediator Current message is a request - skipping child mediators

  2. 我还尝试了transport.vfs.ReplyFileURItransport.vfs.ReplyFileName参数。 奇怪的是,这些选项无法通过UI获得。我可以在配置源文件中指定它们,没有任何影响。

  3. (这些参数在4.9.0版本的文档中有所描述 https://docs.wso2.com/display/ESB490/VFS+Transport

    1. 那么如何保存回复?以及如何重定向回复? 我看到在TestIn序列之后,ESB在响应路径上执行了<main>序列 - 这就是我想要重新定义的内容。

    2. 我收到一条错误,指出该文件无法从&#34; in&#34;到#34;原来&#34;夹。 (事实上​​,执行后文件被移动。)

    3.   

      [2015-11-20 13:36:55,145]错误 - FilePollingConsumer错误移动   file:file:/// c:/Test/ST/in/test.xml to // C:/ Test / ST / original       org.apache.commons.vfs2.FileSystemException:无法删除&#34; file:/// c:/Test/ST/in/test.xml"。               在org.apache.commons.vfs2.provider.AbstractFileObject.deleteSelf(AbstractFileObject.java:849)               在org.apache.commons.vfs2.provider.AbstractFileObject.moveTo(AbstractFileObject.java:1139)               at org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.moveOrDeleteAfterProcessing(FilePollingConsumer.java:842)               在org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.directoryHandler(FilePollingConsumer.java:568)               在org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.poll(FilePollingConsumer.java:214)               在org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.execute(FilePollingConsumer.java:134)               at org.wso2.carbon.inbound.endpoint.protocol.file.FileTask.taskExecute(FileTask.java:45)               在org.wso2.carbon.inbound.endpoint.common.InboundTask.execute(InboundTask.java:44)               在org.wso2.carbon.mediation.ntask.NTaskAdapter.execute(NTaskAdapter.java:90)               at org.wso2.carbon.ntask.core.impl.TaskQuartzJobAdapter.execute(TaskQuartzJobAdapter.java:67)               在org.quartz.core.JobRunShell.run(JobRunShell.java:213)               at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471)               at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334)               at java.util.concurrent.FutureTask.run(FutureTask.java:166)               在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)               at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)               在java.lang.Thread.run(Thread.java:722)       引起:org.apache.commons.vfs2.FileSystemException:无法删除&#34; c:\ Test \ ST \ in \ test.xml&#34;。               在org.apache.commons.vfs2.provider.local.LocalFile.doDelete(LocalFile.java:127)               at org.apache.commons.vfs2.provider.AbstractFileObject.deleteSelf(AbstractFileObject.java:838)               ......还有16个

1 个答案:

答案 0 :(得分:0)

您可以使用Call mediator而不是send mediator。收到响应后,中介流将从序列中的下一个介体恢复。因此,您可以重定向或处理传入的响应。