Java Glassfish 3.1-CXF和Jersey客户端部署在同一场战争中?

Java Glassfish 3.1-CXF和Jersey客户端部署在同一场战争中?,java,jersey,cxf,glassfish-3,Java,Jersey,Cxf,Glassfish 3,我试图在Glassfish 3.1.1中部署一个war,它使用CXF webservice客户端库和Jersey webservice客户端库。为了让Glassfish使用CXF而不是Metro作为JAX-WS实现,我包含了一个Glassfish web.xml文件,其中包含以下内容: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//

我试图在Glassfish 3.1.1中部署一个war,它使用CXF webservice客户端库和Jersey webservice客户端库。为了让Glassfish使用CXF而不是Metro作为JAX-WS实现,我包含了一个
Glassfish web.xml
文件,其中包含以下内容:

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

有可能让这两个库在同一场战争中部署(并工作)吗?

这是不可能的。因为客户机部分依赖于jax-rsapi,一场战争不能使用两个不同的jax-rs实现,除非使用单独的类装入器将它们完全隔离,因为jax-rsapi本身指向某些工厂对象的一个实现(并且不能指向两个实现)

更新:哎呀,我看到您使用一个用于SOAP,另一个用于REST。那可能行得通,但我不确定。尝试执行以下操作:

  • 确保在war文件中也包含jersey-core.jar
  • 按照《Jersey用户指南》第章中的说明,在GF中设置JVM属性

  • 您好,很抱歉延迟回复;我病了几天。我的war确实包含jersey-core.jar,我曾尝试在Glassfish中设置JVM属性(在默认配置和服务器配置中),但我遇到了相同的问题。所以我想答案是这是不可能的。
    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)
    
    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)