2012-02-17 99 views
0

答案我知道這並不是那種解決方案進展順利的事情,但我擺弄了web.xml和servlet.xml文件,並且出於某種原因,它現在可以工作,現在我可以獲得服務列表和wsdl文件。我將我的新文件與下面編寫的舊文件進行了比較,唯一的區別是web.xml具有名稱CXFServlet而不是LoginService,並且我已爲cxfservlet.xml端點提供了一個地址。從運行在Tomcat上的CXF web服務中獲取WSDL

我有一個問題,我有(最後)在Tomcat上進行CXF Web服務部署。或者,它確實啓動了,並且在部署和重新部署時,它不會在tomcat日誌中產生任何警告或例外。問題是我無法檢索有問題的服務的WSDL。我開始認爲我不瞭解web.xml和cxf.xml文件以及我的想法。

當我寫http://localhost:8080/services/Login?wsdl我期望WSDL彈出,但我得到的只是一個404。我做錯了什麼?正如我所說我沒有得到任何例外,那麼我的問題是什麼?

編輯: 由於一些有用的反饋(我記得標記爲有用的),我意識到我可能已經在我的web.xml中設置了錯誤的上下文路徑。我通過tomcat中的管理器應用程序在名爲LoginService.war的文件中部署該服務。 這引出了一個問題:我可以這樣做嗎?請問tomcat知道在LoginService lib中查找CXFServlet類,還是會在ROOT中查找?我是否需要重新配置服務器以允許我從http://localhost:8080/LoginService運行?

的web.xml

<?xml version="1.0"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd"> 

<web-app> 
<display-name>LoginService</display-name> 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>classpath:metadata/Login/cxfservlet.xml</param-value> 
</context-param> 
<listener> 
<listener-class> 
    org.springframework.web.context.ContextLoaderListener 
</listener-class> 
</listener> 
<servlet> 
<servlet-name>LoginService</servlet-name> 
<servlet-class> 
    org.apache.cxf.transport.servlet.CXFServlet 
</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>LoginService</servlet-name> 
<url-pattern>/services/*</url-pattern> 
</servlet-mapping> 
</web-app> 

cxfservlet.xml

<beans xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://cxf.apache.org 
/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 
<jaxws:endpoint id="LoginService" 
implementor="orgserver.services.Login" wsdlLocation="WEB-INF/LoginService.wsdl" 
address="/"> 
</jaxws:endpoint> 
</beans> 
+1

你寫'address =「/」'。所以試試http:// localhost:8080/services /?wsdl – 2012-02-17 11:54:16

+0

給出404以及 – 2012-02-17 11:58:41

+0

我是否至少正確理解了這個問題?我指定了類CXFServlet在每個提供的類似/ services/*的url上運行。該CXFServlet類是將我在cxfservlet.xml文件中指定的bean作爲端點並處理web服務操作?它也是負責返回WSDL的CXFServlet? – 2012-02-17 12:05:31

回答

4

你不應該需要設置wsdlLocation除非有另一種方式讓你的業務,除了http://localhost:8080/services/。此外wsdlLocation將是一個URL。

我假設您已經將應用程序部署到Tomcat中的ROOT.war(根上下文),因爲/ services之前沒有上下文路徑。

當您瀏覽到http://localhost:8080/services(無尾隨/)時顯示什麼?它應該爲您提供可用的服務列表,包括WSDL地址。如果將鼠標懸停在WSDL地址上,它將顯示實際的URL。

+0

然後,我導航到http:// localhost:8080 /服務,它給了我一個404,否則。我試着改變上下文路徑到/ LoginService這是什麼戰爭被稱爲,一個嘗試http:// localhost:8080/LoginService,它仍然給我一個404。 – 2012-02-19 12:04:50

+0

我試着在LoginService戰爭中放置一個簡單的index.html文件文件,我可以使用http:// localhost:8080/LoginService /導航到該文件。我通過管理器html應用程序部署LoginService.war。我將上下文路徑更改爲/ LocalHost/services /,但在調用http:// localhost:8080/LoginService/services時,我仍然沒有收到服務列表。我沒有打電話到CXFServlet類嗎?有什麼方法可以查看由於錯誤而導致CXFServlet失敗嗎? – 2012-02-19 12:18:55

+0

將我的上下文路徑更改爲LoginService/services在tomcat管理器中給我一個錯誤:「FAIL - 上下文路徑/ LoginService上的應用程序無法啓動。」日誌中除「開始」消息外沒有任何內容。沒有錯誤。 – 2012-02-19 12:35:22