You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求仅依赖Jakarta包的@WebService示例及Java11/Tomcat10下SOAP服务绑定解决方案

寻求仅依赖Jakarta包的@WebService示例及Java11/Tomcat10下SOAP服务绑定解决方案

我完全懂你迁移时的这种头疼——从Java8/Tomcat8转到Java11/Tomcat10,SOAP服务这块因为Jakarta EE的命名空间彻底替换,之前的配置套路全不管用了,而且找纯Jakarta的示例确实费劲。下面给你一套完整的纯Jakarta依赖的@WebService实现方案,以及Tomcat10下的绑定配置要点:

1. 纯Jakarta的@WebService服务实现类

所有注解和依赖都只用Jakarta包,完全摒弃javax相关内容:

package com.example.soap;

import jakarta.jws.WebMethod;
import jakarta.jws.WebService;

// 指定服务的命名空间和服务名称
@WebService(targetNamespace = "http://example.com/soap", serviceName = "HelloService")
public class HelloServiceImpl {

    // 定义SOAP接口方法
    @WebMethod(operationName = "sayHello")
    public String sayHello(String name) {
        return "Hello, " + name + "! From Jakarta EE SOAP Service";
    }
}

2. Maven依赖与插件配置

确保pom.xml里的依赖都是Jakarta版本,同时配置wsgen插件生成相关文件:

依赖配置

Tomcat10自带基础的Jakarta API,但JAX-WS的运行时需要额外引入,这里建议把运行时依赖打包到WAR里(如果不想放到Tomcat全局lib的话):

<dependencies>
    <!-- Jakarta JAX-WS API,Tomcat10已提供,设为provided -->
    <dependency>
        <groupId>jakarta.xml.ws</groupId>
        <artifactId>jakarta.xml.ws-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- JAX-WS运行时实现,需要打包到WAR中 -->
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>3.0.1</version>
    </dependency>
</dependencies>

wsgen插件配置

使用支持Jakarta的新版jaxws-maven-plugin来生成WSDL和相关绑定文件:

<build>
    <plugins>
        <plugin>
            <groupId>org.jvnet.jax-ws-commons</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>wsgen</goal>
                    </goals>
                    <configuration>
                        <!-- 指定你的服务实现类全路径 -->
                        <sei>com.example.soap.HelloServiceImpl</sei>
                        <!-- 自动生成WSDL文件 -->
                        <genWsdl>true</genWsdl>
                        <!-- 目标Jakarta EE版本 -->
                        <target>3.0</target>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3. Tomcat10下的部署与绑定要点

废弃sun-jaxws.xml配置

Tomcat10不再支持原有的com.sun.xml.ws.transport.http.servlet.WSServletContextListener,也不需要sun-jaxws.xml来绑定URL了——只要你的服务类加了@WebService注解,Tomcat10会自动扫描并注册服务。

确保web.xml使用Jakarta命名空间

如果你的项目还保留web.xml,必须替换成Jakarta的命名空间,否则容器无法识别注解:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <!-- 这里不需要任何SOAP相关的listener或servlet配置 -->
</web-app>

4. 测试访问

部署WAR包到Tomcat10后,你可以通过以下地址访问WSDL:
http://localhost:8080/你的应用上下文/HelloService?wsdl
比如你的应用上下文是soap-demo,那完整地址就是http://localhost:8080/soap-demo/HelloService?wsdl。

你可以用SOAPUI、Postman或者curl工具来调用sayHello方法,验证服务是否正常响应。

常见问题排查

  • 如果访问WSDL时404,检查:
    1. WAR包是否正确部署,应用上下文是否正确
    2. 服务类的包路径是否正确,@WebService注解是否配置正确
    3. jaxws-rt的依赖是否已打包到WAR的WEB-INF/lib目录中

备注:内容来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:53:00