Apache camel 如何使用camel通过netty发送整个文件

Apache camel 如何使用camel通过netty发送整个文件,apache-camel,netty,Apache Camel,Netty,我试图用netty和camel发送整个文件的内容 <camel:route> <camel:from uri="file://test/?fileName=sample.txt&amp;noop=true&amp;delete=false"/> <camel:convertBodyTo type="java.lang.String"/>

我试图用netty和camel发送整个文件的内容

    <camel:route>
                <camel:from uri="file://test/?fileName=sample.txt&amp;noop=true&amp;delete=false"/>
                <camel:convertBodyTo type="java.lang.String"/>
                <camel:to uri="netty:tcp://localhost:9012?textline=true&amp;sync=true"/>        
    </camel:route>

我在这个终点有另一条路线:

    <camel:route>
            <camel:from uri="netty:tcp://localhost:9012?textline=true&amp;sync=true"/>
            <camel:process ref="fileCollector"/>
    </camel:route>

FileCollector::process()上的exchange似乎逐行包含数据,例如,如果文件的内容是

这是一号线

这是二号线


FileCollector::process()每行调用一次,这对我来说非常困难,因为我的要求是处理整个文件并发送回复。

您使用的是textline=true编解码器,它是一个单行编解码器-终止符字符是换行符字符

要传输整个文件,您需要构建自己的编解码器,或者使用任何内置的编解码器,例如长度编解码器


您需要进一步研究Netty编解码器如何做到这一点。

改进您的问题,因为如果您在问题中没有表现出努力,人们不希望/可以帮助您修改问题并提供更多详细信息,希望现在问题清楚了。我确实选择了编码器和解码器,但现在,我对这个错误感到震惊:“java.lang.IllegalArgumentException:无法为属性:解码器找到合适的setter,因为没有具有相同类型的setter方法:java.lang.String,也不可能进行类型转换:没有类型转换器可用于从类型:java.lang.String转换为所需类型:org.jboss.netty.channel.ChannelHandler,值为#eofDecoder”"; 看起来,Camel-Netty不会将bean名称强制转换为所需的类类型;我只使用spring dsl,所以我发现这很困难。如果您没有将spring xml与一起使用,则需要在Camel注册表中注册自定义编解码器。看起来,这是不兼容的Netty版本(使用了最新版本)的错误;与Netty 3.x合作;但现在来看另一个错误:java.lang.IllegalArgumentException:不支持的消息类型:class java.lang.String