WSO2 inboundEndpoint пытается проанализировать файл как XML, несмотря на transport.vfs.ContentType=»text / csv»

#wso2 #wso2esb #wso2carbon

#wso2 #wso2-esb

Вопрос:

При попытке использовать File inboundEndpoint в WSO2 5.0.0 для обработки входящего csv-файла я всегда получаю исключение, как будто WSO2 пытается проанализировать файл как XML, несмотря на то, что я установил для параметра transport.vfs.ContentType значение «text / csv» в конфигурации inboundEndpoint:

 <parameter name="transport.vfs.ContentType">text/csv</parameter>
  

Вот ошибка полного стека, которую я получаю:

 [2016-10-08 16:56:31,181] ERROR - FileInjectHandler Error while processing the file/folder
org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'i' (code 105) in prolog; expected '<'
 at [row,col {unknown-source}]: [1,1]
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
    at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:204)
    at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:154)
    at org.apache.axiom.om.impl.AbstractOMMetaFactory.createStAXSOAPModelBuilder(AbstractOMMetaFactory.java:73)
    at org.apache.axiom.om.impl.AbstractOMMetaFactory.createSOAPModelBuilder(AbstractOMMetaFactory.java:79)
    at org.apache.axiom.om.OMXMLBuilderFactory.createSOAPModelBuilder(OMXMLBuilderFactory.java:196)
    at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:65)
    at org.wso2.carbon.inbound.endpoint.protocol.file.FileInjectHandler.invoke(FileInjectHandler.java:141)
    at org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.processFile(FilePollingConsumer.java:763)
    at org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.directoryHandler(FilePollingConsumer.java:543)
    at org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.poll(FilePollingConsumer.java:214)
    at org.wso2.carbon.inbound.endpoint.protocol.file.FilePollingConsumer.execute(FilePollingConsumer.java:134)
    at org.wso2.carbon.inbound.endpoint.protocol.file.FileTask.taskExecute(FileTask.java:47)
    at org.wso2.carbon.inbound.endpoint.common.InboundTask.execute(InboundTask.java:45)
    at org.wso2.carbon.mediation.ntask.NTaskAdapter.execute(NTaskAdapter.java:98)
    at org.wso2.carbon.ntask.core.impl.TaskQuartzJobAdapter.execute(TaskQuartzJobAdapter.java:67)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:744)
  

И вот полная конфигурация для исходная конечная точка:

 <?xml version="1.0" encoding="UTF-8"?>
<inboundEndpoint name="BigBuyCategoryMapper" protocol="file" sequence="ProcessCategoryMapper" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
    <parameters>
        <parameter name="interval">5000</parameter>
        <parameter name="sequential">true</parameter>
        <parameter name="coordination">true</parameter>
        <parameter name="transport.vfs.ContentType">text/csv</parameter>
        <parameter name="transport.vfs.LockReleaseSameNode">false</parameter>
        <parameter name="transport.vfs.AutoLockRelease">false</parameter>
        <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
        <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
        <parameter name="transport.vfs.FileURI">file:///Users/gamac/temp/in</parameter>
        <parameter name="transport.vfs.MoveAfterFailure">file:///Users/gamac/temp/failed</parameter>
        <parameter name="transport.vfs.DistributedLock">false</parameter>
        <parameter name="transport.vfs.FileNamePattern">mapper_category.csv</parameter>
        <parameter name="transport.vfs.MoveAfterProcess">file:///Users/gamac/temp/done</parameter>
        <parameter name="transport.vfs.Locking">disable</parameter>
        <parameter name="transport.vfs.FileSortAttribute">none</parameter>
        <parameter name="transport.vfs.FileSortAscending">true</parameter>
        <parameter name="transport.vfs.CreateFolder">true</parameter>
        <parameter name="transport.vfs.Streaming">false</parameter>
        <parameter name="transport.vfs.Build">false</parameter>
    </parameters>
</inboundEndpoint>
  

Пожалуйста, помогите.

Спасибо!

Ответ №1:

Использование text / plain вместо text / csv, похоже, позволяет обойти эту проблему:

 <parameter name="transport.vfs.ContentType">text/plain</parameter>
  

Однако правильным решением, вероятно, является настройка построителя / форматирования сообщений для text / csv в соответствии с документацией WSO2: https://docs.wso2.com/display/ESB481/Working with Message Builders and Formatters