8

Glassfishでエンタープライズアプリケーションを実行すると、次の問題が発生します(他の誰かから報告されました)。Jettyの下では正常に動作します。

javax / xml / ws / spi / Providerは、META-INF / services / javax.xml.ws.spi.Providerリソースの作成について言及していますが、これはすでにCXFで提供されており、追加のリソースファイルを作成してもGlassfishでのこの問題は解決されません。

誰かがCXFがGlassFishの下で確実にピックアップされるようにする方法を知っていますか?
(CXF依存関係2.2.5のMavenマルチモジュールプロジェクトを使用しています)

ありがとう!
ティム


編集#1

今のところ問題をスキップしてMetroで作業していますが、誰かがポインタを持っている場合は、代わりにCXFを使用する方法を知りたいです。何も機能しない場合は、Webアプリケーションコンテナを切り替える必要があります(またはMetroを調べて自分の要件)


編集#2

<class-loader delegate="false"/>一部のソリューションでは、sun-web.xmlファイルに追加することで、戦争の修正について詳しく説明しています。ただし、これは非wareeアプリでは機能しません。

4

3 に答える 3

6

sun-web.xml を追加し、delegate=false をクラスローダーに設定します。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD 
Application Server 9.0 Servlet 2.5//EN' 
'http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd'> 
<sun-web-app> 
    <class-loader delegate="false"/> 
</sun-web-app> 
于 2010-12-09T15:33:02.597 に答える
1

Metro (Glassfish の JAX-WS 実装) jar はおそらく Glassfish に含まれていますが、それらをクラスパスから除外できますか? Maven を使用しているため、glassfish の依存関係を分析し、metro jar の除外を使用する必要があります。


Metro jar の前にアプリケーションのクラスパスに CXF jar を配置する必要があるようです。おそらくシステムのクラスローダー/クラスパスを変更することはできませんが、Thread.currentThread().getContextClassLoader()最初に CXF をロードするように変更することはできます。変更できるGlassfishのクラスパス設定もあるかもしれません

()のソースを調べてjavax.xml.ws.spi.FactoryFinder#find、プロバイダーが実際にどのように読み込まれるかを確認します

于 2010-01-14T14:12:08.287 に答える