刚开始使用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>
现在我对这段代码的行为以及如何实现目标有几个问题。
如何获得服务的回复?我试图在<out>
序列中添加TestIn
介体。我得到了以下内容:
OutMediator Current message is a request - skipping child mediators
我还尝试了transport.vfs.ReplyFileURI
和transport.vfs.ReplyFileName
参数。
奇怪的是,这些选项无法通过UI获得。我可以在配置源文件中指定它们,没有任何影响。
(这些参数在4.9.0版本的文档中有所描述 https://docs.wso2.com/display/ESB490/VFS+Transport)
那么如何保存回复?以及如何重定向回复?
我看到在TestIn
序列之后,ESB在响应路径上执行了<main>
序列 - 这就是我想要重新定义的内容。
我收到一条错误,指出该文件无法从&#34; in&#34;到#34;原来&#34;夹。 (事实上,执行后文件被移动。)
[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个
答案 0 :(得分:0)
您可以使用Call mediator而不是send mediator。收到响应后,中介流将从序列中的下一个介体恢复。因此,您可以重定向或处理传入的响应。