jackson.databind没有这样的方法错误
jackson.databind no such method errors
我正在使用 auth0-java client library to interact with auth0 v2
服务,我的代码在我的开发环境中编译并运行良好,但是当我在另一个测试环境中部署该构建时,它会抛出以下异常:
java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.ObjectMapper.readerFor(Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/ObjectReader;
at com.auth0.json.mgmt.users.UsersPageDeserializer.getArrayElements(UsersPageDeserializer.java:52)
at com.auth0.json.mgmt.users.UsersPageDeserializer.deserialize(UsersPageDeserializer.java:30)
at com.auth0.json.mgmt.users.UsersPageDeserializer.deserialize(UsersPageDeserializer.java:15)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3562)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2597)
at com.auth0.net.CustomRequest.parseResponse(CustomRequest.java:63)
at com.auth0.net.BaseRequest.execute(BaseRequest.java:37)
at com.myapp.security.Auth0Service.getUserByEmail(Auth0Service.java:246)
at com.myapp.security.Auth0Service.checkForExsistingAuth0Account(Auth0Service.java:266)
at com.myapp.security.AdminUILayout.lambda$launchProgressUpdater[=11=](AdminUILayout.java:293)
at java.lang.Thread.run(Thread.java:745)
我已经解决了几个 stackover 流程问题,例如 this 并尝试清理该测试环境的 .m2/repository/com/fasterxml
文件夹,但无法解决 no such method 错误
这是我的pom文件,相关代码如下:
代码
public User getUserByEmail(String email){
UserFilter filter = new UserFilter();
filter.withQuery(email);
Request<UsersPage> request = mgmt.users().list(filter);
try {
UsersPage response = request.execute();
for (User u:response.getItems()) {
if (u.getEmail().equals(email)) {
return u;
}
}
} catch (APIException exception) {
// api error
System.out.println("APIException:::::"+exception.getDescription());
} catch (Auth0Exception exception) {
// request error
System.out.println("Auth0Exception:::::"+exception.getMessage());
}catch(Exception ex){
System.out.println("Other exception:::::"+ex.getMessage());
}
return null;
}
pom.xml
<properties>
<jackson.version>2.8.5</jackson.version>
</properties>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>auth0</artifactId>
<version>1.0.0</version>
</dependency>
更新
我已将这些 jackson 依赖项移动到我的 pom.xml
文件的 <dependencyManagement>
部分,
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
</dependencyManagement>
根据 maven documentation ,无论依赖项请求哪个版本的库 jackson-core
,版本 ${jackson.version}
将始终被使用,我的代码仍然在本地工作,但在那个测试服务器
异常保持不变,即使我在该测试服务器代码中部署我的 war 文件也会抛出相同的异常。
您很可能针对不同版本的 class 编译了您的代码,而不是您在 运行 时使用的版本。
请确保在您 运行 代码所在的环境中没有任何其他版本的 jackson-databind
依赖于您的 class 路径。
可能您的其他工件之一取决于不同版本的数据绑定。您可以尝试从每个人中明确排除它以猜测
<dependency>
...
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
请检查版本。
截图:
终于解决了问题,我发现glassfish 4.1.1
的jackson-core
jackson-annotation
和jackson-databind
的2.3.2版本很旧,所以我们决定使用Payara server that uses fairly latest version of jackson jackson 2.8.5 并测试了没有此类方法的错误已解决,代码在该 Payara 服务器中工作正常
更新:
glassfish
版本 5.0
使用更新版本 jackson 2.8.9
,我认为使用它也能解决这个问题
对于我来说,由于jackson-databind版本较低,我遇到了同样的异常:
发件人:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
更改为:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.9</version>
</dependency>
我刚刚用更高版本的 jackson-databind 更新了我的 pom.xml 文件。
然后right-click Project
-->
Update Maven Project
异常就解决了
<!-- faster JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.0</version>
</dependency>
我正在使用 auth0-java client library to interact with auth0 v2
服务,我的代码在我的开发环境中编译并运行良好,但是当我在另一个测试环境中部署该构建时,它会抛出以下异常:
java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.ObjectMapper.readerFor(Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/ObjectReader;
at com.auth0.json.mgmt.users.UsersPageDeserializer.getArrayElements(UsersPageDeserializer.java:52)
at com.auth0.json.mgmt.users.UsersPageDeserializer.deserialize(UsersPageDeserializer.java:30)
at com.auth0.json.mgmt.users.UsersPageDeserializer.deserialize(UsersPageDeserializer.java:15)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3562)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2597)
at com.auth0.net.CustomRequest.parseResponse(CustomRequest.java:63)
at com.auth0.net.BaseRequest.execute(BaseRequest.java:37)
at com.myapp.security.Auth0Service.getUserByEmail(Auth0Service.java:246)
at com.myapp.security.Auth0Service.checkForExsistingAuth0Account(Auth0Service.java:266)
at com.myapp.security.AdminUILayout.lambda$launchProgressUpdater[=11=](AdminUILayout.java:293)
at java.lang.Thread.run(Thread.java:745)
我已经解决了几个 stackover 流程问题,例如 this 并尝试清理该测试环境的 .m2/repository/com/fasterxml
文件夹,但无法解决 no such method 错误
这是我的pom文件,相关代码如下:
代码
public User getUserByEmail(String email){
UserFilter filter = new UserFilter();
filter.withQuery(email);
Request<UsersPage> request = mgmt.users().list(filter);
try {
UsersPage response = request.execute();
for (User u:response.getItems()) {
if (u.getEmail().equals(email)) {
return u;
}
}
} catch (APIException exception) {
// api error
System.out.println("APIException:::::"+exception.getDescription());
} catch (Auth0Exception exception) {
// request error
System.out.println("Auth0Exception:::::"+exception.getMessage());
}catch(Exception ex){
System.out.println("Other exception:::::"+ex.getMessage());
}
return null;
}
pom.xml
<properties>
<jackson.version>2.8.5</jackson.version>
</properties>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>auth0</artifactId>
<version>1.0.0</version>
</dependency>
更新
我已将这些 jackson 依赖项移动到我的 pom.xml
文件的 <dependencyManagement>
部分,
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
</dependencyManagement>
根据 maven documentation ,无论依赖项请求哪个版本的库 jackson-core
,版本 ${jackson.version}
将始终被使用,我的代码仍然在本地工作,但在那个测试服务器
异常保持不变,即使我在该测试服务器代码中部署我的 war 文件也会抛出相同的异常。
您很可能针对不同版本的 class 编译了您的代码,而不是您在 运行 时使用的版本。
请确保在您 运行 代码所在的环境中没有任何其他版本的 jackson-databind
依赖于您的 class 路径。
可能您的其他工件之一取决于不同版本的数据绑定。您可以尝试从每个人中明确排除它以猜测
<dependency>
...
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
请检查版本。
截图:
终于解决了问题,我发现glassfish 4.1.1
的jackson-core
jackson-annotation
和jackson-databind
的2.3.2版本很旧,所以我们决定使用Payara server that uses fairly latest version of jackson jackson 2.8.5 并测试了没有此类方法的错误已解决,代码在该 Payara 服务器中工作正常
更新:
glassfish
版本 5.0
使用更新版本 jackson 2.8.9
,我认为使用它也能解决这个问题
对于我来说,由于jackson-databind版本较低,我遇到了同样的异常:
发件人:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
更改为:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.9</version>
</dependency>
我刚刚用更高版本的 jackson-databind 更新了我的 pom.xml 文件。
然后right-click Project
-->
Update Maven Project
异常就解决了
<!-- faster JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.0</version>
</dependency>