spring使用java 8在WebSphere上运行应用程序时出现exception

在WebSphere 9.0 java 8上运行应用程序时,我收到了几个IllegalStateExceptionCannotCompileExceptionLinkageError 。 这是堆栈的错误跟踪:

 Caused by: java.lang.IllegalStateException: javassist.CannotCompileException: by java.lang.LinkageError: org.springframework.aop.framework.ProxyCreatorSupport at org.springframework.aop.framework.JavassistApplicationContext.(JavassistApplicationContext.java:61) ... 114 more Caused by: javassist.CannotCompileException: by java.lang.LinkageError: org.springframework.aop.framework.ProxyCreatorSupport at javassist.ClassPool.toClass(ClassPool.java:1120) at javassist.ClassPool.toClass(ClassPool.java:1063) at javassist.ClassPool.toClass(ClassPool.java:1021) at javassist.CtClass.toClass(CtClass.java:1259) at org.springframework.aop.framework.JavassistApplicationContext.(JavassistApplicationContext.java:59) ... 114 more Caused by: java.lang.LinkageError: org.springframework.aop.framework.ProxyCreatorSupport at java.lang.ClassLoader.defineClassImpl(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:346) at java.lang.ClassLoader.defineClass(ClassLoader.java:283) at sun.reflect.GeneratedMethodAccessor17.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) at java.lang.reflect.Method.invoke(Method.java:508) at javassist.ClassPool.toClass2(ClassPool.java:1133) at javassist.ClassPool.toClass(ClassPool.java:1114) ... 118 more 

而且我得到java.lang.ExceptionInInitializerError

 com.ibm.ws.webcontainer.webapp.WebApp notifyServletContextCreated SRVE0283E: Exception caught while initializing context: {0} java.lang.ExceptionInInitializerError at java.lang.J9VMInternals.ensureError(J9VMInternals.java:141) at java.lang.J9VMInternals.recordInitializationFailure(J9VMInternals.java:130) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:88) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57) at java.lang.reflect.Constructor.newInstance(Constructor.java:437) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:258) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 

pom.xml文件中,我有以下依赖项。

    org.springframework spring-aop ${spring.version}   org.springframework spring-beans ${spring.version}   org.springframework spring-context ${spring.version}   org.springframework spring-context-support ${spring.version}   org.springframework spring-core ${spring.version}   org.springframework spring-jdbc ${spring.version}   org.springframework spring-orm ${spring.version}   org.springframework spring-test ${spring.version} test   org.springframework spring-tx ${spring.version}   org.springframework spring-web ${spring.version}   org.springframework spring-webmvc ${spring.version}   org.freemarker freemarker 2.3.16   commons-codec commons-codec 1.4   commons-collections commons-collections 3.2.1 provided   commons-fileupload commons-fileupload 1.2.2   commons-httpclient commons-httpclient 3.1   commons-io commons-io 1.4   commons-lang commons-lang 2.5    javassist javassist 3.19.0-GA      commons-logging commons-logging [1.1.1,) provided   commons-logging commons-logging-api [1.0.3,) provided   org.slf4j slf4j-api ${slf4jVersion} <!--provided-->   org.slf4j jcl-over-slf4j ${slf4jVersion} <!--provided-->   org.slf4j slf4j-log4j12 ${slf4jVersion} <!--provided-->   log4j log4j 1.2.14 <!--provided-->    junit junit ${junit.version} test   com.ibm ibmpkcs 8.0      org.apache.maven.plugins maven-compiler-plugin 2.3.2  1.8 1.8 ${maven.compiler.showDeprecation} ${maven.compiler.showWarnings} UTF-8 ${maven.compiler.debug} ${maven.compiler.optimize}     4.2.5.RELEASE 2.4.0.RELEASE 4.0.0.RELEASE 1.6.1 true 4.8.2 3.5.6-Final  

我使用的是spring 4.2.5.RELEASE versionjavassist 3.19.0-GA版本。

