背景:Tomcat報出java.lang.NoClassDefFoundError,在Windchill中部署完Webservice后,報如下錯:
AXIS error Sorry, something seems to have gone wrong... here are the details: Fault - java.lang.NoClassDefFoundError: javax/xml/namespace/QName; nested exception is: java.lang.NoClassDefFoundError: javax/xml/namespace/QName AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException faultSubcode: faultString: java.lang.NoClassDefFoundError: javax/xml/namespace/QName; nested exception is: java.lang.NoClassDefFoundError: javax/xml/namespace/QName faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}hostname:jason
分析:
在Windchill中部署時,因%Windchill_home%/codebase/WEB-INF/lib下的jar檔過多,而使MethodServer起不來, 所以將幾個jar檔放入了%Tomcat_Home%/shared/lib下,所以應該是jar檔拷貝的問題
解決:
將wsdl4j-1.5.1.jar和jaxrpc.jar檔拷貝在一個文件夾下
如:將如上兩個jar文件均拷貝至%Tomcat_Home%/shared/lib下
總結:Tomcat在Web工程執行時,jar檔中class的引用滿足:級別高的lib下的不能訪問到比自己級別低的 Tomcat中lib文件夾的級別由高到低如下: common/lib,shared/lib,WEB-INF/lib