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

Java8迁移Java11后maven-jaxb2-plugin报SAXParseException问题咨询

Spring Boot 2.7升级Java11后maven-jaxb2-plugin生成WSDL类出现SAXParseException的原因分析

问题场景

  • 项目升级路径:Spring Boot 2.7.0 从Java 8升级至Java 11,使用maven-jaxb2-plugin基于WSDL文件生成Java类
  • 版本变动:插件版本从0.13.3升级至0.15.1,其余插件配置完全一致,同时新增Spring Boot默认版本管理的jaxws-api、saaj-impl依赖
  • 插件配置片段如下:
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.15.1</version>
<executions>
    <execution>
        <id>organisationalStructure</id>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <schemaLanguage>WSDL</schemaLanguage>
            <generateDirectory>${project.build.directory}/generated-sources</generateDirectory>
            <generatePackage>com.test.organisationalStructure</generatePackage>
            <schemas>
                <schema>
                    <fileset>
                        <directory>${basedir}/src/main/resources/wsdl/</directory>
                        <include>organisationStructure.wsdl</include>
                    </fileset>
                </schema>
            </schemas>
            <readOnly>true</readOnly>
            <removeOldOutput>false</removeOldOutput>
            <forceRegenerate>true</forceRegenerate>
        </configuration>
    </execution>
</executions>

不同环境执行表现

Java 8环境执行mvn clean install日志

[INFO] --- maven-jaxb2-plugin:0.13.3:generate (organisationalStructure) @ redb2b ---
[WARNING] 您的配置中使用了forceRegenerate=true配置项。该配置已弃用,不推荐使用,因为它会导致IDE增量构建出现问题,建议从插件配置中移除该配置项。
[INFO] [forceRegenerate]开关已开启,将执行XJC。
[INFO] Episode文件[C:\RPSS\B2B-portal\target\generated-sources\META-INF\sun-jaxb.episode]已补充if-exists="true"属性。
构建全程无异常,代码生成、应用运行均正常。

Java 11环境执行mvn clean install日志

其余日志和Java 8环境完全一致,但在「[forceRegenerate]开关已开启,将执行XJC」和Episode文件处理两条INFO日志之间,抛出如下异常:

org.xml.sax.SAXParseException: Are you trying to compile WSDL? Support for WSDL is experimental. You may enable it by using the -wsdl option.
异常抛出后WSDL对应代码仍可正常生成,应用运行无异常,WSDL文件本身未做任何修改

异常根本原因

  • 核心触发因素是插件版本升级带来的逻辑调整,和Java版本无直接关联。0.13.3版本的插件识别到<schemaLanguage>WSDL</schemaLanguage>配置时,会自动向底层XJC编译器传递-wsdl启用参数,不会做额外校验;0.14及之后的版本调整了WSDL处理流程:插件会先尝试以普通XSD模式解析输入文件,解析失败抛出上述提示WSDL支持为实验性、需要加-wsdl参数的SAX异常后,才会自动追加-wsdl参数重试解析WSDL。
  • 该异常属于插件内部的预期内捕获流程,不是构建失败错误。你看到的异常只是插件第一次解析尝试失败时打印的栈轨迹,插件捕获到异常后会自动走WSDL解析分支完成代码生成,因此最终生成的代码、构建流程、应用运行都不会受影响,本质是插件日志输出不严谨的问题,不属于配置错误或者兼容性故障。
  • 感知到的「Java 8正常、Java 11出异常」是变量混淆导致的误判:升级操作同时变更了插件版本和Java版本,实际该异常只要插件版本>=0.14,无论用Java 8还是Java 11运行都会出现,和JDK版本、新增的jaxws/saaj依赖没有关系。

如果需要消除该异常日志,只需要在插件的<configuration>节点下显式追加<wsdl>true</wsdl>配置,告诉插件直接走WSDL解析模式,跳过第一次普通XSD解析的尝试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:06:33