jackson.databind没有这样的方法错误

时间:2017-05-04 13:22:45

标签: java json maven jackson auth0

我使用auth0-java客户端库与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$0(AdminUILayout.java:293)
at java.lang.Thread.run(Thread.java:745)

我已经经历了几个像#{3}}这样的堆栈流问题,并尝试清理该测试环境的.m2/repository/com/fasterxml文件夹,但是没有解决这样的方法错误 这是我的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>

更新 我已将这些杰克逊依赖项移至<dependencyManagement>文件的pom.xml部分,

<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>

根据this,无论依赖项请求哪个版本的库jackson-core,都会始终使用版本${jackson.version},但我的代码仍在本地运行,但在该测试中服务器  该异常保持不变,即使我在该测试服务器代码中部署我的war文件也会引发相同的异常。

6 个答案:

答案 0 :(得分:3)

很可能你已经针对不同版本的类编译了代码,而不是运行它时使用的代码。

请确保在运行代码的环境中,类路径上没有任何其他版本的jackson-databind依赖项。

答案 1 :(得分:3)

终于解决了这个问题,我发现glassfish 4.1.1jackson-core jackson-annotationjackson-databind的旧版本2.3.2,所以我们决定使用{{3}使用相当最新版本的jackson Payara的服务器并且测试了没有这样的方法错误解决了,代码在Payara服务器上正常工作

<强>更新 glassfish版本5.0使用更新版本jackson 2.8.9,我认为使用它也可以解决此问题

答案 2 :(得分:1)

可能您的其他工件之一取决于数据绑定的不同版本。您可以尝试从每个人中明确地排除它来猜测

<dependency>
  ...
  <exclusions>
    <exclusion>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </exclusion>
  </exclusions> 
</dependency>

答案 3 :(得分:1)

请检查版本。

截图:
Versions screenshot

答案 4 :(得分:0)

对我来说,由于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并解决了异常。

答案 5 :(得分:-2)

<!-- 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>