最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于weblogic部署Java項目的包沖突問題的解決

 更新時間:2019年01月22日 14:13:01   作者:sunshine6  
這篇文章主要介紹了關(guān)于weblogic部署Java項目的包沖突問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我們可能會用各種應(yīng)用服務(wù)部署我們的Java應(yīng)用,比如Tomcat、WAS、weblogic等。Tomcat和WAS可能會比較少遇到一些奇怪的問題,但是用weblogic部署項目則經(jīng)常遇到一些比如包沖突問題,路徑問題等奇怪但又常見的問題。

今天我就講講關(guān)于weblogic部署Java項目包沖突的問題。下面我舉個例子:

當(dāng)我在weblogic部署Java項目之后,啟動沒報任何錯,沒有異常。但是當(dāng)操作某個功能的時候頁面就報錯了:

后臺報了這個錯:

Root cause of ServletException.
java.lang.LinkageError: loader constraint violation: loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) 
previously initiated loading for a different type with name "javax/xml/namespace/QName"
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  at weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:343)
  at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:302)
  at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
  at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
  at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:49)
  at java.lang.Class.getDeclaredMethods0(Native Method)
  at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
  at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
  at java.lang.Class.getMethod0(Class.java:3018)
  at java.lang.Class.getMethod(Class.java:1784)
  at org.apache.xmlbeans.XmlBeans.buildMethod(XmlBeans.java:174)
  at org.apache.xmlbeans.XmlBeans.buildNoArgMethod(XmlBeans.java:190)
  at org.apache.xmlbeans.XmlBeans.buildGetContextTypeLoaderMethod(XmlBeans.java:200)
  at org.apache.xmlbeans.XmlBeans.<clinit>(XmlBeans.java:126)
  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)
  at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
  at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
  at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
  at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
  at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
  at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
  at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
  at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
  at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
  at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
  at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
  at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
  at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
  at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
  at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
  at com.kayak.web.user.filter.LoginCertifyFilter.doFilter(LoginCertifyFilter.java:125)
  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
  at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
  at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
  at com.kayak.web.base.filter.LocalRequestFilter.doFilter(LocalRequestFilter.java:28)
  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
  at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
  at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3748)
  at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714)
  at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
  at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
  at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2283)
  at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182)
  at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1499)
  at weblogic.work.ExecuteThread.execute(ExecuteThread.java:263)
  at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

錯誤內(nèi)容很長,但是要學(xué)會辨認(rèn),我剛開始就被一大堆錯誤誤導(dǎo)了。關(guān)鍵的都是下面的這個:

loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader)
previously initiated loading for a different type with name "javax/xml/namespace/QName"

大概意思就是“加載器之前啟動的時候加載了名字叫javax/xml/namespace/QName的其他類型的類”。其實轉(zhuǎn)換一下就是,在啟動的時候加載了一個javax/xml/namespace/QName類,我們現(xiàn)在要用的功能需要一個類也叫javax/xml/namespace/QName,但是這個不是我們真正想要的class。

從上面的意思可以知道,這就是有兩個相同包包路徑和類名稱的class,但是有一個想要的卻沒有,只有一個我們并不想要的class。了解weblogic部署的同學(xué)都知道,weblogic加載了一個相同的class就不會在加載其他一樣的class了。

當(dāng)我再操作一次的之后又報另一個錯(部分錯誤內(nèi)容):

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。但是我們不要被這個所誤導(dǎo),關(guān)鍵還是在于上面的javax/xml/namespace/QName ,就是因為這個沖突了所以才會導(dǎo)致后面的問題發(fā)生。

我用 jfind.jar 在項目下的lib目錄下搜索發(fā)現(xiàn)在axis-jaxrpc-1.4.jar下有javax/xml/namespace/QName.class文件。因為在jdk下的 rt.jar 下面也有javax/xml/namespace/QName.class所以就會有兩個一樣的class文件。

后面我發(fā)現(xiàn)在項目的 WEB-INF 下面有個weblogic.xml 文件,里面就有一些關(guān)于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>

這個配置文件里的第4行配置就是只先加載項目里的class文件,再加載weblogic的class,也就是因為這個配置而導(dǎo)致了項目里的axis-jaxrpc-1.4.jar下有javax/xml/namespace/QName.class,jdk下的rt.jar 下面也有javax/xml/namespace/QName.class卻沒有加載到,但是后者才是程序所需要的。

