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

JavaFX+Maven构建SOAP客户端依赖冲突问题求助

解决方案:JavaFX + Maven SOAP客户端依赖冲突处理

问题根源

  • 引入jaxws-rt时触发的LayerInstantiationException,是因为JavaFX内置模块已包含org.glassfish.jaxb.runtime,而jaxws-rt依赖的旧版com.sun.xml.bind与前者存在包重复。
  • 移除jaxws-rt后出现的ProviderImpl not found,是缺少JAX-WS运行时实现导致的。

正确依赖配置

使用Jakarta EE兼容的Metro运行时,主动排除与JavaFX冲突的JAXB模块,避免重复加载。以下是完整的依赖配置:

<dependencies>
    <!-- JavaFX 依赖(根据你的实际版本调整) -->
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>21.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>21.0.1</version>
    </dependency>

    <!-- Metro JAX-WS 运行时,排除冲突的JAXB模块 -->
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>4.0.3</version>
        <exclusions>
            <!-- 排除JavaFX已自带的JAXB模块 -->
            <exclusion>
                <groupId>org.glassfish.jaxb</groupId>
                <artifactId>jaxb-runtime</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.xml.bind</groupId>
                <artifactId>jaxb-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.xml.bind</groupId>
                <artifactId>jaxb-impl</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- JAX-WS API 依赖 -->
    <dependency>
        <groupId>jakarta.xml.ws</groupId>
        <artifactId>jakarta.xml.ws-api</artifactId>
        <version>4.0.1</version>
    </dependency>
</dependencies>

jaxws-maven-plugin 配置

确保插件生成Jakarta兼容的客户端代码,同时排除插件依赖中的冲突模块:

<build>
    <plugins>
        <!-- JavaFX 打包插件(保留你已有的配置) -->
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.8</version>
            <configuration>
                <mainClass>你的主类全路径</mainClass>
            </configuration>
        </plugin>

        <!-- JAX-WS 客户端生成插件 -->
        <plugin>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>4.0.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                    <configuration>
                        <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>
                        <!-- 生成Jakarta规范兼容的代码 -->
                        <args>
                            <arg>-extension</arg>
                            <arg>-Xnocompile</arg>
                            <arg>-jakarta</arg>
                        </args>
                        <packageName>你的SOAP客户端包路径</packageName>
                    </configuration>
                </execution>
            </executions>
            <!-- 插件依赖排除冲突模块 -->
            <dependencies>
                <dependency>
                    <groupId>com.sun.xml.ws</groupId>
                    <artifactId>jaxws-tools</artifactId>
                    <version>4.0.3</version>
                    <exclusions>
                        <exclusion>
                            <groupId>org.glassfish.jaxb</groupId>
                            <artifactId>jaxb-runtime</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

模块化项目额外配置

如果你的项目使用模块系统(存在module-info.java),需要添加以下模块声明:

module 你的模块名 {
    requires javafx.controls;
    requires javafx.fxml;
    requires jakarta.xml.ws.api;
    requires com.sun.xml.ws.runtime;
    // 允许SOAP客户端类被Metro运行时访问
    opens 你的SOAP客户端包路径 to com.sun.xml.ws.runtime;
}

验证步骤

  1. 执行mvn clean install重新生成客户端类并构建项目。
  2. 启动JavaFX应用,点击测试按钮发送SOAP请求,确认无模块冲突和Provider找不到的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:32:46