Уверенный JsonPath работает в тесте JUnit, но не при развертывании в приложении (Weblogic)

Сначала немного предыстории. У меня есть приложение, развернутое в Weblogic. Он получает ответ Json от службы. Я пытаюсь использовать JsonPath для навигации по дереву, и у меня возникает необычная проблема.

Я использую Maven для сборки/развертывания приложения. Зависимость:

<dependency>
  <groupId>com.jayway.restassured</groupId>
  <artifactId>json-path</artifactId>
  <version>1.8.1</version>
</dependency>

Запустив его с полным ответом в Junit и поняв, что он не работает в приложении при развертывании, я упростил его и жестко закодировал очень небольшое подмножество данных.

{
    "ChangeStatus": {
        "Code": {
            "value": "1002"
        },
        "Description": {
            "value": "Matched more then 10 records"
        }
    }
}

Вот что я сейчас смотрю...

String miniJson = "{\"ChangeStatus\":{\"Code\":{\"value\":\"1002\"},\"Description\":{\"value\":\"Matched more then 10 records\"}}}";
JsonPath miniJsonPath = new JsonPath(miniJson);
String statusCode = miniJsonPath.getString("ChangeStatus.Code.value");

В JUnit этот код работает, и я могу успешно подтвердить 1002. В приложении после нажатия на weblogic именно этот фрагмент кода не работает. Выдает ошибку NoSuchMethodError.

Любые идеи будут приветствоваться. К вашему сведению, мы на Weblogic 10.3.6

Заранее спасибо!


person Shino    schedule 13.08.2013    source источник
comment
И вы убедились, что ваш json-path-1.8.1.jar является частью вашего развернутого приложения? Как выглядит трассировка стека?   -  person Display Name is missing    schedule 14.08.2013


Ответы (2)


Я не эксперт в Weblogic, но в качестве альтернативы вы можете включить

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.2.0-rc1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.2.0-rc1</version>
    </dependency>

и создайте класс ChangeStatus с двумя членами Code и Description, а затем вы можете десериализовать JSON, используя:

    `new ObjectMapper().readValue(miniJson, ChangeStatus.class)`  

Надеюсь, это поможет.

person mihai.ciorobea    schedule 19.08.2013
comment
Спасибо за ваш отзыв. На самом деле я использую этот самый код в других местах приложения. Часть, с которой я сейчас работаю, намного сложнее, чем то, что я показал. JsonPath — это самый полезный инструмент, который я нашел на данный момент, для обработки чрезмерно вложенной природы Json, с которым я имею дело. Я нашел решение и опубликую его. - person Shino; 20.08.2013

Я обнаружил, что jsonpath зависит от antlr. Weblogic также включает этот пакет, но я считаю, что это более старая версия.

Я решил проблему, сказав Weblogic использовать классы, включенные в приложение. weblogic.xml

<wls:container-descriptor>
    <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>
person Shino    schedule 20.08.2013