Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件为空时Apache Camel 2.17 RouteBuilder路由不工作_Java_Apache Camel_Choice - Fatal编程技术网

Java 文件为空时Apache Camel 2.17 RouteBuilder路由不工作

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"))

我试图将空消息或空消息路由到系统上的本地存档,并处理包含内容的文件。使用Camel 2.17,Jboss融合servicemix捆绑包。我不能让它正常工作。一定是我做错了什么。我尝试了以下几种不同的方法(都有评论)

尝试的例子:

    } 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