【发布时间】:2015-11-27 17:59:14
【问题描述】:
是否可以为每个 Endpoint 而不是每个 CamelContext 声明拦截器?就我而言,我有很多 CamelContexts,我想将带有端点声明和拦截器的通用代码提取到一个文件中:camel-common-context.xml。提取端点绝对没有问题,但是如何提取拦截器呢?这是可能的还是它们应该在我想使用端点的每个 CamelContext 内?就我而言,在我在下面发布的修改后,它们在相关的骆驼上下文中不可见:
我的camel-common-context.xml:
<camelContext id="esb" xmlns="http://camel.apache.org/schema/spring">
<endpoint id="externalSystem" uri="${external.system.url}?throwExceptionOnFailure=false" />
<interceptFrom>
<convertBodyTo type="java.lang.String" />
<when>
<xpath>not(/soapenv:Envelope)</xpath>
<process ref="soapFaultProcessor" />
</when>
<otherwise>
<convertBodyTo type="java.lang.String" />
</otherwise>
</interceptFrom>
<interceptSendToEndpoint uri="ref:externalSystem">
<setHeader headerName="SYSTEM">
<constant>EXTERNAL</constant>
</setHeader>
<convertBodyTo type="java.lang.String" />
<to uri="log:wSSProcessor_external_system_request?level=DEBUG" />
</interceptSendToEndpoint>
</camelContext>
其他骆驼上下文(我只是在导入资源):
<import resource="camel-common-context.xml" />
当我在每个骆驼上下文中使用拦截器声明每个端点时,我没有问题,但这是一个错误的模式,有很多复制粘贴。
在这个question 中,我看到有一条信息“我认为使用 InterceptorStrategy 是不可能的,因为它期望它在同一个骆驼上下文中运行”。更重要的是我认为在一个应用程序中使用多个上下文是bad pattern
更新
我试图将我的架构更改为带有更多路由上下文的骆驼上下文跟进@Lukasz N 答案,但我遇到了障碍CamelBugWithRouteContexts。看起来很难解决我的问题,但它应该适用于高于 2.8 的骆驼版本。
【问题讨论】:
标签: java apache-camel esb interceptor