Apache Camel - CXF:通用终端的客户配置

时间:2016-01-10 16:50:05

标签: apache-camel cxf integration

我的项目中有很多WSDL(> 100)文件(生成了很多WS java接口)。我想对cxf端点使用常规配置,而不是在每个ws的camel xml配置文件中配置许多端点。

<cxf:cxfEndpoint id="orderEndpoint"
    address="http://localhost:9000/order/"
    serviceClass="camelinaction.order.OrderEndpoint"/>

配置camel cxf端点而不是手动将其添加到每个ws的xml文件中是否有其他任何方式? 是否可以在生成的接口中自动使用一些camel注释?

2 个答案:

答案 0 :(得分:1)

没有Camel注释来自动发现类路径中的JAX-WS接口并将它们作为CXF端点加载。这对你的用例来说太具体了。

你可以做的是使用程序化Spring配置在Spring注册表中注册端点,Camel然后使用它来解析端点。

创建一个类并使用@Configuration对其进行注释,并使其实现BeanDefinitionRegistryPostProcessor以获得回调以及BeanDefinitionRegistry,这将允许您向注册表添加新bean。在此处查找示例:Spring - Programmatically generate a set of beans (answer 2)

现在您已经有了注册新bean的方法,您需要通过搜索类路径来查找JAX-WS端点。这个SO问题列出了几个备选方案:Find Java classes implementing an interface。由于您使用的是Spring,我建议您试用this one

您需要定义一种技术,以有意义且可预测的方式生成bean名称和URL,这样您就可以从Camel路由访问bean,从外部访问端点。

不要忘记在Spring XML中启用<context:component-scan />来指示Spring在Java类中搜索组件。

P.S。:这不要求您使用Camel的Java DSL。您只是使用Java代码来内省类路径并动态地将适当的bean注入Spring注册表。

答案 1 :(得分:0)

您可以使用Java DSL(而不是Spring XML)以编程方式声明端点。请参阅问题Apache Camel: RouteBuilder with CxfEndpoint以获取示例。

动态发现所有Web服务是一个单独的问题,有许多不同的可能解决方案(例如命名约定,实现共享接口,注释处理)。