java - 将 CXF SOAP Web 服务部署到 Apache Tomcat

标签 java web-services tomcat soap cxf

我最近重新编写了一个 Web 服务应用程序以使用 CXF 而不是 Axis。切换很简单,但我在部署 webapp 时遇到了问题。以前,使用 Axis,您可以导航到由 Tomcat 提供的页面,该页面将列出所有 Axis 服务;类似于 http://localhost:8080/axis2/services/listServices。要查看服务的 WSDL,我会导航到 http://localhost:8080/axis2/services/Service?wsdl

在 CXF 中重写服务后,我发现我真的不知道如何部署和配置应用程序。我遵循了基本的 CXF 设置,其中我的应用程序的 web.xml 文件导入了一个 Spring 配置文件 beans.xml。我可以很好地解决所有这些问题并将其部署在 Tomcat 中,在那里它会很好地爆炸并且不会发生错误日志记录,但我什至无法弄清楚如何在主机上浏览以查看已部署的 Web 服务的列表。

我能得到一些帮助和解释吗?我想了解如何配置 CXF,以便我知道要使用哪些 URL 来列出服务并查看它们相应的 WSDL。随意解释这部分,就好像我是五岁一样;我是一名可靠的程序员,但部署和配置并不是我最擅长的知识领域。

我在试图理解这一点时注意到的一件事是 beans.xml 文件引用了 classpath:META-INF/cxf/cxf.xml 的导入。我不知道这个文件是什么或它在哪里,但我的假设是它可能是需要的并且我应该了解它的作用。有人介意也解释一下吗? Tomcat的web.xml和这个配置有关系吗?

如果我可以提供任何更多信息或配置以协助完成这篇文章,请告诉我!

这是我的应用程序的 web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/beans.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <display-name>CXF Servlet</display-name>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    <mime-mapping>
        <extension>inc</extension>
        <mime-type>text/plain</mime-type>
    </mime-mapping>
</web-app>

这是我的 beans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

    <import resource="classpath:META-INF/cxf/cxf.xml" />

    <jaxws:endpoint
        id="accountService"
        implementor="com.company.ws.data.services.AccountService"
        address="/AccountService" />

    <jaxws:endpoint
        id="loggingService"
        implementor="com.company.ws.data.services.LoggingService"
        address="/LoggingService" />

    <jaxws:endpoint
        id="searchService"
        implementor="com.company.ws.data.services.SearchService"
        address="/SearchService" />

    <jaxws:endpoint
        id="validationService"
        implementor="com.company.ws.data.services.ValidationService"
        address="/ValidationService" />
</beans>

最佳答案

您可以在 http://localhost:8080/{YourwebApp}/services 中访问所有已部署的网络服务 假设您的网络应用程序是 webapp1 那么 http://localhost:8080/webapp1/服务

关于java - 将 CXF SOAP Web 服务部署到 Apache Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25898168/

相关文章:

tomcat - 从 glassfish 3 迁移到 tomcat 7

java - Tomcat 7 泽西 REST 不工作

java - 使用 Xpath 时按钮位置错误?

java - 使用嵌入式 Tomcat 启动 Spring 应用程序 (STS) 时,java.exe 和 javaw.exe 进程都在同一端口上创建

java - 文件不存在

java - 在 Kotlin 中为变量使用 "m"前缀

java - 如何从单个 Web 服务类调用不同的方法

java - 使用 Tomcat 在 eclipse 中启动 Java 项目

web-services - Solr查询语法

spring - 访问 webapp 外部的文件(Tomcat V6 和 Spring)