一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 關于weblogic部署Java項目的包沖突問題的解決

關于weblogic部署Java項目的包沖突問題的解決

2021-07-11 21:28sunshine6 Java教程

這篇文章主要介紹了關于weblogic部署Java項目的包沖突問題的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

我們可能會用各種應用服務部署我們的java應用,比如tomcat、was、weblogic等。tomcat和was可能會比較少遇到一些奇怪的問題,但是用weblogic部署項目則經常遇到一些比如包沖突問題,路徑問題等奇怪但又常見的問題。

今天我就講講關于weblogic部署java項目包沖突的問題。下面我舉個例子:

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

關于weblogic部署Java項目的包沖突問題的解決

后臺報了這個錯:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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)

錯誤內容很長,但是要學會辨認,我剛開始就被一大堆錯誤誤導了。關鍵的都是下面的這個:

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

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

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

當我再操作一次的之后又報另一個錯(部分錯誤內容):

?
1
2
3
4
5
6
7
8
9
10
11
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所以就會有兩個一樣的class文件。

關于weblogic部署Java項目的包沖突問題的解決

后面我發現在項目的 web-inf 下面有個weblogic.xml 文件,里面就有一些關于weblogic的配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
<?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,也就是因為這個配置而導致了項目里的axis-jaxrpc-1.4.jar下有javax/xml/namespace/qname.class,jdk下的rt.jar 下面也有javax/xml/namespace/qname.class卻沒有加載到,但是后者才是程序所需要的。

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

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

總結:

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

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

 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/sunshine6/p/10301372.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 涩涩五月天 | 肉文小说 | 免费一级片在线观看 | 国产精品美女久久久久 | 欧美草逼视频 | 亚洲区一| 亚洲国产美女精品久久久久 | 亚洲第一页综合 | 欧美日韩国产中文字幕 | 五月天视频网 | uoco福利姬 | 久久精品视频在线看 | 欧美午夜视频一区二区 | 天天狠天天天天透在线 | 91aaa在线观看| 从后面撕开老师的丝袜动态图 | 91麻豆国产福利在线观看 | 国产精品福利一区二区亚瑟 | 九草在线视频 | 国产精品永久免费自在线观看 | 免费看60分钟大片视频播放 | 久久国产视频网 | 欧美艳星kagneyiynn高清 | 亚洲精品无码不卡在线观看 | 厕所rxxx | 99精品久久精品一区二区 | 欧美成人福利视频 | 男人吃奶动态图 | 国产卡一卡二卡四卡无卡 | 故意短裙公车被强好爽在线播放 | 日本b站一卡二不卡三卡四卡 | 肥胖女性大bbbbbb视频女厕 | 99在线免费播放 | yellow视频在线观看 | 视频一区二区 村上凉子 | 精品日韩欧美一区二区三区 | 国产人妖ts在线视频网 | 2022最新a精品视频在线观看 | 午夜福利试看120秒体验区 | 国产清纯91天堂在线观看 | 91最新高端约会系列178 |