Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Apache camel Camel不传递Exchange属性_Apache Camel_Weblogic12c - Fatal编程技术网

Apache camel Camel不传递Exchange属性

Apache camel Camel不传递Exchange属性,apache-camel,weblogic12c,Apache Camel,Weblogic12c,我需要传递一些有关Exchange对象属性的参数。据我所知和了解,最好在exchange属性上创建我的参数,因为消息的标题在路由过程中可能会更改。 Camel正在创建一个路由到另一个路由的新交换,但没有保存我的任何参数的历史记录 现在了解一下上下文:我正在使用部署在WebLogic12c上的Camel 2.16.1 相关Maven部分: <properties> <project.build.sourceEncoding>UTF-8</project.bui

我需要传递一些有关Exchange对象属性的参数。据我所知和了解,最好在exchange属性上创建我的参数,因为消息的标题在路由过程中可能会更改。 Camel正在创建一个路由到另一个路由的新交换,但没有保存我的任何参数的历史记录

现在了解一下上下文:我正在使用部署在WebLogic12c上的Camel 2.16.1

相关Maven部分:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <camel.version>2.16.1</camel.version>
  </properties>

  <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-cxf</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test-spring</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.ejb</groupId>
            <artifactId>ejb-api</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.13</version>
        </dependency>
    </dependencies>
我的问题是:在所有路由过程中,我从未在属性上获取属性。 我的目标是在Camel开始路由我的消息时设置一些属性,并使这些属性在流程结束前可用

TestProcess类演示了我如何尝试访问属性。 我还尝试了XML,但效果不佳:

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="file:/Users/user/camel-test/in?noop=false" />
        <setProperty propertyName="MY_PARAMETER_ID">
                <simple>some-value</simple>
        </setProperty>
        <to uri="file:/Users/user/camel-test/out" />
    </route>
    <route>
        <from uri="file:/Users/user/camel-test/out?noop=false" />
        <log message="MY_PARAMETER_ID = ${header.MY_PARAMETER_ID}" />
        <to uri="jms:CamelServer/CamelJMSModule!CamelQueue" />
    </route>
</camelContext>
根据Camel文件,这是:

Camel 2.8:用于跨传输跟踪消息的唯一id

但是这个面包屑索引只在JMS路由中保持不变,而在文件路由中保持不变


谢谢

无法通过文件端点在两条路由之间路由头/属性值。例如,使用直接端点或jms在两条路由之间进行通信


有关更多信息,请参阅或。

因为您使用的是新版本的camel,所以这种情况似乎已经发生。

从Camel 2.15起,属性语言已重命名为 交换属性以避免歧义、混淆和冲突 属性作为一个通用术语。因此,请使用exchangeProperty而不是 属性在使用Camel 2.15以后的版本时


尝试在xml dsl中使用该字段访问exchange属性。

不理解问题:您设置的exchange属性在路由的后面不可用?确实是@FritzDuchardt。Camel提供了一个setProperty标记,用于从路由定义xml向exchange添加属性。你试过了吗?是的,我真的需要一个类TestProcess来创建我的属性,但是我试过了,但没有成功。你的意思是说你在route 1fromfile:/Users/user/camel test/in?noop=false中设置的属性在route2文件:/Users/user/camel test/out中不可见/不可用?noop=false?我认为在两个文件端点之间提供头/属性信息是不可能的,但您可以使用例如直接端点。可能是一篇旧文章,但文件协议中的引用不支持头。您必须封送/序列化消息,以在消息有效负载中保留头。谢谢,我现在将检查是否可以使用此解决方案。基本上我需要在整个过程中访问一种会话令牌CAS票证,独立于端点/组件类型。能否将该标记附加到文件名并在路由过程中对其进行分析?@soilworker该问题仅使用JMS路由更新,但我在输出方面仍然存在相同的问题:INFO:MY\u PARAMETER\u ID=Try header而不是property:some value,如果可以,请保留该值解释为什么这被否决?这与你的问题无关吗?嗨,不是我,我还在尝试所有的例子,并为我找到更好的。
package com.test.camel;

import org.apache.camel.Exchange;
import org.apache.camel.Processor;

public class TestProcess implements Processor {

    public void process(Exchange exchange) throws Exception {

        //Just to get the Exchange ID, this ID is changing between routes
        System.out.println(exchange.getExchangeId());

        //The first time i try to get my custom property should return null of course
        System.out.println(exchange.getProperty("MY_PARAMETER_ID"));

        //So if my property does not exist in properties i will create it
        if(exchange.getProperty("MY_PARAMETER_ID") == null) {
            exchange.setProperty("MY_PARAMETER_ID", "SOME_VALUE");  
        }
    }
}
<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="file:/Users/user/camel-test/in?noop=false" />
        <setProperty propertyName="MY_PARAMETER_ID">
                <simple>some-value</simple>
        </setProperty>
        <to uri="file:/Users/user/camel-test/out" />
    </route>
    <route>
        <from uri="file:/Users/user/camel-test/out?noop=false" />
        <log message="MY_PARAMETER_ID = ${header.MY_PARAMETER_ID}" />
        <to uri="jms:CamelServer/CamelJMSModule!CamelQueue" />
    </route>
</camelContext>
<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="jms:CamelServer/CamelJMSModule!ReceiverQueue" />
        <setProperty propertyName="MY_PARAMETER_ID">
            <simple>some-value</simple>
        </setProperty>
        <to uri="jms:CamelServer/CamelJMSModule!CamelQueue" />
    </route>
    <route>
        <from uri="jms:CamelServer/CamelJMSModule!CamelQueue" />
        <log message="MY_PARAMETER_ID = ${header.MY_PARAMETER_ID}" />
        <to uri="jms:CamelServer/CamelJMSModule!FinalQueue" />
    </route>
</camelContext>
exchange.getIn().getHeader("breadcrumbId")
<route>
  <from uri="direct:a" />
  <recipientList>
    <exchangeProperty>myProperty</exchangeProperty>
  </recipientList>
</route>