web應用增加webservice後從tomcat移植到weblogic後各種類衝突,各種異常解決

1. Webservice增加到項目中後,部署到weblogic12c下,在啓動或者部署時報錯:
Caused By: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: Class org.apache.commons.logging.impl.Log4JLogger does not implement Log

執行步驟:
1. 替換了原來的log4j.jar,版本號:Implementation-Version: 1.2.2,替換後版本號:log4j-1.2.17.jar,

2. 將原來的commons-logging.jar包,版本號:Implementation-Version: 1.0.3,替換成commons-logging-1.1.1.jar,成功修復
org.apache.commons.logging.LogConfigurationException: Class org.apache.commons.logging.impl.Log4JLogger does not implement Log
的異常


分析:
此問題應該是common-logging.jar的早期版本的問題,1.04以前都有,用1.1.1版本替換後可以解決
參考文檔:
http://apache-commons.680414.n4.nabble.com/Commons-Logging-Log4JLogger-does-not-implement-Log-exception-td743106.html




二.修復上述問題後,在部署的過程中又出現了別的問題:
java.lang.LinkageError: loader constraint violation: loader (instance of weblogic/utils/classloaders/GenericClassLoader) previously initiated loading for a different type with name "org/apache/struts/action/ActionServlet"

javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: loader (instance of weblogic/utils/classloaders/GenericClassLoader) previously initiated loading for a different type with name "org/apache/struts/action/ActionServlet"
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:379)
at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:453)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:364)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
at financemanage.util.CacheFilter.doFilter(CacheFilter.java:33)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
at financemanage.util.EncodingFilter.doFilter(EncodingFilter.java:63)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
at financemanage.util.SessionCheckFilter.doFilter(SessionCheckFilter.java:55)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
at financemanage.util.threadlocal.ThreadLocalFilter.doFilter(ThreadLocalFilter.java:30)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3288)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1513)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of weblogic/utils/classloaders/GenericClassLoader) previously initiated loading for a different type with name "org/apache/struts/action/ActionServlet"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
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 java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
at org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:802)
at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:506)
at jsp_servlet._financemanage.__login_tran_new._jspService(__login_tran_new.java:244)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:216)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:132)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:338)
... 24 more

好嘛,一步一個坑啊。

我再找。。。。
分析:
先懷疑是web.xml中的加載順序有問題,修改了web.xml文件中servlet的加載順序,同時將<load-on-startup>1</load-on-startup>參數數值小的排在了前面,(注,後面分析這個應該沒有很大的影響)
還是不行。。。
繼續
懷疑是weblogic類加載的順序問題導致的,修改weblogic.xml,增加項目中類庫優先加載,直接增加這個加載後部署會報xml解析錯誤(我這發現是org.w3c.dom.Document是這個類有問題,跟weblogic的jar衝突),需要將xml-api.jar,ss_css2.jar包刪掉
執行操作:
3. 修改weblogic.xml,刪除xml-api.jar,ss_css2.jar
3.1 修改web.xml修改servlet的加載順序及數字:

3.2. weblogic.xml修改內容:黃色部分爲weblogic.xml修改
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD WebApplication 8.1//EN""http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<session-descriptor>
<cookie-name>CWJSESSIONID</cookie-name>
</session-descriptor>

<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
參考文檔:http://blog.csdn.net/lklinkang/article/details/6605466


重新部署,部署、啓動沒有報錯,都正常,登陸首頁報錯:
Compilation of JSP File '/financemanage/login_tran_new.jsp' failed:
________________________________________
login_tran_new.jsp:7:2: Type mismatch: cannot convert from Tag to JspTag
if ( request.getRequestURL().indexOf("10.0.169.165/cwb") != -1 ) {
^------------------------------------------------------------------
%>
^
login_tran_new.jsp:206:4: Type mismatch: cannot convert from FormTag to JspTag
<html:form action="/financemanage/login.do" method="post">
^-------^
login_tran_new.jsp:220:12: Type mismatch: cannot convert from ErrorsTag to JspTag
<html:errors/>
^---------^
login_tran_new.jsp:220:25: The method _releaseTags(PageContext, JspTag) in the type __login_tran_new is not applicable for the arguments (PageContext, ErrorsTag)
<html:errors/>
^
login_tran_new.jsp:220:25: Type mismatch: cannot convert from Tag to JspTag
<html:errors/>
^
login_tran_new.jsp:225:41: The method _releaseTags(PageContext, JspTag) in the type __login_tran_new is not applicable for the arguments (PageContext, FormTag)
<td height="30"><img src="<%=path%>financemanage/images/style_new/login_btn.gif" alt="" style='cursor:pointer' onclick="formsubmit()"/></td>
^--------------------------------------------------------------------------------------------------------
</html:form>
---------^
login_tran_new.jsp:225:41: Type mismatch: cannot convert from Tag to JspTag
<td height="30"><img src="<%=path%>financemanage/images/style_new/login_btn.gif" alt="" style='cursor:pointer' onclick="formsubmit()"/></td>
^--------------------------------------------------------------------------------------------------------
</html:form>
---------^
分析:是JspTag的相關類跟weblogic的發生衝突,通過eclipse工具在項目中的統計查找,沒發現JspTag的類,只在servlet.jar中找到了一個JspTagException,不知道對不對,先試試吧,刪之。。
執行操作:
4. 刪除servlet.jar再試,

再次測試部署,啓動,貌似都正常
登陸首頁,OK,可以正常登陸,

直接訪問webservice,(http://10.10.111.29:7001/cwService)
Ok,出來了配置信息,

至此,問題解決。

需要注意的是,刪除後沒有在tomcat環境下測試,只是在weblogic12c環境下測試通過
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章