IBM JDK一个诡异问题:java类名无效

精贴 置顶
1598 0

  这几天碰到一个诡异的问题,在IBM JDK上二位数组中使用表达式时,出现http 500的错误。500是个内部错误,更web container有关,拿了客户的日志文件,发现异常如下,

  <2009-7-23 上午05时01分47秒 CDT> <[weblogic.servlet.internal.WebAppServletContext@1aec462 - appName: 'test', name: 'test', context-path: '/test', spec-version: '2.5'] Root cause of ServletException.

  javax.servlet.ServletException: [HTTP:101249][weblogic.servlet.internal.WebAppServletContext@1aec462 - appName: 'test', name: 'test', context-path: '/test', spec-version: '2.5']: Servlet class jsp_servlet.__test for servlet /test.jsp could not be loaded because the requested class was not found in the classpath .

  java.lang.ClassFormatError: Illegal class name "[L[Ljava/lang/String;;" in class file jsp_servlet/__test.

  ......

  从具体的异常堆栈来看,应该是class加载时出现了问题,说是类名有问题,但同一context root下类名格式相同的其他page则可以访问。如果去掉二位数组中的表达式,则可以解决这个问题。下面我们通过一个最简单的例子来复现这个问题。

  1:IBM JDK version

  E:\workspace\eclipse322\src1030\bin>java -version

  java version "1.6.0"

  Java(TM) SE Runtime Environment (build pwi3260sr2-20080818_01(SR2))

  IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 Windows XP x86-32 jvmwi3260-20080816

  _22093 (JIT enabled, AOT enabled)

  J9VM - 20080816_022093_lHdSMr

  JIT - r9_20080721_1330ifx2

  GC - 20080724_AA)

  JCL - 20080808_02

  2: __MatrixTest.java

 


 1 package test.classload;
  2
  3 public class __MatrixTest {
  4 public void initialize(){
  5 String sResourcesPath = "";
  6 String sCustomerScale = "123";
  7 String sCustomerType = "123";
  8 String teststr=((!sCustomerScale.equals("")&&sCustomerScale.substring(0,2).equals("02"))?"false":"true");
  9 String sButtons[][] = {
  10 {((!sCustomerScale.equals("")&&sCustomerScale.substring(0,2).equals("02"))?"false":"true"),
  11 "","Button","新增","新增一条记录","newRecord()",sResourcesPath},
  12 //If above expression is replaced with 'teststr' like below, this issue could be solved.
  13 //{teststr,"","Button","新增","新增一条记录","newRecord()",sResourcesPath}
  14 };
  15 }
  16 }

  3: LoaderTest.java


 1 package test.classload;
  2
  3 public class LoaderTest {
  4
  5 public static void main(String args[]){
  6 try{
  7 Class clazz = Class.forName("test.classload.__MatrixTest");
  8 __MatrixTest test = (__MatrixTest)clazz.newInstance();
  9
  10 System.out.println("class is loaded");
  11 }catch(Exception e){
  12 e.printStackTrace();
  13 }
  14
  15 }
  16 }

  4: 运行结果

  这个程序在Sun JDK及BEA JRockit上运行的话,都没有问题。而在IBM JDK1.6上运行的话,会出现如下的如下的异常,

  E:\workspace\eclipse322\src1030\bin>java test.classload.LoaderTest

  Exception in thread "main" java.lang.ClassFormatError: JVMCFRE068 类名无效;类=test/classload/__MatrixTest,偏移量=0

  at java.lang.ClassLoader.defineClassImpl(Native Method)

  at java.lang.ClassLoader.defineClass(ClassLoader.java:265)

  at java.security.SecureClassLoader.defineClass(Unknown Source)

  at java.net.URLClassLoader.defineClass(URLClassLoader.java:493)

  at java.net.URLClassLoader.access$300(URLClassLoader.java:64)

  at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:892)

  at java.security.AccessController.doPrivileged(AccessController.java:284

  )

  at java.net.URLClassLoader.findClass(URLClassLoader.java:414)

  at java.lang.ClassLoader.loadClass(ClassLoader.java:643)

  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:300)

  at java.lang.ClassLoader.loadClass(ClassLoader.java:609)

  at java.lang.Class.forNameImpl(Native Method)

  at java.lang.Class.forName(Class.java:136)

  at test.classload.LoaderTest.main(LoaderTest.java:22)

  这应该是JDK本身的问题,不知道二维数组中表达式怎么会引发类名解析问题。目前我所知道的解决办法只是把数组中的表达式挪到数组定义外面,就像__MaxtrixTest中所说的一样。

  • 没有任何评论
今日天气 ···

···

···

···

热门排行
CSS cursor鼠标样式一览表 2012-06-25
.NET后台写JS代码 2011-11-03
网站地址多出jdfwkey的问题解析及... 2010-08-25
数据库xxx的日志已满,请备份该数... 2013-07-19
百度、google、Yahoo网站地图制作... 2011-01-30
<a>标签的伪类书写顺序问题... 2010-09-04
什么是长尾关键词? 2010-09-24
CEO名言 2010-08-31
Mysql 主从数据库同步 2010-09-12
用ASP实现网页BBS 2010-11-01
博主推荐
本个人博客微信公众平台上线啦~~... 2013-10-13
饼哥网络互联上线啦~~要买域名空... 2013-09-20
网站title标题如何正确修改不会被... 2013-08-26
饼哥通讯录系统上线啦,欢迎大家... 2013-08-24
ASP .NET MYSQL 的简单分页 并不... 2013-08-19
网站有弹窗广告这样的站点,百度... 2013-08-17
做淘宝SEO优化需要注意的8大问题 2013-08-17
淘宝网怎么做SEO优化 2013-08-17
站长们要学习的“苍井空精神” 2013-08-17
苹果公司今日发布了iOS 7第五个开... 2013-08-07
随便看看
VS2008切换设计视图假死机情况,以... 2013-05-03
两招轻松搞定Windows 7系统的自动... 2011-01-20
jsp的运行方式 2010-11-05
Description Tag-描述标签 2010-09-19
存储位置优化——把视图状态信息... 2013-11-15
php计算字符串中重复数字的出现次... 2010-10-11
.NET(C#)多文件上传--使用JS生成... 2010-09-09
asp.net常用代码 2010-09-11
Java实现太极八卦的绘制 2013-06-24
递归计算子节点的个数 2010-10-12
RSS新闻
传媒新闻
CSDN
八卦新闻
女性新闻
台湾新闻
互联网
军事-新浪博客
IT-新浪博客
汽车新闻
游戏新闻
国际新闻
国内新闻
体育新闻
我的微博
北京 上海 杭州 深圳 广州 成都