2015-01-09 2 views
1

Я использую транспорт VFS для опроса простого текстового файла, а затем отправляю текст файла в очередь. Этот поток работает нормально, но в случае возникновения ошибки при выполнении последовательности ошибок я хочу написать свое сообщение об ошибке в простой текстовый файл, и он не работает.Запись на текстовый файл с использованием VFS в WSO2 ESB 4.8.1

Примечание:

Я использую WSO2 ESB версии 4.8.1. Я включил транспорт VFS в мой файл «axis2.xml». Я также пробовал все решения, содержащиеся в этом 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

Изменить сообщение в payloadFactory с вашего faultSequence: Корневой узел сообщения должен быть: <text xmlns="http://ws.apache.org/commons/ns/payload">

и содержание этого узла будет текстовое значение, отправленное в ваш файл

+0

Я пробовал, но все же такое же исключение .... –

+0

ESB теперь также дает следующее исключение: Отправка сообщения через конечную точку: null, разрешающая адрес = vfs: file: ///home/omerkhalid/Documents/WSO2Test/FileWrite/Errorlog.txt –

+0

Вы должны включить vfs для ввода и вывода (transportReceiver AND transportSender) в axis2.xml: можете ли вы проверить? –

Смежные вопросы