我正在尝试发布一些Web服务(使用EndpointImpl.publish()),但是我遇到了这个错误:
未找到提供商org.apache.cxf.jaxws.spi.ProviderImpl
安装了cxf-bundle:
[ 79] [Active ] [Created ] [ 50] Apache CXF Bundle Jar (2.4.3.fuse-01-02)
osgi:headers的摘录显示导入的包
Import-Package =
javax.jws,
javax.persistence;version="[1.1,2)",
javax.servlet;version="[2.5,3)",
javax.xml.bind,
javax.xml.bind.annotation,
javax.xml.bind.annotation.adapters,
javax.xml.datatype,
javax.xml.namespace,
javax.xml.parsers,
javax.xml.transform,
javax.xml.transform.stream,
javax.xml.validation,
javax.xml.ws;version="[2.2,3)",
javax.xml.ws.soap;version="[2.2,3)",
javax.xml.ws.wsaddressing;version="[2.2,3)",
org.apache.commons.lang;version="[2.5,3)",
org.apache.commons.logging;version="[1.1,2)",
org.apache.cxf.jaxws;version="[2.4,3)",
org.apache.cxf.jaxws.spi;version="[2.4,3)", <--- imported
org.apache.cxf.ws.addressing;version="[2.4,3)",
org.apache.felix.gogo.commands;version="[0.10,1)",
org.apache.openjpa.enhance;version="[2.2,3)",
org.apache.openjpa.util;version="[2.2,3)",
org.osgi.framework;version="[1.5,2)",
org.osgi.service.blueprint;version="[1.0.0,2.0.0)",
org.springframework.beans.factory.xml;version="[3.0,4)",
org.springframework.context;version="[3.0,4)",
org.springframework.context.support;version="[3.0,4)",
org.w3c.dom,
org.xml.sax
Require-Bundle =
org.apache.cxf.bundle
我不确定我还需要做什么。
如果重要的话。容器是karaf 2.2.7
解决呸的答案:
1- cxf-bundle正在导出此包:org.apache.cxf.jaxws.spi; version =“2.4.3.fuse-01-02”
2-束开始了。错误发生在运行期间。
3-清单是使用maven-bundle-plugin创建的,它应该创建整个列表
4-创建Web服务端点时发生错误:
TopologyIFPortType impl = new TopologyWS();
String addressTopology = "http://localhost:" + port
+ "/nsp/webservice/topology";
topologyEndpoint = (EndpointImpl) Endpoint.create(impl);
topologyEndpoint.getFeatures().add(new WSAddressingFeature());
topologyEndpoint.publish(addressTopology);
完整的痕迹:
javax.xml.ws.spi.FactoryFinder$ConfigurationError: Provider org.apache.cxf.jaxws.spi.ProviderImpl not found
at javax.xml.ws.spi.FactoryFinder$2.run(FactoryFinder.java:130)
at javax.xml.ws.spi.FactoryFinder.doPrivileged(FactoryFinder.java:220)
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.java:124)
at javax.xml.ws.spi.FactoryFinder.access$200(FactoryFinder.java:44)
at javax.xml.ws.spi.FactoryFinder$3.run(FactoryFinder.java:211)
at javax.xml.ws.spi.FactoryFinder.doPrivileged(FactoryFinder.java:220)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:160)
at javax.xml.ws.spi.Provider.provider(Provider.java:43)
at javax.xml.ws.Endpoint.create(Endpoint.java:41)
at javax.xml.ws.Endpoint.create(Endpoint.java:37)
at org.opennaas.extensions.idb.webservice.WebServiceHolder.startTopology(WebserviceControl.java:78)
at org.opennaas.extensions.idb.webservice.WebServiceHolder.start(WebserviceControl.java:60)
at org.opennaas.extensions.idb.webservice.WebserviceControl.startWebservices(WebserviceControl.java:32)
at org.opennaas.extensions.idb.shell.StartWebservices.doExecute(StartWebservices.java:16)
at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:38)
at org.apache.felix.gogo.commands.basic.AbstractCommand.execute(AbstractCommand.java:35)
at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)
at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:474)
at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:400)
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)
at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:89)
at org.apache.karaf.shell.console.jline.Console.run(Console.java:240)
at java.lang.Thread.run(Thread.java:679)
答案 0 :(得分:1)
您使用的CXF版本似乎很旧。您应该尝试使用当前版本2.6.1。在2.6中,引入了许多OSGi改进。
您可以使用以下方法安装它: 功能:chooseurl cxf 2.6.1 功能:安装cxf
答案 1 :(得分:0)
不用担心,OSGi让您可以完全访问捆绑包使用哪个包等的信息。您只需要知道如何让系统为您提供调试问题所需的信息。 不幸的是我不熟悉karaf控制台命令,我正在使用ProSyst's mBeddedServer OSGi framework,但由于所有这些都是OSGi的标准,我可以告诉你要查找什么,你可以在karaf中找到所需的命令。
因此,请检查以下内容: 1. Apache cxf软件包是否已成功安装?它处于“活跃”状态吗? (从你的帖子看来它似乎是)
它导出的org.apache.cxf.jaxws.spi包的版本是什么? 这与cxf捆绑版本不同!!! 要查看软件包版本,请查看cxf软件包的清单,然后查找Export-package标头。
您的套装是否已成功安装并启动?它处于活动状态吗? 如果在启动捆绑包期间出现错误“找不到提供者”,则您的依赖关系与cxf包中提供的包不匹配,请参阅第2点。 但是,如果在运行时出现错误,则可能有多种原因:
您尚未在清单中导入所有需要的包。尝试使用分析工具,它可以根据您的源代码为您生成清单。 或者:
还有其他可能性,但您需要提供更多信息。是否存在异常堆栈跟踪?这段代码涉及哪些类以及它们在类路径中的位置?等