OSGi 捆绑包中的 Websphere 8.5 + CXF。可能吗?

Websphere 8.5 + CXF in OSGi bundle. Is it possible?

我正在为基于 Websphere 8.5 和 OSGi 的设计编写 PoC。

我需要获取 SOAP 网络服务 运行 我们作为 OSGi 捆绑包并使用应用程序中其他 OSGi 捆绑包公开的 OSGi 服务。

我坚持尝试在 OSGi 包中获取 JAX-WS 服务。

到目前为止我尝试了什么:

  1. 获取普通 servlet 运行 作为 OSGi 包(有效)
  2. 获取 JAX-RS 服务 运行 作为 OSGi 包(有效)
  3. 使用 Websphere 提供的 JAX-WS 运行时获取 JAX-WS 服务 运行 作为 OSGi 包。这似乎不适用于从 JAX-WS 运行时抛出的异常
  4. 获取 JAX-WS 服务 运行 作为 OSGi 捆绑包禁用 Websphere 提供的 JAX-WS 运行时并尝试使用 OSGi 捆绑包嵌入 CXF2 运行时。不适用于从 JAXB 抛出的异常(class 某种冲突)。

在我对异常等进行过多解释之前。在 Websphere 8.5 中将 JAX-WS 服务部署为一个 OSGi 包是否有人感到高兴?有关于在 Karaf 中执行此操作的资源,但我仅限于 Websphere。

回答我自己的问题,

似乎不​​支持从 OSGi 包中创建 JAX-WS 服务的方式与 Servlet 和 REST 服务相同。

编辑: 以上说法不实,请看WASDEV forum跟帖。这个答案的其余部分对于 OSGi 和 SCA 仍然有效(尽管 SCA 的服务似乎是用 Axis2 而不是 CXF 实现的)

支持的是使用 SCA.

OSGi 服务 公开为 SOAP 服务

此答案的其余部分假设:

  1. 您有一个 OSGi 应用程序,其中一个捆绑包通过 blueprint.xml 公开您希望通过 SOAP 公开的服务。
  2. 您的 Eclipse IDE 没有 SCA 工具。
  3. 您有 Eclipse IDE 和 Websphere 工具(为您提供 OSGi 工具)
  4. 您有权访问 WAS 控制台 Web 应用程序

这些是通过 SOAP Web 服务访问服务所需的步骤

正在准备 OSGi 应用程序

  1. 在OSGi应用工程的APPLICATION.MF中,将服务接口标记为Application-ExportService header: Application-ExportService: service.ExternalService
  2. 在包含服务的 OSGi 包的 blueprint.xml 文件中,添加 <entry key="service.exported.interfaces" value="*"/> 属性,例如:

<service id="externalService" ref="externalServiceBean" interface="ccb.service.ExternalService"> <service-properties> <entry key="service.exported.interfaces" value="*"/> </service-properties> </service>

  1. 将项目导出为 EBA

正在准备 SCA 工件

  1. 创建具有以下结构的Java项目

/service.composite /META-INF/sca-contribution.xml

  1. sca-contribution.xml 可以如下所示:

<?xml version="1.0" encoding="UTF-8"?> <contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"> <deployable xmlns:ns1="http://www.example.com" composite="ns1:ServiceComposite" /> </contribution>

  1. service.composite 可以是这样的:

    <?xml version="1.0" encoding="UTF-8"?> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:scafp="http://www.ibm.com/xmlns/prod/websphere/sca/1.0/2007/06" targetNamespace="http://www.example.com" name="ServiceComposite"> <component name="ServiceComponent"> <scafp:implementation.osgiapp applicationSymbolicName="[Your OSGi Application name]" applicationVersion="1.0.0" /> <service name="[maching the ID of the service in the blueprint.xml]"> <binding.ws /> </service> </component> </composite>

  2. 将项目导出为 jar

通过 WAS 控制台部署全部

  1. 创建新的空 BLA

应用程序 -> 应用程序类型 -> Business-level 应用程序 -> 新

  1. 将 EBA 和 SCA jar 作为资产部署

应用程序 -> 应用程序类型 -> 资产 -> 导入

  1. 添加首先 EBA,然后添加 SCA jar 到业务级应用程序的已部署资产

应用程序 -> 应用程序类型 -> Business-level 应用程序 -> [你的应用程序] -> 添加(在 'Deployed assets' 下)

大功告成!您应该在服务器的日志

中看到端点 url

资源:

http://ianrobinson.blogspot.co.uk/2010/05/osgi-and-sca-come-together-in-websphere.html

http://www-01.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.osgi.doc/ae/ca_sca.html