错误很长,但是要学会识别它,一开始我被很多错误误导了. 关键如下:
loader(weblogic / utils / classloaders / ChangeAwareClassLoader的实例)
先前启动了名称为“ javax / xml /名称空间/ QName”的其他类型的加载
可能意味着“启动加载程序时,加载了其他类型的名为javax / xml / namespace / QName的类”. 实际上,转换是在启动时加载了javax / xml / namespace / QName类. 现在weblogic部署项目 文件夹没有成功,我们要使用的函数需要一个名为javax / xml / namespace / QName的类,但这不是我们真正想要的类.

从以上含义可以知道,这是两个具有相同程序包路径和类名称的类,但是有一个我们想要但没有的类,只有一个我们不需要的类. 了解weblogic部署的学生知道weblogic加载相同的课程,而不会加载相同的课程.
当我再次尝试时,我报告了另一个错误(错误的一部分):
Root cause of ServletException. java.lang.NoClassDefFoundError: Could not initialize class org.apache.xmlbeans.XmlBeans at org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook$Factory.newInstance(Unknown Source) at org.apache.poi.xssf.usermodel.XSSFWorkbook.onWorkbookCreate(XSSFWorkbook.java:290) at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:170) at com.kayak.web.base.util.export.ExportExcelXSSF.export(ExportExcelXSSF.java:893) at com.kayak.web.base.action.ExportExcelAction.exportExcel(ExportExcelAction.java:318) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498)
这意味着无法初始化classorg.apache.xmlbeans.XmlBeans. 但是我们不应该被这个误导. 关键在于上面的javax / xml / namespace / QName. 由于这种冲突,将导致以下问题.
我用jfind.jar搜索了该项目下的lib目录,发现在axis-jaxrpc-1.4.jar下有一个javax / xml / namespace / QName.class文件. 因为jdk的rt.jar下有javax / xml / namespace / QName.class,所以会有两个相同的类文件.


稍后,我在项目的WEB-INF下找到了weblogic.xml文件,其中包含有关weblogic的一些配置:
<xml version="1.0" encoding="UTF-8">
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
<charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>UTF-8</java-charset-name>
</input-charset>
</charset-params>
</weblogic-web-app>
配置文件的第四行是仅先加载项目中的类文件,然后再加载weblogic类,这是由于这种配置,导致javax / xml / namespace / QName.class,rt jdk下的.jar也具有javax / xml / namespace / QName.class,但未加载,但后者是程序需要的.
因此,我尝试将weblogic.xml的第4行的配置更改为false,重播war程序包,重新部署,然后发现问题已解决.

然后,我更改了另一种尝试,即weblogic.xml的第4行的配置仍然正确,但是我删除了项目中冲突类所在的包axis-jaxrpc-1.4.jar,并将其重新打包. 部署没有问题. 所以到此为止,问题已经解决
摘要:
1. 在Weblogic中部署Java应用程序时,经常会遇到程序包冲突. 实际上,您可以首先通过修改weblogic.xml配置来解决它们. 另一种方法是通过jfind.jar查找冲突类所在的包. 可以通过直接删除此软件包来解决.
2. 封装冲突的问题可以通过以上两种方法解决. 另外,有时程序包可能找不到类文件. 实际上,这可能是由于类文件和加载顺序的冲突. ,导致我们的项目中真正需要的类文件无法加载.
以上是本文的全部内容,希望对大家的学习有所帮助,并希望您支持脚本编写室.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-189638-2.html
超好
虐
就是能奈何了