Java集成DocuSign报CommonConfig构造方法不存在NoSuchMethodError排查
问题场景
基于Eclipse开发Java Web应用,接入DocuSign嵌入式电子签名功能时抛出运行时异常,多次切换Jersey依赖版本仍无法解决问题。
异常堆栈
java.lang.NoSuchMethodError: 'void org.glassfish.jersey.model.internal.CommonConfig.<init> (javax.ws.rs.RuntimeType, java.util.function.Predicate)' org.glassfish.jersey.client.ClientConfig$State.<init>(ClientConfig.java:140) org.glassfish.jersey.client.ClientConfig.<init>(ClientConfig.java:496) com.docusign.esign.client.ApiClient.buildHttpClient(ApiClient.java:1753) com.docusign.esign.client.ApiClient.<init>(ApiClient.java:77) com.docusign.esign.client.Configuration.<clinit>(Configuration.java:5) com.docusign.esign.api.EnvelopesApi.<init>(EnvelopesApi.java:16) com.uniquedeveloper.registration.test2.EmbeddedSigningTest(test2.java:141) com.uniquedeveloper.registration.test2.doPost(test2.java:64) javax.servlet.http.HttpServlet.service(HttpServlet.java:681) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
当前pom.xml片段
<project xmlns="https://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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Trial1</groupId> <artifactId>Trial1</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <release>15</release> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> </plugin> </plugins> </build> <properties> <java.version>11</java.version> <oauth2.version>2.5.6</oauth2.version> <commonsio.version>2.11.0</commonsio.version> <docusign.version>3.18.0</docusign.version> <rooms.version>1.1.0</rooms.version> <click.version>1.0.0</click.version> <monitor.version>1.1.0</monitor.version> <admin.version>1.0.0-BETA</admin.version> </properties> <dependencies> <dependency>
异常根因
该报错是典型的Jersey依赖版本冲突、运行时加载了低版本不兼容类导致的:
- 报错中缺失的
CommonConfig.<init>(javax.ws.rs.RuntimeType, java.util.function.Predicate)构造方法,是Jersey 2.29及以上版本才新增的方法签名,低版本Jersey的CommonConfig类不存在该构造方法。 - 你使用的DocuSign eSignature Java SDK 3.18.0版本默认依赖Jersey 2.35版本,出现该问题说明运行时实际加载的Jersey common包版本低于2.29,冲突来源通常有两个:
- 手动引入的Jersey版本过低,或其他第三方依赖传递引入了低版本Jersey,覆盖了DocuSign SDK需要的高版本
- 部署用的Tomcat容器lib目录下自带了旧版本Jersey/JAX-RS实现包,类加载时优先加载了容器内的旧版本类,覆盖了war包内的正确版本
- 额外配置问题:pom中maven-compiler-plugin配置的编译版本为Java 15,但properties中声明的java.version为11,版本不一致可能放大类兼容性问题,但不是本次报错的核心诱因。
解决方案
按以下步骤逐一排查修复:
- 统一Jersey依赖版本:移除所有手动单独引入的Jersey相关依赖,在pom.xml中显式声明所有Jersey相关包的版本为2.35(和DocuSign 3.18.0依赖版本完全对齐),避免版本不一致:
<dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-common</artifactId> <version>2.35</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>2.35</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> <version>2.35</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.35</version> </dependency> <dependency> <groupId>org.glassfish.jersey.inject</groupId> <artifactId>jersey-hk2</artifactId> <version>2.35</version> </dependency>
- 排查容器依赖冲突:打开Tomcat安装目录下的
lib文件夹,检查是否存在版本低于2.29的Jersey相关jar包、版本低于2.1的javax.ws.rs-api包。如果存在这类冲突包,要么直接删除容器lib下的冲突包,要么在maven-war-plugin中配置打包排除规则,避免war包内的依赖和容器自带包重复冲突:
<plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> <configuration> <packagingExcludes>WEB-INF/lib/javax.ws.rs-api-*.jar,WEB-INF/lib/jersey-*.jar</packagingExcludes> </configuration> </plugin>
如果是在Eclipse中关联Tomcat运行项目,修复后需要清理Tomcat工作目录、完全重新发布项目,避免旧缓存类残留。
- 统一JDK编译版本:将maven-compiler-plugin的release配置值和properties中的java.version值保持一致,避免编译版本和运行环境不匹配。
- 校验依赖树:在Eclipse中打开pom.xml的Dependency Hierarchy面板,搜索
jersey-common,确认所有路径引入的jersey-common版本均为2.35,如果存在其他依赖传递引入的低版本包,直接在对应依赖下添加exclusion规则排除即可。
内容的提问来源于stack exchange,提问作者Salma Louhaichy
相关产品推荐
相关产品推荐

