您的位置:首页 > 数据库 > Oracle

Java中同版本json.jar包在OpenJDK与OracleJDK环境中异常说明

2016-08-01 00:00 639 查看
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50593545

1. 事件

发现一个情况,同一个工程,json-20151123.jar包在OpenJDK中使用有异常,但在OracleJDK环境中调用则没有异常。其中异常如下:

java.lang.UnsupportedClassVersionError: org/json/JSONException : Unsupported major.minor version 51.0

2. 详情

如这个版本的json-20151123.jar,在OracleJDK运行正常。

<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20151123</version>
</dependency>

但是,将工程部署至线上服务器,线上服务器为OpenJDK,则报异常:

java.lang.UnsupportedClassVersionError: org/json/JSONException : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at com.autonavi.method.gaokuai.IssueUpload.action1(IssueUpload.java:62)
at com.autonavi.task.ScheduledTasks.executeUploadTask(ScheduledTasks.java:56)
at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:165)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)

同时,本地我的jdk是OracleJDK

java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

远程服务器上的jdk是OracleJDK

java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.4) (rhel-1.41.1.10.4.1.alios6-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)

3. 处理

经过排查,应该是1.6.0_22版本OpenJDK JVM对json-20151123.jar中使用的某些方法不支持。需要降低jar包版本,改为:

<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>

调整后,线上服务器运行正常,本地运行也正常。所以问题就是出在JDK对jar包方法不支持上。

参考资料:How to use the org.json Java library with Java 7
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: