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

使用jaxws-maven-plugin生成WSDL时遇MojoExecutionException的排查

解决jaxws-maven-plugin生成WSDL时的NoSuchMethodError异常

使用jaxws-maven-plugin生成WSDL时触发MojoExecutionException异常,核心报错为java.lang.NoSuchMethodError,提示找不到方法com.sun.xml.ws.util.xml.XmlUtil.newDocumentBuilderFactory(boolean)。

完整报错堆栈

[ERROR] Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.2:wsgen (generate-wsdl) on project helloservice-war: Failed to execute wsgen: 'javax.xml.parsers.DocumentBuilderFactory com.sun.xml.ws.util.xml.XmlUtil.newDocumentBuilderFactory(boolean)' -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.2:wsgen (generate-wsdl) on project helloservice-war: Failed to execute wsgen
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:306)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:211)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:165)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:157)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:121)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:127)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:294)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:960)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.plugin.MojoExecutionException: Failed to execute wsgen
    at org.jvnet.jax_ws_commons.jaxws.AbstractWsGenMojo.execute (AbstractWsGenMojo.java:148)
    at org.jvnet.jax_ws_commons.jaxws.MainWsGenMojo.execute (MainWsGenMojo.java:95)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:301)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:211)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:165)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:157)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:121)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:127)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:294)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:960)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: java.lang.NoSuchMethodError: 'javax.xml.parsers.DocumentBuilderFactory com.sun.xml.ws.util.xml.XmlUtil.newDocumentBuilderFactory(boolean)'
    at com.sun.xml.ws.db.toplink.JAXBContextFactory.<clinit> (JAXBContextFactory.java:184)
    at java.lang.Class.forName0 (Native Method)
    at java.lang.Class.forName (Class.java:467)
    at com.sun.xml.ws.util.ServiceFinder$LazyIterator.next (ServiceFinder.java:460)
    at com.sun.xml.ws.util.ServiceFinder$CompositeIterator.next (ServiceFinder.java:402)
    at com.sun.xml.ws.spi.db.BindingContextFactory$1.hasNext (BindingContextFactory.java:80)
    at com.sun.xml.ws.spi.db.BindingContextFactory.factories (BindingContextFactory.java:110)
    at com.sun.xml.ws.spi.db.BindingContextFactory.create (BindingContextFactory.java:176)
    at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run (AbstractSEIModelImpl.java:213)
    at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run (AbstractSEIModelImpl.java:186)
    at java.security.AccessController.doPrivileged (AccessController.java:569)
    at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext (AbstractSEIModelImpl.java:186)
    at com.sun.xml.ws.model.AbstractSEIModelImpl.postProcess (AbstractSEIModelImpl.java:111)
    at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel (RuntimeModeler.java:318)
    at com.sun.xml.ws.db.DatabindingImpl.<init> (DatabindingImpl.java:99)
    at com.sun.xml.ws.db.DatabindingProviderImpl.create (DatabindingProviderImpl.java:74)
    at com.sun.xml.ws.db.DatabindingProviderImpl.create (DatabindingProviderImpl.java:58)
    at com.sun.xml.ws.db.DatabindingFactoryImpl.createRuntime (DatabindingFactoryImpl.java:130)
    at com.sun.tools.ws.wscompile.WsgenTool.buildModel (WsgenTool.java:236)
    at com.sun.tools.ws.wscompile.WsgenTool.run (WsgenTool.java:124)
    at com.sun.tools.ws.WsGen.doMain (WsGen.java:74)
    at org.jvnet.jax_ws_commons.jaxws.AbstractWsGenMojo.execute (AbstractWsGenMojo.java:142)
    at org.jvnet.jax_ws_commons.jaxws.MainWsGenMojo.execute (MainWsGenMojo.java:95)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:301)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:211)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:165)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:157)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:121)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:127)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:294)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:960)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

项目POM配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.glassfish.javaeetutorial</groupId>
    <artifactId>helloservice-war</artifactId>
    <packaging>war</packaging>
    <name>helloservice-war</name>
    <description>Simple example JAX-WS web service.</description>

    <parent>
        <groupId>org.glassfish.javaeetutorial</groupId>
        <artifactId>jaxws</artifactId>
        <version>8.0</version>
    </parent>

    <build>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jax-ws-commons</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>${jaxws-maven-plugin.version}</version>
                <executions>
                    <execution>
                        <id>generate-wsdl</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>wsgen</goal>
                        </goals>
                        <configuration>
                            <sei>javaeetutorial.helloservice.Hello</sei>
                            <genWsdl>true</genWsdl>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <configuration>
                    <deployables>
                        <deployable>
                        <properties>
                            <context>helloservice</context>
                        </properties>
                        </deployable>
                    </deployables>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
          <groupId>com.sun.xml.ws</groupId>
          <artifactId>jaxws-ri</artifactId>
          <version>2.3.3</version>
          <type>pom</type>
        </dependency>
    </dependencies>
</project>

排查解决方法

1. 修复版本兼容性问题

jaxws-maven-plugin 2.2版本依赖JAX-WS RI 2.2.x系列,而项目中使用的jaxws-ri是2.3.3版本,两者版本不匹配导致方法签名不一致(XmlUtil类的newDocumentBuilderFactory(boolean)方法在2.3.x版本中存在变更)。

解决思路二选一:

  • 升级插件版本:将jaxws-maven-plugin版本升级到2.3.3或更高(如2.4.0),确保和jaxws-ri版本一致。
  • 降级依赖版本:将jaxws-ri版本降级到2.2.10,适配插件的2.2版本。

2. 强制插件使用指定版本的JAX-WS工具

如果升级插件后仍存在依赖冲突,可以在插件配置中显式指定jaxws-tools依赖,确保插件使用的工具类版本和项目一致:

<plugin>
    <groupId>org.jvnet.jax-ws-commons</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.3.3</version>
    <executions>
        <execution>
            <id>generate-wsdl</id>
            <phase>process-classes</phase>
            <goals>
                <goal>wsgen</goal>
            </goals>
            <configuration>
                <sei>javaeetutorial.helloservice.Hello</sei>
                <genWsdl>true</genWsdl>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-tools</artifactId>
            <version>2.3.3</version>
        </dependency>
    </dependencies>
</plugin>

3. 匹配JDK版本

从报错堆栈可以看出使用的是JDK 17,但jaxws-ri 2.3.3对JDK 17的支持有限,推荐:

  • 切换到JDK 8(JAX-WS RI 2.3.x官方推荐的JDK版本);
  • 如果必须使用JDK 17,升级到支持Jakarta EE的JAX-WS版本(如jaxws-ri 3.0.x),注意此版本包名从javax.xml.*改为jakarta.xml.*,需要同步调整项目代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:20:41