2015-01-09 63 views
1

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

注:

我使用WSO2 ESB版本4.8.1。 我已经在我的“axis2.xml”文件中启用了VFS传输。 我也尝试了与此相关的question中提供的所有解决方案。

我的服务代码:

<?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> 

问题区域:
问题出在下面的代码区,在那里我定义的故障序列我的终点。它确实在该特定位置创建了一个文件,但该文件仍然为空。

<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) 

回答

1

从faultSequence更改payloadFactory您的留言: 你的消息的根节点必须是:<text xmlns="http://ws.apache.org/commons/ns/payload">

这个节点的内容会文本值发送到您的文件

+0

我已经尝试过,但仍然是相同的例外.... –

+0

ESB现在还提供以下例外:通过端点发送消息:null解析为address = vfs:file:///home/omerkhalid/Documents/WSO2Test/FileWrite/Errorlog.txt –

+0

您必须为输入和输出启用vfs( transportReceiver AND transportSender)在axis2.xml中:你能验证吗? –