• Camel FTP error:File operation failed: 150 Here comes the directory listing


    问题:写了一个Camel的FTP传输程序,在本地Win7和Ubuntu下运行都正常,但是在Redhat中报“File operation failed: 150 Here comes the directory listing”异常

    解决方法:

    首先贴出修改前的代码以及错误,如下:

    代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:camel="http://camel.apache.org/schema/spring"
           xsi:schemaLocation="
             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
             http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
        <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:META-INF/spring/FtpTransport.properties</value>
                    <value>file:etc/FtpTransport.cfg</value>
                </list>
            </property>
            <property name="ignoreResourceNotFound" value="true"/>
        </bean>
        <camel:camelContext id="FtpTransport" streamCache="false" trace="false">
            <camel:package>com.angusyang.ftpTransport</camel:package>
            <camel:route id="ftpTransport">
                <camel:from uri="{{source.fullUri}}?username={{source.ftpUser}}&amp;password={{source.ftpPassword}}
                    &amp;delete=false
                    &amp;binary=true
                    &amp;move=done
                    &amp;readLock=changed
                    &amp;useFixedDelay=true
                    &amp;stepwise=false
                    &amp;delay={{transport.fixedDelay}}
                    &amp;antInclude=**/*.xml
                    "/>
                <camel:log message="got file ${file:name}"/>
                <camel:marshal>
                    <camel:zipFile/>
                </camel:marshal>
                <camel:setHeader headerName="CamelFileName">
                    <camel:simple>${file:name.noext}.zip</camel:simple>
                </camel:setHeader>
                <camel:to uri="{{target.fullUri}}?username={{target.sftpUser}}&amp;password={{target.sftpPassword}}&amp;doneFileName=$simple{file:name.noext}.ack"/>
            </camel:route>
        </camel:camelContext>
    </beans>

    在RedHat系统下的错误:

    2017-05-11 05:14:41,610 [53.1.114/GL/TM1] WARN  FtpConsumer                    - Consumer FtpConsumer[ftp://127.0.0.1/GL/TM1?antInclude=**%2F*.xml&binary=true&delay=10000&delete=false&move=done&password=xxxxxx&readLock=changed&stepwise=false&useFixedDelay=true&username=angus] failed polling endpoint: Endpoint[ftp://127.0.0.1/GL/TM1?antInclude=**%2F*.xml&binary=true&delay=10000&delete=false&move=done&password=xxxxxx&readLock=changed&stepwise=false&useFixedDelay=true&username=angus]. Will try again at next poll. Caused by: [org.apache.camel.component.file.GenericFileOperationFailedException - File operation failed: 150 Here comes the directory listing.
     Accept timed out. Code: 150]
    org.apache.camel.component.file.GenericFileOperationFailedException: File operation failed: 150 Here comes the directory listing.
     Accept timed out. Code: 150
            at org.apache.camel.component.file.remote.FtpOperations.listFiles(FtpOperations.java:821)
            at org.apache.camel.component.file.remote.FtpConsumer.doPollDirectory(FtpConsumer.java:122)
            at org.apache.camel.component.file.remote.FtpConsumer.pollDirectory(FtpConsumer.java:82)
            at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:131)
            at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175)
            at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
            at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
            at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
            at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
            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:745)
    Caused by: java.net.SocketTimeoutException: Accept timed out
            at java.net.PlainSocketImpl.socketAccept(Native Method)
            at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:404)
            at java.net.ServerSocket.implAccept(ServerSocket.java:545)
            at java.net.ServerSocket.accept(ServerSocket.java:513)
            at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:832)
            at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:759)
            at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:3293)
            at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:3271)
            at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2930)
            at org.apache.camel.component.file.remote.FtpOperations.listFiles(FtpOperations.java:814)

    解决方法是,在代码中增加参数“passiveMode=true”就可以了,修改后如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:camel="http://camel.apache.org/schema/spring"
           xsi:schemaLocation="
             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
             http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
        <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:META-INF/spring/FtpTransport.properties</value>
                    <value>file:etc/FtpTransport.cfg</value>
                </list>
            </property>
            <property name="ignoreResourceNotFound" value="true"/>
        </bean>
        <camel:camelContext id="FtpTransport" streamCache="false" trace="false">
            <camel:package>com.angusyang.ftpTransport</camel:package>
            <camel:route id="ftpTransport">
                <camel:from uri="{{source.fullUri}}?username={{source.ftpUser}}&amp;password={{source.ftpPassword}}
                    &amp;delete=false
                    &amp;binary=true
                    &amp;move=done
                    &amp;readLock=changed
                    &amp;useFixedDelay=true
                    &amp;stepwise=false
                    &amp;passiveMode=true
                    &amp;delay={{transport.fixedDelay}}
                    &amp;antInclude=**/*.xml
                    "/>
                <camel:log message="got file ${file:name}"/>
                <camel:marshal>
                    <camel:zipFile/>
                </camel:marshal>
                <camel:setHeader headerName="CamelFileName">
                    <camel:simple>${file:name.noext}.zip</camel:simple>
                </camel:setHeader>
                <camel:to uri="{{target.fullUri}}?username={{target.sftpUser}}&amp;password={{target.sftpPassword}}&amp;doneFileName=$simple{file:name.noext}.ack"/>
            </camel:route>
        </camel:camelContext>
    </beans>
  • 相关阅读:
    汽车档位作用
    大家免着惊
    出头天 闽南语歌词
    Configuration所有配置简介
    android图片缓存框架Android-Universal-Image-Loader
    java泛型 之 入门(interface)
    broadcom6838开发环境实现函数栈追踪
    win 开机 Microsoft corparation 滚动栏
    Linux中下载,压缩,解压等命令
    python实现人人网用户数据爬取及简单分析
  • 原文地址:https://www.cnblogs.com/angusyang/p/6844542.html
Copyright © 2020-2023  润新知