2013-09-27 101 views
6

我有一个使用Apache CXF生成并构建的Web服务客户端。接下来,我有JAX-RS Jersey应用程序,我想从该web服务调用方法。当我尝试将这个简单的项目部署到Glassfish 4.0服务器时,我得到以下异常:如何将Apache CXF webservice部署到Glassfish

Exception while deploying the app [pelijee] : 
The lifecycle method [finalizeConfig] must not throw a checked exception. 
Related annotation information: annotation [@javax.annotation.PostConstruct()] on annotated element [public void org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine.finalizeConfig() throws java.security.GeneralSecurityException,java.io.IOException] of type [METHOD]. Please see server.log for more details. 

命令部署失败。

唯一一个CXF依赖我对这个项目是:

<dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-bundle-jaxrs</artifactId> 
     <version>2.7.6</version> 
     <type>jar</type> 
     <scope>runtime</scope> 
    </dependency> 

是否有任何其他CXF库JSR 250兼容? 谢谢

+0

https://issues.apache.org/jira/browse/CXF-5483对此有帮助吗? – alkis

回答

0

Glassfish的挑战之一是完整的服务器配置文件与Metro for JAX-WS Web服务和Jersey for JAX-RS rest服务一起打包。建议通过包含在WAR的WEB-INF文件夹中的sun-web.xml文件配置classloader。它应该包括以下内容:

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

在过去,我发现偶尔我仍然有部署的问题;因此,我实际上从Glassfish服务器配置文件中完全删除了Metro和Jersey功能。这里有一些关于部署的更多信息。我注意到

http://cxf.apache.org/docs/application-server-specific-configuration-guide.html

一个额外的事情是,你发布的,其中包括了码头运输日志信息。这意味着您正在运行Jetty HTTP服务器并运行Glassfish HTTP服务器。我建议只使用Glassfish作为Web服务器,而不是使用CXF servlet传输。