weblogic类冲突报错

目录:

1. 描述

通过weblogic部署我方报表应用,在使用过程中可能会出现一些相关于类冲突的报错信息,这一类问题该如何解决呢?

2. 报错信息

报错1

java.lang.NoClassDefFoundError: com/sun/xml/stream/XMLReaderImpl
报错类%weblogic_home%/bea/modules目录下的glassfish.jaxws.sjsxp_2.0.1.jar。
报错2
Weblogic8.1部署WebReport工程时的报错:
Error 500--Internal Server Error java.lang.NoSuchMethodError: javax.xml.namespace.QName.getPrefix()Ljava/lang/String; at com.sun.xml.stream.events.XMLEventAllocatorImpl.fillAttributes(XMLEventAllocatorImpl.java:186) at com.sun.xml.stream.events.XMLEventAllocatorImpl.getXMLEvent(XMLEventAllocatorImpl.java:78) at com.sun.xml.stream.events.XMLEventAllocatorImpl.allocate(XMLEventAllocatorImpl.java:54) at com.sun.xml.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:87) at com.fr.base.xml.XMLableReader.readXMLObject(XMLableReader.java:237) at com.fr.report.io.core.IOHelper.generateTemplate(IOHelper.java:276) at com.fr.report.io.TemplateImporter.generate(TemplateImporter.java:16) at com.fr.web.core.SessionIDInfor$EmbeddedTpl.gen(SessionIDInfor.java:1568) at com.fr.web.core.SessionDealWith.generateSessionID(SessionDealWith.java:214) at com.fr.web.core.ReportletDealWith.dealWithReportlet(ReportletDealWith.java:35) at com.fr.web.core.ReportDispatcher.checkAppServerConfig(ReportDispatcher.java:1183) at com.fr.web.core.ReportDispatcher.dealWithRequest(ReportDispatcher.java:285) at com.fr.web.ReportServlet.doGet(ReportServlet.java:169) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6310) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
报错类:jaxrpc.jar。
报错3
weblogic9部署WebReport工程时的报错:
[Fatal Error] :-1:-1: Premature end of file. Aug 16, 2011 2:49:55 PM com.fr.base.FRContext getScheduleManager WARNING: XML?????? com.fr.web.ReportletException: XML?????? at com.fr.base.core.BaseCoreUtils.parseXML(Unknown Source) at com.fr.base.core.BaseCoreUtils.parseXML(Unknown Source) at com.fr.base.XMLFileManager.readInputStreamXML(Unknown Source) at com.fr.base.FRContext.getScheduleManager(Unknown Source) at com.fr.web.ReportServlet.init(Unknown Source) at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(St ubSecurityHelper.java:278)
报错4

weblogic10.0.3或weblogic10.3.1部署WebReport工程时的报错:
java.lang.ClassCastException: com.sun.xml.stream.ZephyrParserFactory cannot be cast to javax.xml.stream.XMLInputFactory
报错类:fr-third-xx.jar

3. 报错原因

这一类报错是由于类重用导致即类冲突,因为FineReport使用了一些第三方的插件跟weblogic里面的插件相同,但是插件版本不同(不同版本间方法的个数与实现可能不同),相同的插件只会加载一个版本,而weblogic会优先加载weblogic自身的类,如果加载了weblogic中使用的版本,当报表端使用到该第三方插件时就可能会因为找不到某些类而报如上的错误。

4. 解决方案

解决的主要思想就是修改加载顺序,使之优先加载FineReport中的类,即使正确的jar包先于weblogic.jar加载,在%/WebReport%/WEB-INF文件夹下新建weblogic.xml配置文件,让服务器优先调用报表工程下的jar包,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"> <weblogic-web-app> <container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor> </weblogic-web-app>

注:若方案无法解决,可以搜索其他方案或者联系技术支持协助QQ:800049425

附件列表


主题:
标签: 暂无标签

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201