2011-10-19 19 views
0

私は、Glassfish 3.1.1にCXF WebサービスクライアントライブラリとJersey Webサービスクライアントライブラリを使用する戦争を展開しようとしています。 Glassfishのは、JAX-WS実装として代わりにメトロのCXFを使用して取得するためには、私は、次の内容でglassfish-web.xmlファイルを含めています:Glassfish 3.1 - 同じ戦争に展開されたCXFとジャージーのクライアント?

<?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'> 

<glassfish-web-app> 
    <!-- Need this to tell Glassfish not to load the JAX-WS RI classes so it will 
     use the CXF ones instead --> 
    <class-loader delegate="false" /> 
</glassfish-web-app> 

をこれは私のジャージークライアントの問題を引き起こす望ましくない効果があります。

2011 Oct 19 15:04:16,994 MDT [http-thread-pool-80(3)] ERROR my.company.MyServlet - Error testing JerseyClient 
java.lang.NoSuchMethodError: com.sun.jersey.core.spi.component.ProviderServices.<init>(Ljava/lang/Class;Lcom/sun/jersey/core/spi/component/ProviderFactory;Ljava/util/Set;Ljava/util/Set;)V 
     at com.sun.jersey.api.client.Client.init(Client.java:242) 
     at com.sun.jersey.api.client.Client.access$000(Client.java:118) 
     at com.sun.jersey.api.client.Client$1.f(Client.java:191) 
     at com.sun.jersey.api.client.Client$1.f(Client.java:187) 
     at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193) 
     at com.sun.jersey.api.client.Client.<init>(Client.java:187) 
     at com.sun.jersey.api.client.Client.<init>(Client.java:170) 
     at com.sun.jersey.api.client.Client.create(Client.java:679) 
     at my.company.MyJerseyClient.<init>(MyJerseyClient.java:93) 

ジャージーライブラリーは戦争に含まれているため(Glassfishで提供される予定はないため)、私はこれを理解していません。

私は、ジャージーのクライアントが正常に動作し、glassfish-web.xmlファイルが含まれていませんが、私はCXFクライアントにこのエラーが出た場合:

2011-10-19T15:00:53.993-0600|WARNING|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=32;_ThreadName=Thread-2;|StandardWrapperValve[my-servlet]: PWC1406: Servlet.service() for servlet my-servlet threw exception 
java.lang.ClassCastException: com.sun.xml.ws.client.sei.SEIStub cannot be cast to org.apache.cxf.frontend.ClientProxy 
     at org.apache.cxf.frontend.ClientProxy.getClient(ClientProxy.java:93) 
     at my.company.MyCXFClient.<init>(MyCXFClient.java:53) 

は、これら2つのライブラリを展開するために取得(と仕事することが可能です)同じ戦争で?

答えて

0

これはできません。クライアント部分はjax-rs APIに依存しているため、1つのwarで2つの異なるjax-rs実装を使用することはできません。jax-rs api自体が実装を指しているのでいくつかのファクトリオブジェクトに対して、2つの実装を指すことはできません)。

更新:おっと、あなたはSOAP用に、もう1つはREST用に使用しています。それはうまくいくかもしれませんが、わかりません。次の操作を行うようにしてください:あなたは同様にあなたのwarファイルにジャージ-core.jarを含んでいることを確認してください

  1. ジャージーユーザーガイドのOverriding Jersey with war files章で説明したようにGFでJVMプロパティを設定し
+0

こんにちは、応答の遅れを申し訳ありません。私は数日間病気だった。私の戦争にはjersey-core.jarが含まれていて、GlassfishのJVMプロパティを(default-configとserver-configの両方で)設定しようとしましたが、同じ問題が発生します。だから私はその答えは不可能だと思う。 – sdoca

関連する問題