在weblogic8上要用Java Mail,引入了apache的commons-email-1.2.jar,因为weblogic8上用的JDK版本是1.4,所以没有Java Mail的API,需要引入mail.jar,然而在运行的时候,抛出了下面的异常
java.lang.NoSuchMethodError: javax.mail.internet.InternetAddress.validate()V
原因在于apache的commons-emial-1.2.jar中的代码调用了javax.mail.internet.InternetAddress这个类,而这个类应该在mail.jar中,反编译了mail.jar发现InternetAddress中有validate这个方法,经过调试发现,还有j2ee.jar和weblogic.jar这两个jar包中都有该类的class,而且都没有validate这个方法,所以现在问题是要让weblogic启动的时候加载mail.jar,而不要加载j2ee.jar或者weblogic.jar。
由于weblogic.jar是系统级别的jar包,不是放在app的lib目录下的,最后解决方法是修改startWebLogic.sh文件的CLASSPATH加载顺序
jar:${WL_HOME}/server/lib/webservices.jar:${CLASSPATH}"