在Web应用程序中,我可以在WebSphere /WEB-INF/lib上安装应用程序后看到以下jar文件

  • aopalliance-1.0.jar
  • commons-io-1.4.jar
  • jcl-over-slf4j-1.6.1.jar
  • spring-aop-4.2.5.RELEASE.jar
  • spring-expression-4.2.5.RELEASE.jar
  • bcprov-jdk16-1.46.jar
  • freemarker-2.3.16.jar
  • log4j-1.2.14.jar
  • spring-beans-4.2.5.RELEASE.jar
  • spring-web-4.2.5.RELEASE.jar
  • commons-codec-1.4.jar
  • ibmpkcs-8.0.jar
  • slf4j-api-1.6.1.jar
  • spring-context-4.2.5.RELEASE.jar
  • spring-webmvc-4.2.5.RELEASE.jar
  • commons-fileupload-1.2.2.jar
  • javassist-3.19.0-GA.jar
  • slf4j-log4j12-1.6.1.jar
  • spring-core-4.2.5.RELEASE.jar

也在web.xml我正在使用org.springframework.aop.framework.JavassistApplicationContext

  contextClass org.springframework.aop.framework.JavassistApplicationContext   org.springframework.web.context.ContextLoaderListener   org.springframework.web.util.Log4jConfigListener  

在类路径/ WEB-INF/classes/org/springframework/aop/framework我有一些javassist类。

 JavassistAopProxy$1.class JavassistAopProxy$EqualsInterceptor.class JavassistAopProxy$JavassistMethodInvocation.class JavassistAopProxy.class JavassistAopProxy$AdvisedDispatcher.class JavassistAopProxy$ExProxyFactory.class JavassistAopProxy$MethodInterceptor.class JavassistAopProxyFactory.class JavassistAopProxy$CompositeInterceptor.class JavassistAopProxy$FixedChainStaticTargetInterceptor.class JavassistAopProxy$StaticDispatcher.class JavassistApplicationContext.class JavassistAopProxy$DynamicAdvisedInterceptor.class JavassistAopProxy$HashCodeInterceptor.class JavassistAopProxy$UnadvisedInterceptor.class 

有关此错误的任何建议吗? 我试过以下方法

  1. class loader父服务器和应用程序上的最后一个方法

  2. 将spring更新到最新版本

  3. /WEB-INF/lib路径中删除了javascript jar文件

我无法理解这个错误意味着什么。 任何解释和建议,以解决此错误。 它在WebSphere 6和Java 1.6中运行良好

