当前位置: 首页 > 知识库问答 >
问题:

基于camel上下文文件中参数值的路由

樊令秋
2023-03-14
<route id="invokeGetMortgageAccountDetails">
<from uri="direct:invokeGetMortgageAccountDetails" />
<removeHeaders pattern="operationNamespace" />
<setHeader headerName="operationName">
<constant>getMortgageDetailsRequest</constant>
</setHeader>            
<to uri="cxf:bean:getBastionAcctDetailsClient" />                   
<removeHeaders pattern="*" />
</route>

我使用的是Camel2.15版本,我尝试通过一个名为length of account number的额外属性作为交换,并尝试与路由中的value匹配,但它没有工作。

处理器:

public void processMortgage(final Exchange Exchange)引发ServiceException{MessageContentsList MessageContentsList=(MessageContentsList)Exchange.Getin().GetBody();List paramsList=new ArrayList();String systemID=MessageContentsList.Get(0).ToString().Trim();String brandID=MessageContentsList.Get(1).ToString().Trim();String account=MessageContentsList.Get(2).ToString().Trim();String len=Integer.ToString().Trim();String len=Integer.ToString());paramsList.Add(account);Exchange.SetProperty(Constants.systemID,systemID);Exchange.SetProperty(len,len);Exchange.SetProperty(Constants.ErrorCode,null);Exchange.SetProperty(“MortgageAccountNumber”,Integer.ParseInt(account));}Exchange.Getin().SetBody(paramsList);}

路由配置:

<route id="invokeGetMortgageAccountDetails">             
<from uri="direct:invokeGetMortgageAccountDetails" />           <removeHeaders pattern="operationNamespace" />           
<setHeader headerName="operationName">
<constant>getMortgageDetailsRequest</constant>           </setHeader>            <choice>
                <when>
                    <simple>${body.len} == '8'</simple>
                    <to uri="cxf:bean:getPhoebusClient" />
                </when>
                <otherwise>
                    <to uri="cxf:bean:getBastionAcctDetailsClient" />
                </otherwise>            
 </choice>              
   <removeHeaders pattern="*" />         
 </route>

共有1个答案

乐正远
2023-03-14

如果您使用的是Apache Camel version>2.16,那么您可以使用

动态到endpoint

您可能需要使用Spring Expression语言来构建动态uri

 类似资料:
  • 我可以检查对象中的值并基于此进行路由吗(就像写到不同的文件一样?)。我可以在pojo中添加注释以避免final json中的字段 我想到了将object转换为json,然后发送到Queue。然后我可以使用jsonpath进行条件路由。但是,我怎样才能从final JSON中省略一个字段呢?

  • 我已经创建了一个独立的引导。我需要开始将其集成到更高的环境中。每个环境都有一个属性文件,其中包含特定于数据库的连接信息。由于这不存在于我的启动jar中,所以我想以某种方式添加该数据库的路径。属性文件,然后根据键读取条目。用于创建这样的bean: 但是在启动时,我不确定如何做到这一点:但我想指向下面的属性示例并提取我的值,并以某种方式填充我在开发中硬编码的application.properties

  • 如何将camel中的属性传递给不同的camel上下文?我当前的体系结构将处理4种不同类型的消息(A、B、C、D),它只对所有这些消息使用相同的路由,而保存时根据消息类型更改DB表名,但现在我有一个要求,我只需要为特定消息从exchange对象中保存很少的值。我正在考虑在路由中设置一个属性,消息类型是'E',我将把它指向另一个路由。但是如何将属性值传递给不同的camel上下文

  • 在 Blade 2.0.9 版本后加入了 RouteContext 这个类,作为路由的上下文操作。其本质是封装了 Request 和 Response,所以使用起来和它们的 API 是相同的,下面列举一下包含的方法列表。 请求相关 #request() #method() #uri() #keepAlive() #session() #isIE() #header(String headerNam

  • 我目前正在考虑处理OpenGL上下文重新创建。 我使用GLFW库创建OpenGL上下文,GL3W用于扩展加载器。 我的问题很简单:在重建上下文时,我是否应该考虑再次调用gl3wInit()?