在WSO2 ESB 4.8.1中使用VFS编写文本文件 [英] Writing on a text file using VFS in WSO2 ESB 4.8.1

查看:84
本文介绍了在WSO2 ESB 4.8.1中使用VFS编写文本文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用VFS传输来轮询简单的文本文件,然后将文件的文本发送到队列.此流程工作正常,但是在执行故障序列时出现错误情况的情况下,我想将错误消息写入一个简单的文本文件中,并且它不起作用.

I am using VFS transport to poll a simple text file and then i send the text of a file to a queue. This flow works fine but in case of error scenario when fault sequence is executed , i want to write my error message to a simple text file and it is not Working.

注意:

我正在使用WSO2 ESB版本4.8.1. 我在"axis2.xml"文件中启用了VFS传输. 我还尝试了

I am using WSO2 ESB Version 4.8.1. I have enabled the VFS transport in my "axis2.xml" file. I have also tried all the solutions provided in this question which is related to mine.

我的服务代码:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="FileWriteTest"
       transports="vfs"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <log level="full"
              separator="******************FileWrite In Sequence Start*************"/>
      </inSequence>
      <outSequence/>
      <faultSequence>

         <payloadFactory media-type="xml">
            <format>
               <MessageFormat xmlns="">
                  <ECode>$1</ECode>
                  <EMsg>$2</EMsg>
                  <EDetail>$3</EDetail>
                  <EException>$4</EException>
               </MessageFormat>
            </format>
            <args>
               <arg evaluator="xml" expression="get-property('ERROR_CODE')"/>
               <arg evaluator="xml" expression="get-property('ERROR_MESSAGE')"/>
               <arg evaluator="xml" expression="get-property('ERROR_DETAIL')"/>
               <arg evaluator="xml" expression="get-property('ERROR_EXCEPTION')"/>
            </args>
         </payloadFactory>
         <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
         <property name="ClientApiNonBlocking" scope="axis2" action="remove"/>
         <send>
            <endpoint>
               <address uri="vfs:file:///home/omerkhalid/Documents/WSO2Test/FileWrite/Errorlog.txt"/>
            </endpoint>
         </send>
      </faultSequence>
      <endpoint>
         <address uri="jms:/FileWriterResponse?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:6616&amp;transport.jms.DestinationType=queue"/>
      </endpoint>
   </target>
   <parameter name="transport.PollInterval">10</parameter>
   <parameter name="transport.vfs.FileURI">file://home/omerkhalid/Documents/WSO2Test/FileWrite/InTest</parameter>
   <parameter name="transport.vfs.MoveAfterProcess">file://home/omerkhalid/Documents/WSO2Test/FileWrite/DoneTest</parameter>
   <parameter name="transport.vfs.FileNamePattern">.*.txt</parameter>
   <parameter name="transport.vfs.ContentType">text/plain</parameter>
   <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
   <parameter name="serviceType">proxy</parameter>
   <description/>
</proxy>

问题区域:
问题出在以下代码区域,我在其中为故障序列定义端点.它确实在该特定位置创建了一个文件,但是该文件仍然为空.

Problem Area:
The problem is in the following area of code, where i am defining my endpoint for Fault Sequence. It does create an file on that particular location but that file remains empty.

<send>
<endpoint>
<address uri="vfs:file:///home/omerkhalid/Documents/WSO2Test/FileWrite/Errorlog.txt"/>
</endpoint>
</send>

例外:

org.apache.axis2.AxisFault: The system cannot infer the transport information from the file:///home/omerkhalid/Documents/WSO2Test/FileWrite/Errorlog.txt URL.
    at org.apache.axis2.description.ClientUtils.inferOutTransport(ClientUtils.java:81)
    at org.apache.axis2.client.OperationClient.prepareMessageContext(OperationClient.java:288)
    at org.apache.axis2.description.OutOnlyAxisOperationClient.executeImpl(OutOnlyAxisOperation.java:249)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
    at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:482)
    at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:59)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:338)
    at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:333)
    at org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:59)
    at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:97)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.mediators.MediatorFaultHandler.onFault(MediatorFaultHandler.java:85)
    at org.apache.synapse.FaultHandler.handleFault(FaultHandler.java:54)
    at org.apache.synapse.endpoints.AbstractEndpoint.invokeNextFaultHandler(AbstractEndpoint.java:640)
    at org.apache.synapse.endpoints.AbstractEndpoint.onFault(AbstractEndpoint.java:475)
    at org.apache.synapse.endpoints.AddressEndpoint.onFault(AddressEndpoint.java:43)
    at org.apache.synapse.FaultHandler.handleFault(FaultHandler.java:102)
    at org.apache.synapse.core.axis2.AsyncCallback.onError(AsyncCallback.java:67)
    at org.apache.axis2.engine.AxisEngine$TransportNonBlockingInvocationWorker.run(AxisEngine.java:643)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

推荐答案

从您的faultSequence中更改有效负载工厂中的消息: 邮件的根节点必须为:<text xmlns="http://ws.apache.org/commons/ns/payload">

Change your message in payloadFactory from your faultSequence : The root node of your message must be : <text xmlns="http://ws.apache.org/commons/ns/payload">

,此节点的内容将是发送到您文件的文本值

and the content of this node will be the text value sent to your file

这篇关于在WSO2 ESB 4.8.1中使用VFS编写文本文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