WebSphere5.1在部署报表工程的时候可能会出现如下错误:[10-7-712:23:47:750CST]44a5ba79WebGroupESRVE0026E:[Servlet错误]-[javax.xml.namespace.QName:methodgetPrefix()Ljava/lang/String;notfound]:java.lang.NoSuchMethodError:javax.xml.namespace.QName:methodgetPrefix()Ljava/lang/String;notfoundatcom.sun.xml.stream.events.XMLEventAllocatorImpl.fillAttributes(XMLEventAllocatorImpl.java:186)atcom.sun.xml.stream.events.XMLEventAllocatorImpl.getXMLEvent(XMLEventAllocatorImpl.java:78)atcom.sun.xml.stream.events.XMLEventAllocatorImpl.allocate(XMLEventAllocatorImpl.java:54)atcom.sun.xml.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:87)atcom.fr.base.xml.XMLableReader.initRootElement(UnknownSource)atcom.fr.base.xml.XMLableReader.createXMLableReader(UnknownSource)atcom.fr.base.XMLFileManager.readInputStreamXML(UnknownSource)atcom.fr.base.XMLFileManager.readXMLFile(UnknownSource)[10-7-712:23:52:875CST]44a5ba79WebGroupESRVE0026E:[Servlet错误]-[com/fr/web/core/ReportDispatcher]:java.lang.NoClassDefFoundError:com/fr/web/core/ReportDispatcheratcom.fr.web.ReportServlet.doGet(UnknownSource)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:740)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:853)atcom.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)atcom.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)atcom.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)atcom.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)atcom.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)atcom.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)atcom.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
工具/原料
FineReport
WebSphere5.1
报错原因
1、由于FineReport使用了一些第三方的插件跟WebSphere5.1里面的插件相同,但是插件版本 不同(不同版本间方法的个数与实现可能不同),相同的插件只会加载一个版本如加载了WebSphere5.1中使用的版本,当报表端使用到该第三方插件时就可能会因为找不到某些类而报如上的错误。
解决方案
1、为了不发生找不到类的错误,就需要调整类加载顺序,确保服务器加载了FineReport下的第三方插件版本,具体步骤如下。
2、1确定jar包位置由上报错信息,找到报错中所示的类文件所在的jar包:D:\FineReport_7.0\WebReport\WEB-INF\lib下的fr-third-7.0.jar跟fr-server-7.0.jar下面fr-third-7.0.jar\Javax\xml\namespace\QName.class
3、fr-server-7.0.jar\com\fr\web\core\ReportDispatcher.class注:由于FineReport各个版本不同,jar包的名字会有所不同,一般性后面会带上大版本的版本号,比如说7.1版本,jar包名称为fr-server-7.1.jar
4、2拷贝jar包将这2个与报错相关的jar包拷贝到WebSphere5.1的WebSphere\AppServer\lib下面,重启WebSphere即可解决问题