更新:

 mvn dependency:tree [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ myapp-parent --- [INFO] com.test:myapp-parent:pom:6.2.0 [INFO] +- commons-logging:commons-logging:jar:1.2:provided [INFO] +- commons-logging:commons-logging-api:jar:1.1:provided [INFO] +- org.slf4j:slf4j-api:jar:1.6.1:compile [INFO] +- org.slf4j:jcl-over-slf4j:jar:1.6.1:compile [INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.1:compile [INFO] +- log4j:log4j:jar:1.2.14:compile [INFO] +- junit:junit:jar:4.8.2:test [INFO] \- com.ibm:ibmpkcs:jar:8.0:compile [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Web Application Package 6.2.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ myapp-webapp --- [INFO] com.test:myapp-webapp:war:6.2.0 [INFO] +- org.springframework:spring-webmvc:jar:4.2.5.RELEASE:compile [INFO] | +- org.springframework:spring-beans:jar:4.2.5.RELEASE:compile [INFO] | +- org.springframework:spring-context:jar:4.2.5.RELEASE:compile [INFO] | | \- org.springframework:spring-aop:jar:4.2.5.RELEASE:compile [INFO] | | \- aopalliance:aopalliance:jar:1.0:compile [INFO] | +- org.springframework:spring-core:jar:4.2.5.RELEASE:compile [INFO] | +- org.springframework:spring-expression:jar:4.2.5.RELEASE:compile [INFO] | \- org.springframework:spring-web:jar:4.2.5.RELEASE:compile [INFO] +- commons-codec:commons-codec:jar:1.4:compile [INFO] +- commons-io:commons-io:jar:1.4:compile [INFO] +- commons-fileupload:commons-fileupload:jar:1.2.2:compile [INFO] +- javax.servlet:servlet-api:jar:2.5:provided [INFO] +- org.freemarker:freemarker:jar:2.3.16:compile [INFO] +- org.springframework:spring-test:jar:4.2.5.RELEASE:test [INFO] +- org.javassist:javassist:jar:3.21.0-GA:compile [INFO] +- org.bouncycastle:bcprov-jdk16:jar:1.46:compile [INFO] +- commons-logging:commons-logging:jar:1.2:provided [INFO] +- commons-logging:commons-logging-api:jar:1.1:provided [INFO] +- org.slf4j:slf4j-api:jar:1.6.1:compile [INFO] +- org.slf4j:jcl-over-slf4j:jar:1.6.1:compile [INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.1:compile [INFO] +- log4j:log4j:jar:1.2.14:compile [INFO] +- junit:junit:jar:4.8.2:test [INFO] \- com.ibm:ibmpkcs:jar:8.0:compile [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Enterprise Application Package 6.2.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ myapp-ear --- [INFO] com.test:myapp-ear:ear:6.2.0 [INFO] +- com.test:myapp-webapp:war:6.2.0:compile [INFO] +- org.slf4j:slf4j-api:jar:1.6.1:provided [INFO] +- org.slf4j:jcl-over-slf4j:jar:1.6.1:provided [INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.1:provided [INFO] +- log4j:log4j:jar:1.2.14:provided [INFO] +- commons-logging:commons-logging:jar:1.2:provided [INFO] +- commons-logging:commons-logging-api:jar:1.1:provided [INFO] +- junit:junit:jar:4.8.2:test [INFO] \- com.ibm:ibmpkcs:jar:8.0:compile [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] my application...................................... SUCCESS [ 9.465 s] [INFO] Web Application Package ............................ SUCCESS [ 0.104 s] [INFO] Enterprise Application Package ..................... SUCCESS [ 0.044 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 10.721 s [INFO] Finished at: 2017-09-18T13:33:51+05:30 [INFO] Final Memory: 13M/245M [INFO] ------------------------------------------------------------------------ 

更新

现在我认为由于javassist文件引起的问题。 我在我的代码中使用javassist加载一个特定的类.org.spring.aop.framework.ProxyCreatorSupport是一个将由类加载器加载的类。 但我得到一些IllegalStateException,当我将.EAR文件部署到WebSphere时无法编译exception。

使用ClassPool.getDefault(),我正在查找系统类路径中的信息。 添加了由转换方法作为参数移交的类加载器。 我已经将类加载器附加到Javassist的搜索路径。

 package org.spring.aop.framework; import javassist.ClassPool; import javassist.CtClass; import javassist.CtConstructor; import javassist.LoaderClassPath; import org.springframework.web.context.support.XmlWebApplicationContext; public class JavassistApplicationContext extends XmlWebApplicationContext { static { ClassPool classPool = ClassPool.getDefault(); try { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); classPool.appendClassPath(new LoaderClassPath(classLoader)); CtClass cc = classPool.get("org.spring.aop.framework.ProxyCreatorSupport"); CtConstructor c = cc.getConstructors()[0]; c.insertAfter("$0.aopProxyFactory = new org.spring.aop.framework.JavassistAopProxyFactory();"); cc.toClass(); } catch (Exception e) { throw new IllegalStateException(e); } } } 

它适用于java 1.6 WebSphere 8。 在更新到Java 8 WebSphere 9之后,我遇到了这些exception。我认为Javassist toClass()在websphere中导致exception。 还有CtClass cc = classPool.get("org.spring.aop.framework.ProxyCreatorSupport"); 提出一些联系问题。 现在有什么建议吗?