2012-02-17 97 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