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

使用Maven从WSDL生成Java Stub失败,请求解决方案

解决JAXB生成Stub时的反射警告与ObjectFactory冲突问题

我来帮你一步步搞定遇到的这两个问题:

一、处理jaxb-runtime非法反射访问警告

这个警告是因为JAXB 2.3.0版本在Java 9及以上的模块系统环境下,存在非法反射访问JDK内部API的情况,而且maven-jaxb2-plugin默认依赖了这个版本——你删本地仓库后它又自动生成,就是因为插件的依赖链里指定了这个版本。解决办法很简单,主动覆盖依赖版本即可:

  1. 在你的pom.xml里,给maven-jaxb2-plugin添加jaxb-runtime的依赖,指定兼容的新版本(比如2.3.1或更高,推荐2.4.0+):
<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.14.0</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.4.0</version>
        </dependency>
    </dependencies>
</plugin>
  1. 如果你用的是Java 11+,还可以添加JVM参数快速抑制警告(但优先推荐版本升级,这是更根本的解决方式):
-Djdk.module.illegalAccess=warn

二、解决ObjectFactory类冲突问题

这个问题是因为AFSService_1.xsd第328和377行的声明,生成了同名的ObjectFactory类(或者和其他XSD生成的类重名)。解决核心是通过JAXB绑定文件给不同的XSD指定专属包名,或者重命名冲突类,具体步骤如下:

1. 编写JAXB绑定文件(比如src/main/resources/jaxb-bindings.xjb)

示例内容如下,针对冲突的XSD设置单独的包名,也可以针对性重命名特定冲突类:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.1">
    <!-- 给AFSService_1.xsd指定专属包名,避免ObjectFactory冲突 -->
    <jaxb:bindings schemaLocation="arvatoprod/AFSService_1.xsd">
        <jaxb:schemaBindings>
            <jaxb:package name="com.yourcompany.arvatoprod.afsservice"/>
        </jaxb:schemaBindings>
        <!-- 如果是某个特定类型冲突,还可以单独重命名 -->
        <jaxb:bindings node="//xsd:complexType[@name='ConflictType']">
            <jaxb:class name="AFSConflictType"/>
        </jaxb:bindings>
    </jaxb:bindings>
    <!-- 其他XSD如果也有冲突,同理添加对应的绑定配置 -->
</jaxb:bindings>

2. 在maven-jaxb2-plugin中配置绑定文件

修改pom.xml里的插件配置,引入刚才写的绑定文件:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.14.0</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <!-- 指定绑定文件所在目录 -->
                <bindingDirectory>src/main/resources</bindingDirectory>
                <bindingIncludes>
                    <include>jaxb-bindings.xjb</include>
                </bindingIncludes>
                <!-- 指定XSD文件所在目录 -->
                <schemaDirectory>src/main/resources/arvatoprod</schemaDirectory>
                <schemaIncludes>
                    <include>*.xsd</include>
                </schemaIncludes>
            </configuration>
        </execution>
    </executions>
    <!-- 加上之前的jaxb-runtime依赖配置 -->
</plugin>

3. 验证执行

重新运行mvn generate-sources,此时每个XSD会生成到指定的专属包下,ObjectFactory类就不会再冲突了。如果还有问题,可以仔细检查AFSService_1.xsd那两行的声明,看看是不是重复定义了相同类型或命名空间,再针对性调整绑定文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:37:38