【问题标题】:Fuse ESB and web services - how to expose routes as web services or wrap existing services as web services融合 ESB 和 Web 服务 - 如何将路由公开为 Web 服务或将现有服务包装为 Web 服务
【发布时间】:2013-04-25 09:40:21
【问题描述】:
我真的很纠结如何将我的业务应用程序集成到 Fuse ESB。特别是 - Web 服务功能。我有几个问题-
1) 我可以在 Fuse ESB 中将 blueprint.xml 作为 Web 服务“包装”并从业务应用程序中调用它吗?
2) 如何使用 Fuse ESB 将现有功能公开为 Web 服务并调用它们?
感谢任何有 Fuse 知识的人可以帮助我!
【问题讨论】:
标签:
web-services
soap
apache-camel
fuseesb
【解决方案1】:
嗯,这是一种方法。这可能不是最好的方法(欢迎 cmets...),但无论如何都是这样。
您显然拥有 Web 服务的 wsdl,以及执行业务逻辑的代码。
使用cxf-codegen-plugin(用于generated-sources)和maven-bundle-plugin(用于捆绑配置和OSGI 连接)为您的Web 服务创建一个maven 模块
在您的blueprint.xml 中定义您的<camel-cxf:cxfEndpoint id="abc" ...,其中serviceClass 是您生成的端点接口类。
定义一个 <camel:camelContext id="abc" ...> 和一个 <camel:routeBuilder ref="xyz"/> 引用您定义的扩展 RouteBuilder 的 bean。
现在我们在扩展RouteBuilder 的类中工作。然后,configure() 方法应设置与 Web 服务中的每个操作相对应的骆驼路由。使用 java fluent builder 语法。
这是一个流畅的构建器语法示例:
from("direct:myOperation")
.routeId("myOperation")
.onException(SomeException.class).doSomething().doSomethingElse();
.validate(/* an expression */)
.beanRef("myBusinessLogicBean", "someMethod")
.convertBodyTo(MyResult.class)
基本上,我们把路由层改写成骆驼路由,通过beanRef调用业务逻辑——bean所在,以及它的依赖关系(比如datasources/dao的或者persistence.xml)在 blueprint.xml 中配置。
您可以在流畅的构建器语法中做一些非常好的事情 - 只需 google camel cxf 并浏览许多示例。您还可以访问所有 EIP(企业集成模式)。
您要做的最后一件事是定义一个feature.xml,它使用<bundle> 并定义正确的<feature> 依赖项(例如camel-cxf、camel-jpa 等)。
我希望这有助于您入门。