因此,我就嘗試把weblogic.xml的第4行配置 改成 false,重新打war包,重新部署,然后發(fā)現(xiàn)問題解決了。

接著我又換了一種嘗試,就是weblogic.xml的第4行配置依然是true ,但是我把項目里那個沖突的class所在的包 axis-jaxrpc-1.4.jar 刪了,也重新打包部署,也沒有問題了。所以到此就把問題給解決了

總結(jié):

1. 在weblogic中部署Java應(yīng)用時,經(jīng)常遇到包沖突問題,其實首先可以通過修改weblogic.xml配置來解決,另一種方式就是通過jfind.jar 找出沖突的class所在的包,直接把這個包刪了,可以解決。

2. 包沖突問題都可以通過上面的兩種方式解決,還有就是 有時候可能會包找不到某個class文件,其實很有可能就是因為class文件沖突,以及先后加載的順序問題,導(dǎo)致我們項目中真正需要的class文件卻沒有被加載進(jìn)來。

 以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 快速搭建springboot項目(新手入門)

    快速搭建springboot項目(新手入門)

    本文主要介紹了快速搭建springboot項目(新手入門),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • IDEA如何實現(xiàn)批量修改變量名

    IDEA如何實現(xiàn)批量修改變量名

    這篇文章主要介紹了IDEA如何實現(xiàn)批量修改變量名問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 使用logback配置按天和文件大小切割輸出日志

    使用logback配置按天和文件大小切割輸出日志

    這篇文章主要介紹了使用logback配置按天和文件大小切割輸出日志方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Lucene源碼系列多值編碼壓縮算法實例詳解

    Lucene源碼系列多值編碼壓縮算法實例詳解

    這篇文章主要為大家介紹了Lucene源碼系列多值編碼壓縮算法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 詳解SpringBoot結(jié)合swagger2快速生成簡單的接口文檔

    詳解SpringBoot結(jié)合swagger2快速生成簡單的接口文檔

    這篇文章主要介紹了詳解SpringBoot結(jié)合swagger2快速生成簡單的接口文檔,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 使用Log4j2代碼方式配置實現(xiàn)線程級動態(tài)控制

    使用Log4j2代碼方式配置實現(xiàn)線程級動態(tài)控制

    這篇文章主要介紹了使用Log4j2代碼方式配置實現(xiàn)線程級動態(tài)控制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • MyBatis-Plus邏輯刪除和字段自動填充的實現(xiàn)

    MyBatis-Plus邏輯刪除和字段自動填充的實現(xiàn)

    本文主要介紹了MyBatis-Plus邏輯刪除和字段自動填充的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 詳細(xì)Java批量獲取微信公眾號方法

    詳細(xì)Java批量獲取微信公眾號方法

    本篇文章給大家講解了用JAVA如何實現(xiàn)向爬蟲一樣獲取微信公眾號和其基本信息等,需要你正巧需要,那跟著學(xué)習(xí)參考下吧。
    2017-12-12
  • Java實現(xiàn)五子棋的基礎(chǔ)方法

    Java實現(xiàn)五子棋的基礎(chǔ)方法

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)五子棋的基礎(chǔ)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 解析Spring框架中的XmlBeanDefinitionStoreException異常情況

    解析Spring框架中的XmlBeanDefinitionStoreException異常情況

    這篇文章主要介紹了解析Spring框架中的XmlBeanDefinitionStoreException異常情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論

文山县| 贡觉县| 阿尔山市| 广昌县| 阿鲁科尔沁旗| 潢川县| 庆阳市| 乌拉特前旗| 镇坪县| 海安县| 石河子市| 富蕴县| 安仁县| 原阳县| 枣阳市| 丹阳市| 宁波市| 汾西县| 富阳市| 收藏| 五峰| 马山县| 富锦市| 寿阳县| 长武县| 布拖县| 龙游县| 屯留县| 资兴市| 佛教| 北海市| 法库县| 潞西市| 正阳县| 高尔夫| 平舆县| 延边| 桐城市| 察隅县| 浦城县| 富蕴县|