0

(EndpointImpl.publish() を使用して) いくつかの Web サービスを公開しようとしていますが、次のエラーが発生します。

プロバイダー 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

他に何をする必要があるのか​​ わかりません。

大事な場合です。コンテナはカラフ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)
4

2 に答える 2

1

使用している CXF のバージョンはかなり古いようです。現在のリリース 2.6.1 で試してみてください。2.6 では、OSGi の多くの改善が導入されました。

次を使用してインストールできます: features:chooseurl cxf 2.6.1 features:install cxf

于 2012-06-26T20:31:33.803 に答える
0

心配しないでください。OSGi では、どのバンドルがどのパッケージを使用しているかなどの情報に完全にアクセスできます。問題のデバッグに必要な情報をシステムに提供するように求める方法を知っていればよいだけです。残念ながら、私は karaf コンソール コマンドに精通していません。ProSystの mBeddedServer OSGi フレームワークを使用していますが、これはすべて OSGi の標準であるため、何を探すべきかを教えて、必要なコマンドを karaf で見つけることができます。

したがって、以下を確認してください。 1. Apache cxf バンドルが正常にインストールされていますか? 「アクティブ」な状態ですか?(あなたの投稿から、そうであると思われます)

  1. エクスポートする org.apache.cxf.jaxws.spi パッケージのバージョンは何ですか? これは cxf バンドル バージョンとは異なります!!! パッケージのバージョンを確認するには、cxf バンドルのマニフェスト内を調べ、Export-package ヘッダーを探します。

  2. バンドルが正常にインストールされ、開始されていますか? アクティブな状態ですか?バンドルの開始時に「プロバイダーが見つかりません」というエラーが表示される場合、依存関係が cxf バンドルから提供されたパッケージと一致していません。ポイント 2 を参照してください。ただし、実行時にエラーが表示される場合は、いくつかの原因が考えられます。

  3. マニフェストに必要なすべてのパッケージをインポートしていません。ソース コードに基づいてマニフェストを生成できる分析ツールを使用してみてください。また:

  4. パブリッシュを行うコードは、たとえばシステム クラスパスに配置され、システム クラスローダーを使用します。OSGI では、モジュール性とセキュリティ上の理由により、バンドル クラスローダーにアクセスできません。OSGi バンドルとしてではなく、システム クラスパスによって提供されるものを確認してください。Class.forName やその他のリフレクション メソッドを使用するものは、モジュラー OSGi フレームワークでは機能しません。

他にも可能性はありますが、より多くの情報を提供する必要があります。例外スタック トレースはありましたか? このコードにはどのクラスが含まれており、それらはクラスパスのどこにありますか? 等

于 2012-06-27T08:17:19.563 に答える