`
jiqing0311
  • 浏览: 67804 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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环境下测试通过


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics