minimu 2009-01-15 18:40
浏览 454
已采纳

Jakarta-ORO问题,比较奇怪

开发环境:RAD 6.0

JDK:1.3

测试服务器:WAS 5.0测试服务器

工程类型:web工程



问题过程

1)刚开始直接把Jakarta-ORO.jar导入到lib中,使用Jakarta-ORO Util.split()提示找不到类;但是直接在调用Util的类里面加main可以正确运行;

2)怀疑网上下载的Jakarta-ORO.jar有问题,自己重新打包,问题照旧;

3)删除jar,将Jakarta-ORO的源代码全部导入工程,同样有问题。。。而且debug的时候不能跟进Jakarta-ORO的源代码,提示找不到源

4)将Util.java里面的方法原封不动的复制出来。。。无论直接加到我的类,还是新建类(和调用类同一个包和不同包都测了),都没有任何问题

5)将Util.java改名,新建一个类(在Jakarta-ORO Util原来的包下面),原封不动复制Util的代码过去,还是有问题



虽然可以通过复制代码出来暂时解决,但是总感觉奇怪,也想找出原因,为了这个东东测试了一天了,个人认为:

1)RAD bug?

2)Jakarta-ORO bug?

3)曾经怀疑是测试服务器缓存问题。。新建不同名字的工程,复制代码过去,新建测试服务器,问题照旧!!!



补充一点,只有使用Util这个类报错,其他Jakarta-ORO类正常



确实找不出为什么了。。。请大家帮忙了,谢谢先
问题补充
在CSDN上找到一个类似的问题

http://topic.csdn.net/t/20021206/09/1236060.html

引用


在使用jakarta-oro-2.0.6的时候,编写的一个测试程序,编译的时候通过,可是运行的时候,却报  

  java.lang.NoSuchMethodError  

   

  程序代码如下:(部分主要的)  

   

  public   static   void   main(String[]   args){  

          try{  

                  String   link="   dsfasdfsda";  

                  String   regexForLink="\[IMG\](.[^\[]*)\[\/IMG\]";  

                  PatternCompiler   compiler   =   new   Perl5Compiler();  

                  Pattern   patternForLink=compiler.compile(regexForLink,Perl5Compiler.CASE_INSENSITIVE_MASK);  

                  PatternMatcher   matcher   =   new   Perl5Matcher();  

   

                  StringBuffer   sb   =   new   StringBuffer();  

                  int   i   =   Util.substitute(sb,   matcher,patternForLink,  

                                  new   Perl5Substitution("$1"),  

                                  link,  

                                  Util.SUBSTITUTE_ALL);  

                  System.out.println("   resultstr   =   "+sb.toString());          

          }catch(Exception   e){  

                  e.printStackTrace();  

          }  

  }  

   

  ----------------------  

          错误定位在int   i   =   Util.substitute(···)这一行。可是很奇怪的时候,编译的时候可以编译过去。运行的时候,再报告java.lang.NoSuchMethodError。  

          请问谁有解决办法?


问题补充
Jakarta-ORO 2.08的
问题补充:
不仅是编译可以通过,在类里面加main测试都是正常的



ClassPAth就更没有问题,我从来不会把jar丢classpath的
问题补充:
在wen环境中运行

无论测试环境还是部署后




问题补充:
有的时候有些开发工具可能因为缓存等因素造成不能正确发布,故而测试了下载正式的环境,问题依旧
问题补充:
都不可以。。。



为了排除包的问题,我已经把包都删除了。。。我把oro的jar都删除了,直接从apache上down的源码丢工程里面的,运行的时候使用Java Applicaiotn测试都没有问题;如果在web环境运行都不可以,无论是RAD带的WAS5的测试环境还是在其他服务器上单独安装的WAS。。。而且调试的时候提示没有源代码!!!
问题补充:
谢谢大家了

是WAS里面有一个包里面打包了低版本的ORO的原因(IBM把别人的包直接丢自己包里面去了算不算违反license啊???!!!)

问题解决方法也很多:
1)Put jakarta-oro-2.0.8.jar "in front" in the classloader hierarchy: WebSphereConsole-> server -> Process Definitions -> JVM -> set classpath = path_including_jakarta-oro-2.0.8.jar
==因为这边部署环境比较复杂,在有全国各地哦系统跑,不到万不得已不采用这种方式
2)修改Web的类引导优先级:同样修改WAS部署参数。。。暂时不考虑
  3)最好被迫使用。。。。自己新建一个类,把两个版本ORO的差异的东西加进去。。。


其实大家都帮我解决问题可,不过答案好像只能给一个人。。。。其他的朋友就有点对不住了哈,分给第一个了

  • 写回答

10条回答 默认 最新

  • 不良校长 2009-01-15 23:11
    关注

    楼主, 你debug web server, 看看你的oro代码包是从哪儿载入的, 是不是根本没有用你提供的ORO包。 我记得可以这么看的, 你看看API是不是具体如此。 肯定能看到一个CLASS是从哪个ja包载入的。
    p.getClass().getProtectionDomain().getCodeSource().getLocation().toString();

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!