Java 文件为空时Apache Camel 2.17 RouteBuilder路由不工作
我试图将空消息或空消息路由到系统上的本地存档,并处理包含内容的文件。使用Camel 2.17,Jboss融合servicemix捆绑包。我不能让它正常工作。一定是我做错了什么。我尝试了以下几种不同的方法(都有评论) 尝试的例子:Java 文件为空时Apache Camel 2.17 RouteBuilder路由不工作,java,apache-camel,choice,Java,Apache Camel,Choice,我试图将空消息或空消息路由到系统上的本地存档,并处理包含内容的文件。使用Camel 2.17,Jboss融合servicemix捆绑包。我不能让它正常工作。一定是我做错了什么。我尝试了以下几种不同的方法(都有评论) 尝试的例子: } else if (Boolean.parseBoolean(isCompressedOnly)) { //Only Zipped or Compressed // .when(simple("${file:length} == 0"))
} else if (Boolean.parseBoolean(isCompressedOnly)) { //Only Zipped or Compressed
// .when(simple("${file:length} == 0"))
// .when(simple("${header.CamelFileLength} == 0" ))
// .when(header("CamelFileLength").isEqualTo(0))
// .when(body().isNull())
// .when(header("CamelFileLength").isEqualTo(0))
// .when(simple("${header.CamelFileLength} < 10" ))
// .when(simple("${header.CamelFileLength} &eq; 0" ))
// .when(simple("${file:length} == null"))
ZipFileDataFormat zipFile = new ZipFileDataFormat();
zipFile.setUsingIterator(true);
from(fromStr)
.routeId("Zipped.Only")
.log(LoggingLevel.INFO, "Message received ${file:name} for Only Zipped or Compressed files from host " + host)
.unmarshal(zipFile)
.split(body(Iterator.class))
.streaming()
.convertBodyTo(String.class)
.choice()
.when(simple("${file:length} == null"))
.wireTap("file" + errorArchive)
.log(LoggingLevel.INFO,"File Size: ${header.CamelFileLength}, File is Empty or Zero Length!")
.endChoice()
.otherwise()
.wireTap("file:" + fileArchive)
.split(body().tokenize("\n"), new FleetAggregationStrategy()).streaming()
.process(new EndpointParametersProcessor(decoderName))
.end()
.to(toStr);
} else {
唯一有效的语句(因为所有消息都被路由到空文件端点,即使它们具有长度/大小/数据/内容)
你能告诉我我做错了什么吗?谢谢大家!
在哪里可以找到与标头关联的方法?e、 g..when(标题(“结果”).isEqualTo(“A”) .to(路线A) 我尝试过不嵌套choice(),但所有内容都通过first when()路由 克劳斯,我试过读锁限制,它在这里没有影响
@Override
public void configure() throws Exception {
if (validateConfiguration()) {
final String fromStr = String.format("%s://%s@%s:%s/%s?password=RAW(%s)&recursive=%s&stepwise=%s&useList=%s&passiveMode=%s&disconnect=%s"
+ "&move=.processed"
+ "&maxMessagesPerPoll=0"
+ "&eagerMaxMessagesPerPoll=false"
+ "&sortBy=file:modified"
+ "&sendEmptyMessageWhenIdle=false"
+ "&delay=60000"
+ "&initialDelay=60000"
+ "&connectTimeout=15000"
+ "&localWorkDirectory=/tmp"
+ "&readLockMinLength=0"
, transport, username, host, port, path, password, recursive, stepwise, useList, passiveMode, disconnect);
// Format the To Endpoint from Parameter(s).
final String toStr = String.format("%s", toEndpoint);
我已将路由更改为如下所示,试图简化它。但它仍然不起作用,因为它接受所有文件,即使是我不想处理的长度为-0-零的文件。
我确实相信这就是选择的方式。当简单的陈述形成时,有些东西是不对的。我尝试了许多组合,所有组合都产生了相同的结果
from(fromStr)
.routeId("Zipped.Only")
.log(LoggingLevel.INFO, "Message received ${file:name} for Only Zipped or Compressed files from host " + host)
.unmarshal(zipFile)
.split(body(Iterator.class))
.streaming()
.convertBodyTo(String.class)
.wireTap("file:" + fileArchive)
.choice()
.when(simple("${header.CamelFileLength} > 0" ))
.split(body().tokenize("\n"), new FleetAggregationStrategy()).streaming()
.process(new EndpointParametersProcessor(decoderName))
.end()
.to(toStr)
.endChoice()
.end();
如果是,我只想在文件有数据或file.length!=0时处理或移动到tobeprocessed文件夹。简单语句的使用方式有问题???我会继续尝试
ge-digital/
├── [drwxr-xr-x 4.0K] core
│ ├── [drwxr-xr-x 4.0K] enriched
│ ├── [drwxr-xr-x 4.0K] mt1
│ │ └── [drwxr-xr-x 4.0K] processed
│ ├── [drwxr-xr-x 4.0K] mt2
│ │ └── [drwxr-xr-x 4.0K] processed
│ ├── [drwxr-xr-x 4.0K] mt3
│ │ └── [drwxr-xr-x 4.0K] processed
│ └── [drwxr-xr-x 4.0K] tobeprocessed
│ ├── [-rw-r--r-- 0] GCMS_20190420-0815.csv
│ ├── [-rw-r--r-- 0] GCMS_20190420-0816.csv
│ └── [-rw-r--r-- 0] GCMS_20190420-0817.csv
├── [drwxr-xr-x 4.0K] dbase
├── [drwxr-xr-x 4.0K] fleet
│ └── [drwxr-xr-x 4.0K] core
│ ├── [drwxr-xr-x 4.0K] archive
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0815.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0816.csv
│ │ └── [-rw-r--r-- 0] GCMS_20190420-0817.csv
│ └── [drwxr-xr-x 4.0K] error
└── [drwxr-xr-x 4.0K] upload
除了文件长度/大小错误外,路由现在基本正常。这是原始文件长度,而不是拆分文件长度。我如何解决这个问题?拆分前-CamelFileLength:598和file.length:598 拆分后-CamelFileLength:598和file.length:598
from(fromStr)
.routeId("Zipped.Only")
.log(LoggingLevel.INFO, "Message received ${file:name} for Only Zipped or Compressed files from host " + host)
.unmarshal(zipFile)
.split(body(Iterator.class))
.streaming()
.convertBodyTo(String.class)
.wireTap("file:" + fileArchive)
.log(LoggingLevel.INFO, "before split - CamelFileLength: ${header.CamelFileLength} and file.length: ${file:length}")
.split(body().tokenize("\n"), new FleetAggregationStrategy()) //.streaming()
.process(new EndpointParametersProcessor(decoderName))
.end()
.choice()
//.when(simple("${file:length} > 0"))
.when(simple("${header.CamelFileLength} > '0'"))
.log(LoggingLevel.INFO, "after split - CamelFileLength: ${header.CamelFileLength} and file.length: ${file:length}")
.to(toStr)
.otherwise()
.log(LoggingLevel.INFO, "Message received ${file:name} is Empty or Null")
.to("file:" + errorArchive)
.end();
最后,好的,我们终于开始工作了。伙计,像这样的小事会让你有点退步。对于那些感兴趣的人,也许会帮助你
我用的是body.size,hmmm,没有给出body的大小,然后我用的是body.length,这很管用。很多好的静态方法我都无法使用,我想我需要升级到新的camel版本。不管怎样,问题是CamelFileLength等头包含原始文件的长度/大小,而不是原来的长度/大小通过解组zipfile并拆分所有文件进行拆分。在实现上述功能之前,我一直在使用标题,因此,我们使用body()作为谓词,这很有效,并使用长度
} else if (Boolean.parseBoolean(isCompressedOnly)) { //Only Zipped or Compressed
ZipFileDataFormat zipFile = new ZipFileDataFormat();
zipFile.setUsingIterator(true);
from(fromStr)
.routeId("Zipped.Only")
.log(LoggingLevel.INFO, "Message received ${file:name} for Only Zipped or Compressed files from host " + host)
.unmarshal(zipFile)
.split(body(Iterator.class))
.streaming()
.convertBodyTo(String.class)
.wireTap("file:" + fileArchive)
.split(body().tokenize("\n"), new FleetAggregationStrategy()).streaming()
.process(new EndpointParametersProcessor(decoderName))
.end()
.choice()
.when(simple("${body.length} > '0'" ))
.to(toStr)
.end();
// .when(simple("${file:length} == 0"))
// .when(simple("${header.CamelFileLength} == 0" ))
// .when(header("CamelFileLength").isEqualTo(0))
// .when(body().isNull())
// .when(body().isNotNull())
// .when(header("CamelFileLength").isEqualTo(0))
// .when(simple("${header.CamelFileLength} < 10" ))
// .when(simple("${header.CamelFileLength} &eq; 0" ))
// .when(simple("${file:length} == null"))
} else {
收益率:
ge-digital/
├── [drwxr-xr-x 4.0K] core
│ ├── [drwxr-xr-x 4.0K] enriched
│ ├── [drwxr-xr-x 4.0K] error
│ │ └── [-rw-r--r-- 47] GCMS_2019-04-23_05-27-18.666.csv
│ ├── [drwxr-xr-x 4.0K] mt1
│ │ └── [drwxr-xr-x 4.0K] processed
│ ├── [drwxr-xr-x 4.0K] mt2
│ │ └── [drwxr-xr-x 4.0K] processed
│ ├── [drwxr-xr-x 4.0K] mt3
│ │ └── [drwxr-xr-x 4.0K] processed
│ │ ├── [-rw-r--r-- 2.9K] GCMS_112-A-001_Gas_Turbine_2019-04-23_05-29-18.csv
│ │ ├── [-rw-r--r-- 2.1K] GCMS_112-A-001_Gas_Turbine_cw_2019-04-23_05-29-18.csv
│ │ ├── [-rw-r--r-- 911] GCMS_112-A-001_Generator_2019-04-23_05-29-18.csv
│ │ ├── [-rw-r--r-- 2.8K] GCMS_112-A-002_Gas_Turbine_2019-04-23_05-29-18.csv
│ │ ├── [-rw-r--r-- 2.1K] GCMS_112-A-002_Gas_Turbine_cw_2019-04-23_05-29-18.csv
│ │ └── [-rw-r--r-- 888] GCMS_112-A-002_Generator_2019-04-23_05-29-18.csv
│ └── [drwxr-xr-x 4.0K] tobeprocessed
│ ├── [-rw-r--r-- 935K] GCMS_2019-04-23_05-27-44.673.csv
│ ├── [-rw-r--r-- 0] GCMS_2019-04-23_05-27-44.673.csv.camelLock
│ ├── [-rw-r--r-- 941K] GCMS_2019-04-23_05-28-07.013.csv
│ ├── [-rw-r--r-- 936K] GCMS_2019-04-23_05-28-33.694.csv
│ ├── [-rw-r--r-- 939K] GCMS_2019-04-23_05-29-02.300.csv
│ └── [-rw-r--r-- 946K] GCMS_2019-04-23_05-29-28.928.csv
├── [drwxr-xr-x 4.0K] dbase
├── [drwxr-xr-x 4.0K] fleet
│ └── [drwxr-xr-x 4.0K] core
│ ├── [drwxr-xr-x 4.0K] archive
│ │ ├── [-rw-r--r-- 981K] GCMS_20190319-0429.csv
│ │ ├── [-rw-r--r-- 977K] GCMS_20190319-0437.csv
│ │ ├── [-rw-r--r-- 982K] GCMS_20190319-0446.csv
│ │ ├── [-rw-r--r-- 977K] GCMS_20190319-0454.csv
│ │ ├── [-rw-r--r-- 980K] GCMS_20190319-0502.csv
│ │ ├── [-rw-r--r-- 988K] GCMS_20190319-0511.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0815.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0816.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0817.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0818.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0819.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0820.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0821.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0822.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0823.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0824.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0825.csv
│ │ ├── [-rw-r--r-- 15K] GCMS_20190420-0826.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0827.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0828.csv
│ │ └── [-rw-r--r-- 0] GCMS_20190420-0829.csv
│ └── [drwxr-xr-x 4.0K] error
└── [drwxr-xr-x 4.0K] upload
您能更好地描述什么不起作用吗?您是否看到文件组件上有一个readLockMinLength选项,您需要将其设置为0以允许拾取空文件。谢谢Claus!我将尝试readLockMinLength选项,但是,我试图简单地丢弃零长度文件,只处理包含内容的文件。Claus,我在哪里可以找到header语言的方法文档,我不知道是否可以使用,或者它需要什么参数,比如header()。isEqualTo(“A”)在哪里可以找到像isEqualTo()这样的方法desc?谢谢这种情况是,通过此路径的文件是压缩文件,sftp使用者将拿起zip文件,解压缩它,然后找到文件,有时这些文件是零-0-lengthok,我知道发生了什么。这是选择的位置。阻塞时,向前看驼峰文件长度显示文件大小still作为压缩文件的文件,而不是从zip file..log(LoggingLevel.INFO,“CamelFileLength:${header.CamelFileLength}和file.length:${file:length})拆分的文件)此时显示CamelFileLength:598和file.length:598。克劳斯,谢谢,现在真正的问题出现了。看来原始文件的文件长度,即压缩后的压缩文件在整个路径旅行过程中都保持不变。是否有方法捕获文件大小?请参阅新的代码帖子。您能更好地描述一下什么不起作用吗g?您是否看到文件组件上有一个readLockMinLength选项,您需要将其设置为0以允许拾取空文件。谢谢Claus!我将尝试readLockMinLength选项,但是,我试图简单地放弃零长度文件,只处理包含内容的文件。Claus,我在哪里可以找到头语言的方法文档,我知道我不知道我是否可以使用或它需要什么参数,例如header().isEqualTo(“A”)在哪里可以找到像isEqualTo()这样的方法desc?谢谢这种情况是,通过此路径的文件是压缩文件,sftp使用者将拿起zip文件,解压缩它,然后找到文件,有时这些文件是零-0-lengthok,我知道发生了什么。这是选择的位置。阻塞时,向前看驼峰文件长度显示文件大小still作为压缩文件的文件,而不是从zip file..log(LoggingLevel.INFO,“CamelFileLength:${header.CamelFileLength}和file.length:${file:length})拆分的文件)此时显示CamelFileLength:598和file.length:598。克劳斯,谢谢,现在真正的问题出现了。原始文件的文件长度,即压缩后的压缩文件,似乎在整个行程中都保持不变。是否有方法在此处捕获文件大小?请参阅新代码帖子。
} else if (Boolean.parseBoolean(isCompressedOnly)) { //Only Zipped or Compressed
ZipFileDataFormat zipFile = new ZipFileDataFormat();
zipFile.setUsingIterator(true);
from(fromStr)
.routeId("Zipped.Only")
.log(LoggingLevel.INFO, "Message received ${file:name} for Only Zipped or Compressed files from host " + host)
.unmarshal(zipFile)
.split(body(Iterator.class))
.streaming()
.convertBodyTo(String.class)
.wireTap("file:" + fileArchive)
.split(body().tokenize("\n"), new FleetAggregationStrategy()).streaming()
.process(new EndpointParametersProcessor(decoderName))
.end()
.choice()
.when(simple("${body.length} > '0'" ))
.to(toStr)
.end();
// .when(simple("${file:length} == 0"))
// .when(simple("${header.CamelFileLength} == 0" ))
// .when(header("CamelFileLength").isEqualTo(0))
// .when(body().isNull())
// .when(body().isNotNull())
// .when(header("CamelFileLength").isEqualTo(0))
// .when(simple("${header.CamelFileLength} < 10" ))
// .when(simple("${header.CamelFileLength} &eq; 0" ))
// .when(simple("${file:length} == null"))
} else {
ge-digital/
├── [drwxr-xr-x 4.0K] core
│ ├── [drwxr-xr-x 4.0K] enriched
│ ├── [drwxr-xr-x 4.0K] error
│ │ └── [-rw-r--r-- 47] GCMS_2019-04-23_05-27-18.666.csv
│ ├── [drwxr-xr-x 4.0K] mt1
│ │ └── [drwxr-xr-x 4.0K] processed
│ ├── [drwxr-xr-x 4.0K] mt2
│ │ └── [drwxr-xr-x 4.0K] processed
│ ├── [drwxr-xr-x 4.0K] mt3
│ │ └── [drwxr-xr-x 4.0K] processed
│ │ ├── [-rw-r--r-- 2.9K] GCMS_112-A-001_Gas_Turbine_2019-04-23_05-29-18.csv
│ │ ├── [-rw-r--r-- 2.1K] GCMS_112-A-001_Gas_Turbine_cw_2019-04-23_05-29-18.csv
│ │ ├── [-rw-r--r-- 911] GCMS_112-A-001_Generator_2019-04-23_05-29-18.csv
│ │ ├── [-rw-r--r-- 2.8K] GCMS_112-A-002_Gas_Turbine_2019-04-23_05-29-18.csv
│ │ ├── [-rw-r--r-- 2.1K] GCMS_112-A-002_Gas_Turbine_cw_2019-04-23_05-29-18.csv
│ │ └── [-rw-r--r-- 888] GCMS_112-A-002_Generator_2019-04-23_05-29-18.csv
│ └── [drwxr-xr-x 4.0K] tobeprocessed
│ ├── [-rw-r--r-- 935K] GCMS_2019-04-23_05-27-44.673.csv
│ ├── [-rw-r--r-- 0] GCMS_2019-04-23_05-27-44.673.csv.camelLock
│ ├── [-rw-r--r-- 941K] GCMS_2019-04-23_05-28-07.013.csv
│ ├── [-rw-r--r-- 936K] GCMS_2019-04-23_05-28-33.694.csv
│ ├── [-rw-r--r-- 939K] GCMS_2019-04-23_05-29-02.300.csv
│ └── [-rw-r--r-- 946K] GCMS_2019-04-23_05-29-28.928.csv
├── [drwxr-xr-x 4.0K] dbase
├── [drwxr-xr-x 4.0K] fleet
│ └── [drwxr-xr-x 4.0K] core
│ ├── [drwxr-xr-x 4.0K] archive
│ │ ├── [-rw-r--r-- 981K] GCMS_20190319-0429.csv
│ │ ├── [-rw-r--r-- 977K] GCMS_20190319-0437.csv
│ │ ├── [-rw-r--r-- 982K] GCMS_20190319-0446.csv
│ │ ├── [-rw-r--r-- 977K] GCMS_20190319-0454.csv
│ │ ├── [-rw-r--r-- 980K] GCMS_20190319-0502.csv
│ │ ├── [-rw-r--r-- 988K] GCMS_20190319-0511.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0815.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0816.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0817.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0818.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0819.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0820.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0821.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0822.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0823.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0824.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0825.csv
│ │ ├── [-rw-r--r-- 15K] GCMS_20190420-0826.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0827.csv
│ │ ├── [-rw-r--r-- 0] GCMS_20190420-0828.csv
│ │ └── [-rw-r--r-- 0] GCMS_20190420-0829.csv
│ └── [drwxr-xr-x 4.0K] error
└── [drwxr-xr-x 4.0K] upload