2016-12-04 11 views
3

Я использую парсер JSON для извлечения значения, и я использую следующий jar json-path-2.1.0, и я получаю следующую ошибку при вызове используемого в качестве webservice на сервере weblogic Я написал небольшую основную программу для извлечения значения из строки json, и она отлично работает, но серверная версия варианта использования дает эту проблему. Я не уверен, что если есть какая-либо другие банки часть моего уха может отрицательно повлиять на этомJSON Parser -java.lang.NoSuchFieldError: defaultReader

SEVERE: defaultReader 
java.lang.NoSuchFieldError: defaultReader 
at com.jayway.jsonpath.spi.json.JsonSmartJsonProvider.<init>(JsonSmartJsonProvider.java:39) 
at com.jayway.jsonpath.internal.DefaultsImpl.jsonProvider(DefaultsImpl.java:21) 
at com.jayway.jsonpath.Configuration.defaultConfiguration(Configuration.java:174) 
at com.jayway.jsonpath.internal.JsonContext.<init>(JsonContext.java:52) 
at com.jayway.jsonpath.JsonPath.parse(JsonPath.java:596) 

ответ

2

Наткнулся на ту же проблему.

Причина, по которой это не работает, не является JDK 8. Причина, по которой вы столкнулись с этой проблемой, заключается в том, что weblogic 12.2.1.X связывает старую версию json-smart.

На моей машине это было бы найти здесь: баночку: файл:/C: /dev/WLS_12_2_1_2_0/oracle_common/modules/net.minidev.json-smart.jar /net/minidev/json/JSONValue.class!

Теперь, если вы используете библиотеку json-path, которая зависит от json-smart, то по умолчанию контейнер загрузит требуемый класс с использованием одного из встроенных модулей.

Увы, у вас есть, кажется, что класс JSONValue, на который зависит ваш json-путь, похоже, имеет это поле defaultReder. Вот змея взрывающегося клока.

public JsonSmartJsonProvider() { 
     this(JSONParser.MODE_PERMISSIVE, JSONValue.defaultReader.DEFAULT_ORDERED); 
    } 

Это

JSONValue.defaultReader 

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

Вы можете сказать, контейнер использовать то, что вы упаковки, поместив в ваш weblogic.xml дескриптора развертывания что-то вроде этого:

<wls:prefer-application-packages>  
<wls:package-name>net.minidev.json.*</wls:package-name>        
</wls:prefer-application-packages> 

У меня возникают совсем немного хлопот получать WebLogic проглотить мелко- выше. я нашел себя, чтобы заставить WebLogic к swallog все, что происходит в веб-инф папку вместо делать:

<wls:container-descriptor> 
     <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>   
    </wls:container-descriptor> 

Я бы предпочел не использовать молоток как веб-инф-классов, но я танцую с загрузчик классов weblogic, когда я не буду грубым зерном ...

С уважением.

0

Похож JsonParser баночка присутствует в JVM 1.8 версии и, кажется, имеет больше приоритета над классом JsonParser доступен в Json- path.jar. По-видимому, случай с нами не работает в версии 12.2.1 веб-сервера, но он отлично работает в 12.1.3

0

Я тоже столкнулся с этой проблемой. Оказалось, что какая-то другая библиотека использовала более раннюю версию json-smart, и она имела приоритет над json-smart-зависимостью json-path. Удаление другой банки разрешило проблему. Или вы также можете понизить версию вашего json-path до соответствующей версии, чтобы она поддерживала более раннюю версию json-smart.