在 Jboss Fuse 中处理第三方 JAR

Handling of third party JAR's in Jboss Fuse

我在 Apache ServiceMix 4 上有一个 CXF 服务 运行,我正在尝试将它安装在 Fuse 6.2 上,因为我们计划从 apache servicemix 迁移到 fuse。问题是依赖性。在这个特定实例中,我的服务依赖于 javax.jws:

<dependency>  
<groupId>javax.xml.ws</groupId>  
<artifactId>jaxws-api</artifactId>  
<version>2.1</version>  
<type>jar</type>  
<scope>compile</scope>  
</dependency>  

如果我将网络服务添加到配置文件中,我会收到此错误:

Caused by: java.lang.Exception: Unable to start bundle 285: Unresolved constraint in bundle XPTO [285]: Unable to resolve 285.1: missing requirement [285.1] osgi.wiring.package; (&(osgi.wiring.package=javax.jws)(version>=2.0.0)(!(version>=3.0.0)))  

所以我尝试手动将 jaxws-api v2.1 添加到配置文件中:

JBossFuse:admin@root> profile-edit  -b mvn:javax.xml.ws/jaxws-api/2.1 test-xpto  
Adding bundle:mvn:javax.xml.ws/jaxws-api/2.1 to profile:test-xpto version:1.0  

但这让我抛出一个例外

org.osgi.framework.BundleException: Unsupported 'Bundle-ManifestVersion' value: 1  

因此我有几个问题:

1) 有没有办法检查哪个包提供了特定的 JAR?似乎安装了 javax.jws 的 3.0.0 版,但我确定导出它的包是什么。

2) 有没有办法克服第三方 JAR 的 Bundle-ManifestVersion: 1?无需下载源代码并制作新的 POM,即...

3) 必须始终管理依赖关系 "by hand"?是否有一种机制可以让 fuse 通过 public maven 存储库下载所有需要的 jar?毕竟他们在我的项目的POM上被识别了。

对于捆绑包形式的 jar,您可以将它们作为捆绑包安装。

对于非捆绑形式的 jar,您需要使用 "wrap" 命令安装它们。这可能就是您收到 Bundle-ManifestVersion 错误的原因,因为 jar 在其清单文件中没有 属性。看这里:https://access.redhat.com/documentation/en-US/Fuse_ESB_Enterprise/7.1/html/Deploying_into_the_Container/files/DeployJar-Wrap.html

如果您要部署单独的包,那么是的,需要手动处理依赖项。为了让生活更轻松,您可以将它们全部放在功能文件中,然后只部署引用所有依赖项的功能文件。看这里:https://access.redhat.com/documentation/en-US/Red_Hat_JBoss_Fuse/6.0/html/Deploying_into_the_Container/files/DeployFeatures-Create.html

我在尝试部署 JBoss 快速启动应用程序 'soap' 时遇到了同样的异常。 '(&(osgi.wiring.package=javax.jws)(version>=2.0.0)(!(version>=3.0.0)))' 对我来说是异常的重要部分。

我必须转到 JBOSS_HOME/etc 中的 jre.properties 并在您使用的正确 JRE 下更改:

javax.jws,\

javax.jws;version="2.0",\

javax.jws.soap,\

javax.jws.soap;version="2.0",\

这解决了我的问题