2015-11-25 77 views
0

我有一个在Apache ServiceMix 4上运行的CXF服务,我试图将它安装在Fuse 6.2上,因为我们计划从apache servicemix迁移到保险丝。问题是依赖关系。在这种特定情况下我的服务依赖于javax.jws中:在Jboss Fuse中处理第三方JAR

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

如果我将web服务添加到配置文件我得到这个错误:

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:[email protected]> 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)有没有办法检查哪个bundle提供了特定的JAR?看来版本3.0.0的javax.jws已经安装,但我很喜欢导出它的bundle。

2)是否有办法克服第三方JAR的Bundle-ManifestVersion:1?如果不下载源代码并制作新的POM,那么......

3)必须始终“依靠”管理依存关系吗?有没有一种机制可以通过公共maven仓库下载所有必需的罐子?毕竟他们是在我项目的POM上发现的。

回答

0

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

对于非捆绑形式的罐子,您需要使用“包装”命令安装它们。这可能是你为什么得到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

0

我试图部署JBoss快速启动应用程序'肥皂'时有同样的例外。 '(&(osgi.wiring.package = javax.jws)(version> = 2.0.0)(!(version> = 3.0.0)))'是我例外的重要部分。

我不得不去在JBOSS_HOME /等,并在正确的JRE jre.properties您正在使用的变化:

javax.jws中,\

javax.jws中;版本= “2.0”,\

javax.jws.soap中,\

javax.jws.soap; version =“2。0“,\

这解决了我的问题