我正在使用JSON解析器提取值,并且正在使用以下jar json- path-2.1.0,当我调用在weblogic服务器上部署为webservice的用例时,出现以下错误:从json字符串中提取值,效果很好,但是用例的服务器版本引起了问题。我不确定耳朵中是否还有其他罐子会对这产生负面影响
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)
偶然发现了同样的问题。
它不起作用的原因不是JDK8。之所以遇到此问题,是因为weblogic 12.2.1.X捆绑了一些旧版本的json-smart。
在我的机器上,可以在这里找到:jar:file:/ C:/dev/WLS_12_2_1_2_0/oracle_common/modules/net.minidev.json- smart.jar!/net/minidev/json/JSONValue.class
现在,如果您使用的是依赖于json-smart的库,例如json-path,那么默认情况下,容器将使用其内置模块之一加载所需的类。
您遇到的麻烦似乎是您的json路径所依赖的JSONValue类似乎具有此defaultReder字段。这是正在爆炸的凝块的片段。
public JsonSmartJsonProvider() { this(JSONParser.MODE_PERMISSIVE, JSONValue.defaultReader.DEFAULT_ORDERED); }
那
JSONValue.defaultReader
似乎在Weblogs较早的系统类加载器类上无效。
您可以通过将如下所示的内容放入weblogic.xml部署描述符中来告诉容器使用您要打包的内容:
<wls:prefer-application-packages> <wls:package-name>net.minidev.json.*</wls:package-name> </wls:prefer-application-packages>
让weblogic吞下上述细粒度的指令给我带来了很多麻烦。我发现自己强迫weblogic将进入web-inf文件夹的所有内容都记录下来,而不是做:
<wls:container-descriptor> <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> </wls:container-descriptor>
我宁愿不像web-inf-class那样使用锤子,但是当我不粗粒度的时候,我正在与weblogic系统类加载器共舞…
问候。