vin*_*San 5 json jsonpath nomethoderror
我正在使用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)
Run Code Online (Sandbox Code Playgroud)
偶然发现同样的问题.
它不起作用的原因不是JDK 8.你遇到这个问题的原因是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-path库依赖于json-smart,那么默认情况下容器将使用其内置模块加载所需的类.
您所拥有的爆炸似乎是您的json-path所依赖的JSONValue类似乎具有此defaultReder字段.这是一个正在爆炸的clode snipet.
public JsonSmartJsonProvider() {
this(JSONParser.MODE_PERMISSIVE, JSONValue.defaultReader.DEFAULT_ORDERED);
}
Run Code Online (Sandbox Code Playgroud)
那
JSONValue.defaultReader
Run Code Online (Sandbox Code Playgroud)
似乎在weblogs旧系统类加载器类上无效.
您可以通过将weblogic.xml部署描述符放入以下内容来告诉容器使用您正在打包的内容:
<wls:prefer-application-packages>
<wls:package-name>net.minidev.json.*</wls:package-name>
</wls:prefer-application-packages>
Run Code Online (Sandbox Code Playgroud)
我在使用weblogic吞下上面的细粒度指令时遇到了一些麻烦.我发现自己强迫weblogic swallog进入web-inf文件夹而不是做:
Run Code Online (Sandbox Code Playgroud)<wls:container-descriptor> <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> </wls:container-descriptor>
我宁愿不使用像网络inf-classes这样的锤子,但是当我不粗磨时,我正在使用weblogic系统类加载器...
问候.
| 归档时间: |
|
| 查看次数: |
5663 次 |
| 最近记录: |