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

Spring Boot 3.1.0升级后SOAP客户端JAXB异常求助

问题分析与解决方案

问题根源:Spring Boot 3.x 基于 Jakarta EE 9+,所有原 Java EE 体系的 API(包括 JAXB)均从 javax.* 包路径迁移至 jakarta.*。你的配置中混用了旧的 javax.xml.bind 依赖,且 JAXB 生成插件版本过低,生成的类仍使用 javax.xml.bind 注解,与 Spring Boot 3.x 适配的 Jakarta JAXB 运行时不兼容,导致上下文无法识别生成的请求类。

以下是具体修复步骤:


1. 清理并修正依赖

移除所有手动添加的 javax.xml.bind、com.sun.xml.bind 相关依赖,Spring Boot 3.x 的 spring-boot-starter-web-services 已内置适配 Jakarta 的 JAXB 依赖,无需手动引入。

修改后的依赖段:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web-services</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

2. 升级 JAXB 生成插件并配置 Jakarta 支持

将 maven-jaxb2-plugin 升级至支持 Jakarta EE 的版本(如 4.0.0),并配置插件生成使用 jakarta.xml.bind 注解的类。

修改后的插件配置:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>4.0.0</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <schemaLanguage>WSDL</schemaLanguage>
        <generateDirectory>${project.basedir}/src/main/java</generateDirectory>
        <generatePackage>com.poc.consumingwebservice.wsdl</generatePackage>
        <schemas>
            <schema>
                <url>http://localhost:8080/ws/countries.wsdl</url>
            </schema>
        </schemas>
        <!-- 强制生成 Jakarta 注解类 -->
        <args>
            <arg>-Xjakarta</arg>
        </args>
    </configuration>
</plugin>

3. 校验 Jaxb2Marshaller 配置

确保你的 Jaxb2Marshaller Bean 能正确识别生成的 Jakarta 注解类,示例配置:

@Bean
public Jaxb2Marshaller marshaller() {
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
    // 指定生成类所在的包路径
    marshaller.setContextPath("com.poc.consumingwebservice.wsdl");
    // 或者直接显式绑定类(可选)
    // marshaller.setClassesToBeBound(GetCountryRequest.class, GetCountryResponse.class);
    return marshaller;
}

4. 清理并重新构建项目

执行以下命令清理旧生成类与依赖,重新构建:

mvn clean install

完成以上修改后,生成的 JAXB 类将使用 jakarta.xml.bind 注解,与 Spring Boot 3.x 的运行时环境兼容,即可解决类上下文识别异常。

内容的提问来源于stack exchange,提问作者ram prasad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:12:00