我的项目中有许多WSDL(>100)文件(生成了许多WS java接口)。我想对cxf端点使用常规配置,而不是在camel xml配置文件中为每个ws配置许多端点。
<cxf:cxfEndpoint id="orderEndpoint"
address="http://localhost:9000/order/"
serviceClass="camelinaction.order.OrderEndpoint"/>是否有其他方法可以配置camel cxf端点,而无需手动将其添加到每个ws的xml文件中?是否可以在生成的接口中(自动)使用一些camel注释?
发布于 2016-01-11 21:47:04
没有Camel注释可以自动发现类路径中的JAX-WS接口并将其加载为CXF端点。这对你的用例来说太特别了。
您可以做的是使用可编程的Spring配置在Spring注册表中注册端点,然后Camel使用该注册表解析端点。
创建一个类并使用@Configuration对其进行注释,并使其实现BeanDefinitionRegistryPostProcessor,以便获得一个回调以及一个允许您向注册表中添加新bean的BeanDefinitionRegistry。在这里可以找到一个例子: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类中搜索组件。
附注:这不需要您使用Camel的Java DSL。您只需使用Java代码来内省类路径并动态地将适当的bean注入Spring注册表。
发布于 2016-01-11 03:17:47
您可以使用Java DSL (而不是Spring XML)以编程方式声明端点。有关示例,请参阅问题Apache Camel: RouteBuilder with CxfEndpoint。
动态发现您的所有web服务是一个单独的问题,有许多不同的可能解决方案(例如命名约定、实现共享接口、注释处理)。
https://stackoverflow.com/questions/34708107
复制相似问题