ошибка Java при попытке получить узел из ответа JSON - PullRequest
2 голосов
/ 03 мая 2019

Я пытаюсь получить подробности из узла в пределах пути json, используя предоставленный отдых и Java.Однако я продолжаю получать следующую ошибку:

java.lang.NoClassDefFoundError: org/apache/groovy/io/StringBuilderWriter
    at io.restassured.internal.path.json.ConfigurableJsonSlurper.parseObject(ConfigurableJsonSlurper.groovy:202)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at io.restassured.internal.path.json.ConfigurableJsonSlurper.parse(ConfigurableJsonSlurper.groovy:105)
    at io.restassured.internal.path.json.ConfigurableJsonSlurper$parse.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at io.restassured.internal.path.json.ConfigurableJsonSlurper.parseText(ConfigurableJsonSlurper.groovy:83)
    at io.restassured.path.json.JsonPath$4$1.method(JsonPath.java:949)
    at io.restassured.path.json.JsonPath$ExceptionCatcher.invoke(JsonPath.java:984)
    at io.restassured.path.json.JsonPath$4.doParseWith(JsonPath.java:951)
    at io.restassured.path.json.JsonPath$JsonParser.parseWith(JsonPath.java:1031)
    at io.restassured.path.json.JsonPath.get(JsonPath.java:202)
    at uk.co.hermes.cucumber.utils.xxx.postAccessToken(xxx.java:86)
    at uk.co.hermes.cucumber.utils.xxx.unblockUser(xxx.java:27)

Я знаю, что проблема с этой строкой в ​​коде:

String token = jsonPathEvaluator.get("token");

Как это можно исправить?

public void postAccessToken(){

    RestAssured.baseURI  = "https://xxx";

    JSONObject requestJsonBodyParams = new JSONObject();
    requestJsonBodyParams.put("test", "xxx");



    Response response = RestAssured.given()
            .contentType(jsonContentType).
                    body(requestJsonBodyParams.toString()).
                    when().
                    post("/");

    Assert.assertEquals(response.statusCode(), 200);

    JsonPath jsonPathEvaluator = response.jsonPath();
    String token = jsonPathEvaluator.get("token");
}

ОБНОВЛЕНИЕ:

enter image description here

Ответы [ 2 ]

4 голосов
/ 07 мая 2019

Мой ответ предполагает, что вы используете Maven / Gradle. Пожалуйста, дайте нам знать, если это не так.

Эта ошибка является признаком отсутствия зависимости от пути к классам, или, возможно, сбоя версии. Как правило, этого не должно происходить, поскольку используемые зависимости должны включать транзитивные зависимости в свои собственные зависимости. Что касается restassured, он содержит зависимость от groovy:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
</dependency>

Тогда может быть несколько возможных причин этого:

Либо вы исключили транзитивную зависимость от groovy из своей переопределенной зависимости, либо у вас есть зависимость от groovy с версией, отличной от той, которую ожидает переутомленная (та, где рассматриваемый класс недоступен). Третий вариант - это наличие нескольких зависимостей в зависимости от groovy с разными версиями.

Если вы используете maven, быстрый способ проверить это с помощью этой команды:

mvn dependency:tree -Dincludes=org.codehaus.groovy

Если вы можете попробовать это, пожалуйста, опубликуйте результат.

Также сообщите нам, какую версию RestAssured вы используете.

Обновление:

Из вашей зависимости: в дереве вы можете увидеть, что здесь есть несколько отличных версий. 2.5.6, я думаю, добавляется как попытка исправить это, , вы можете удалить это , так как это только дает вам сбой версии.

Но, хорошие части:

У вас есть две зависимости:

net.serenity-bdd:serenity-core:1.5.2
net.serenity-bdd:serenity-rest-assured:2.0.48

Каждая из них имеет отличные зависимости, но для разных версий 2.4.11 и 2.5.5 соответственно. Это приводит к сбою версии, так как код, который ожидает 2.5.5, внезапно должен работать с 2.4.11.

Недостающий класс был добавлен в базу кода после версии 2.4.11, поэтому у вас есть код, который ожидает, что этот класс будет там, но его нет.

Есть два способа исправить это:

Либо добавьте явную зависимость к groovy, так как это переопределит версию любых транзитивных зависимостей:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>2.5.5</version>
</dependency>

Это НЕ лучший способ исправить это, так как у вас все еще будет зависимость, предполагающая, что вы используете версию 2.4.11.

Правильный способ исправить это - выровнять версию двух упомянутых зависимостей:

net.serenity-bdd:serenity-core:1.5.2
net.serenity-bdd:serenity-rest-assured:2.0.48

Не зная каких-либо подробностей об этой платформе, я бы предположил, что вы должны использовать одну и ту же версию для этих двух зависимостей.

Обновление № 2:

Быстрый поиск в Google показывает, что эти две зависимости, похоже, следуют одной и той же схеме управления версиями. Подводя итог, либо обновите serentiy-core до 2.0.48, либо понизьте serentiy-rest-assured до 1.5.2. Также удалите свою зависимость от groovy-all.

1 голос
/ 07 мая 2019

Попробуйте добавить groovy-all.jar к вашему classpath.Если вы используете Maven, добавьте:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>2.5.6</version>
    <type>pom</type>
</dependency>

Для Gradle:

compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.5.6', ext: 'pom'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...