2013-09-27 105 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傳輸。