【问题标题】:Apache Camel - CXF: general endpoint's customer configurationApache Camel - CXF:通用端点的客户配置
【发布时间】:2016-04-14 23:15:54
【问题描述】:

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

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

是否有任何其他方式来配置camel cxf端点而无需手动将其添加到每个ws的xml文件中? 是否可以(自动)在生成的界面中使用一些驼峰注解?

【问题讨论】:

    标签: apache-camel cxf integration


    【解决方案1】:

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

    您可以做的是使用编程 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 中启用 &lt;context:component-scan /&gt; 以指示 Spring 在 Java 类中搜索组件。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我知道我可以用 Java DSL 重写它,但它是一样的。问题在于自动生成 cxf-endpoints,因为我已经在我的项目中定义了许多 WSDL 和 ws 接口。我只对动态发现所有 Web 服务作为骆驼 cxf 端点的能力感兴趣。我不知道如何实现它,例如使用注释?
      • 也许可以以某种自动方式将我实现的 Web 服务作为 cxfEndpoint 添加到骆驼上下文中?
      • 如果你想使用注释,那么看看这个问题 - stackoverflow.com/questions/259140/…。您的问题并不是关于 CXF 或 Camel 恕我直言 - 您只是在寻找一种方法来发现具有某些功能的类。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多