我的项目中有很多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注释?
答案 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服务是一个单独的问题,有许多不同的可能解决方案(例如命名约定,实现共享接口,注释处理)。