郁闷死了,没接触过WebLogic,在Tomcat中没问题,在Weblogic中就出现各种问题~~~
1. 现象一:明明 myWebAppWEB-INF/lib 下有自己使用的 common-net.2.0.jar, 然后使用它来进行FTPS上传。但是部署到WebLogic上之后,就报 javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 自己写了一个简单的Servlet,加入以下代码:
OutputStream fo = new FileOutputStream("/t.txt");
fo.write((" Ftpclient path = " + FTPClient.class.getResource("FTPClient.class")).getBytes());
fo.flush();
结果打印的是
Ftpclient path = jar:file:
/data/bea11g/modules/com.bea.core.apache.commons.net_1.0.0.0_1-4-1.jar!/org/apache/commons/net/ftp/FTPClient.class
标红的路径是 WebLogic的安装路径。
原来是ClassLoader加载顺序的问题。郁闷。浪费了N多精力:
google吧~~:
修改方法:在 /WEB-INF/weblogic.xml 中追加以下设定:
- <weblogic-web-app
-
xmlns:xsi=""
-
xmlns="http://www.bea.com/ns/weblogic/90"
-
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
-
...
-
<container-descriptor>
-
<prefer-web-inf-classes>true</prefer-web-inf-classes>
-
</container-descriptor>
-
...
-
</weblogic-web-app>
2.1 IllegalArgumentException
官网的回答是在 IBM JDK的原因,需要在
/wlserver_##.#/common/bin/commEnv.sh 中追加如下一行:
- JAVA_OPTIONS="$JAVA_OPTIONS -Djavax.xml.validation.SchemaFactory:=org.apache.xerces.jaxp.validation.XMLSchemaFactory"
但是,我这里在安装在CentOS 5上,且使用的是最新的Weblogic 11g,只有其自带Sun的1.60_24的JDK和Oracle的jrockit_160_24_D1.1.2-4的JDK,按照上面的配置也不起作用。
2.2 ClassNotFoundException:org.apache.xerces.jaxp.datatype.DataTypeFactoryImpl
解决方法:
也许还是第一个问题的的原因吧,造成WebLogic自带的一些jar包的使用顺序被排到后面去了。而我这里使用的工程中xercesjar包是 WEB-INF/lib/xercesImpl-2.6.2.jar,其中确实没有 DataTypeFactoryImpl。于是,把xercesImpl-2.6.2.jar 替换成 xerces 中 2.9.1的 xercesImpl.jar之后,问题解决。
阅读(2112) | 评论(0) | 转发(0) |