OSGI包异常,maven依赖问题

时间:2013-01-29 11:21:56

标签: java maven osgi apache-felix

我对OSGI,Felix和Maven的东西很新,只是从它开始。 我正在通过jenkins部署java构建,我得到以下依赖问题。

下面是包含依赖项的pom文件内容,我不确定它是否正确,但它仍然抱怨它。

正在寻找“javax.jws”,版本介于2.0和3.0之间

javax.jws;version>="2.0.0",!javax.jws;version>="3.0.0"

以下是pom内容。

                            <Import-Package>!sun.misc,!org.apache.avalon.framework.logger,
    !org.ietf.jgss,!org.apache.log,!org.apache.log.format,!org.apache.log.output.io,!com.werken.xpath,!org.apache.tools.ant,!org.apache.tools.ant.taskdefs,
    !org.jdom,!org.jdom.input,!org.jdom.output,com.mblox.ngp.sal*;
    version="${sal-utils-version}",org.apache.commons.logging;version="1.1",
    javax.jws;version>="2.0.0",!javax.jws;version>="3.0.0",
    com.sun.xml.ws.api.message,*
</Import-Package>

以下是我得到的例外情况:

[#|2013-01-29 11:07:44,109|ERROR|NGP-SAL-SALBootstrap-SAL-0|com.mblox.ngp.sal.platform.impl.Sal|172.18.36.38|slodev-rhatf4.mblox.com|sal-1|Unresolved constraint in bundle sap-ws-netcom [24]: Un
able to resolve 24.0: missing requirement [24.0] package; (&(package=javax.jws)(version>=2.0.0)(version>=2.0.0)(!(version>=3.0.0))) - [24.0] package; (&(package=javax.jws)(version>=2.0.0)(versi
on>=2.0.0)(!(version>=3.0.0)))|#]
org.osgi.framework.BundleException: Unresolved constraint in bundle sap-ws-netcom [24]: Unable to resolve 24.0: missing requirement [24.0] package; (&(package=javax.jws)(version>=2.0.0)(version
>=2.0.0)(!(version>=3.0.0))) - [24.0] package; (&(package=javax.jws)(version>=2.0.0)(version>=2.0.0)(!(version>=3.0.0)))
        at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3421)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1754)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:905)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:892)
        at com.mblox.ngp.sal.platform.impl.Sal.installBundle(Sal.java:608)
        at com.mblox.ngp.sal.platform.impl.Sal.getBundle(Sal.java:481)
        at com.mblox.ngp.sal.platform.impl.Sal.installSap(Sal.java:630)
        at com.mblox.ngp.sal.platform.impl.Sal.initSapBundles(Sal.java:545)
        at com.mblox.ngp.sal.platform.impl.Sal.start(Sal.java:290)
        at com.mblox.ngp.sal.platform.impl.SALBootstrap.call(SALBootstrap.java:64)
        at com.mblox.ngp.sal.platform.impl.SALBootstrap.call(SALBootstrap.java:24)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)

解决此问题的任何建议或指示。

4 个答案:

答案 0 :(得分:1)

是否有任何捆绑导出javax.jws包裹?如果没有,您可以将此Maven依赖项添加到您的构建中,并确保将其部署到Felix:

<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
    <version>1.1.2</version>
</dependency>

答案 1 :(得分:0)

一切似乎都符合预期。您已配置sap-ws-netcom包pom以声明需要j avax.jws包。容器正试图在尝试解决依赖关系时找到它。

org.osgi.framework.BundleException: Unresolved constraint in bundle sap-ws-netcom [24]: Unable to resolve 24.0: missing requirement [24.0] package; (&(package=javax.jws)(version>=2.0.0)(version
>=2.0.0)(!(version>=3.0.0))) - [24.0] package; (&(package=javax.jws)(version>=2.0.0)(version>=2.0.0)(!(version>=3.0.0)))
        at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3421)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1754)

问题很简单,OSGi容器没有javax.jws可用,至少在您要求的版本中没有。你认为你有没有?

使其可用的方式是安装导出该包的包。你必须自己做。这通常是OSGi的情况;如果你没有明确地使java包可用,那么它就不存在了。

答案 2 :(得分:0)

我在CQ5中使用Felix时遇到了javax.jws依赖项的问题,而且(奇怪的是)解决方案是在bundle manifest的Import-Package部分明确地不包含javax.jws和javax.jws.soap。如果您正在使用maven-bundle-plugin(就像我一样),您可以在说明中使用以下内容:

<plugin>
<groupid>org.apache.felix</groupid>
<artifactid>maven-bundle-plugin</artifactid>
<version>2.1.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<import-package>!javax.jws,!javax.jws.soap,*</import-package> 
</instructions>
</configuration>
</plugin>

我也不需要一个单独的bundle来导出javax.jws和javax.jws.soap。只需对我的捆绑包进行上述操作,该捆绑包具有Web服务客户端代码(使用wsimport生成)就足以使其正常工作。

另外一件事,我必须做的是添加

sling.bootdelegation.com.sun=com.sun.*

到sling.properties文件。

有关创建网络服务的CQ5教程在此页面上提及:http://helpx.adobe.com/adobe-cq/using/creating-cq-bundles-consume-web.html

  

“注意:

     

此工作流程适用于Adobe CQ;但是,你可能会遇到   以下例外:

     

引起:java.lang.ClassNotFoundException:   com.sun.xml.internal.ws.spi.ProviderImpl at   org.apache.sling.commons.classloader.impl.ClassLoaderFacade.loadClass(ClassLoaderFacade.java:127)   在java.lang.ClassLoader.loadClass(未知来源)at   javax.xml.ws.spi.FactoryFinder.safeLoadClass(未知来源)... 107   更多   解决方案:要解决此问题并确保您可以创建   使用本文所述的Web服务的bundle,修改   sling.properties文件位于crx-quickstart \ conf文件夹中。   将以下代码行添加到此文件中:   sling.bootdelegation.com.sun =的com.sun。*。然后重启服务器。一旦   执行此任务,您可以按照本文进行操作。“

答案 3 :(得分:0)

如果您正在运行Windows,请尝试将其放在C:\ G \或更短的路径名中。它解决了我的问题!