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

2023-12-08

我有几个IllegalStateException,CannotCompileException and LinkageError应用程序在 WebSphere 9.0 java 8 上运行时。这是错误的堆栈跟踪:

Caused by: java.lang.IllegalStateException: javassist.CannotCompileException: by java.lang.LinkageError: org.springframework.aop.framework.ProxyCreatorSupport
        at org.springframework.aop.framework.JavassistApplicationContext.<clinit>(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.<clinit>(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)

And in pom.xml文件,我有以下依赖性。

<dependencyManagement>
    <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.16</version>
        </dependency>


        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.5</version>
        </dependency>

        <!-- Javassist -->
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.19.0-GA</version>
        </dependency>

    </dependencies>
</dependencyManagement>
<dependencies>

    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>[1.1.1,)</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging-api</artifactId>
        <version>[1.0.3,)</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4jVersion}</version>
        <!--<scope>provided</scope>-->
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4jVersion}</version>
        <!--<scope>provided</scope>-->
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4jVersion}</version>
        <!--<scope>provided</scope>-->
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
        <!--<scope>provided</scope>-->
    </dependency>
    <!-- Global Test -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
            <dependency>
        <groupId>com.ibm</groupId>
        <artifactId>ibmpkcs</artifactId>
        <version>8.0</version>
    </dependency>
</dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>       
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <showDeprecation>${maven.compiler.showDeprecation}</showDeprecation>
                    <showWarnings>${maven.compiler.showWarnings}</showWarnings>
                    <encoding>UTF-8</encoding>
                    <debug>${maven.compiler.debug}</debug>
                    <optimize>${maven.compiler.optimize}</optimize>
                </configuration>
            </plugin>
    </build>

  <properties>
        <spring.version>4.2.5.RELEASE</spring.version>
        <spring-ws.version>2.4.0.RELEASE</spring-ws.version>
        <spring-security.version>4.0.0.RELEASE</spring-security.version>
        <slf4jVersion>1.6.1</slf4jVersion>
        <maven.test.skip>true</maven.test.skip>
        <junit.version>4.8.2</junit.version>
        <hibernate.version>3.5.6-Final</hibernate.version>
   </properties>

我正在使用弹簧4.2.5.RELEASE version and javassist 3.19.0-GA版本 。

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

  • 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

also in web.xml我在用org.springframework.aop.framework.JavassistApplicationContext

<context-param>
        <param-name>contextClass</param-name>
        <param-value>org.springframework.aop.framework.JavassistApplicationContext</param-value>
</context-param>

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<listener>
 <listenerclass>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

并在类路径中/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. 服务器和应用程序上的类加载器父级最后一个方法

  2. 将 spring 更新到最新版本

  3. 从中删除了 javascript jar 文件/WEB-INF/lib path

我不明白这个错误是什么意思。解决此错误的任何解释和建议。它在带有 Java 1.6 的 WebSphere 6 中运行良好

update :

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] ------------------------------------------------------------------------

Update

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

使用 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 后,我遇到了这些异常。我认为 JavassisttoClass()导致 websphere 出现异常。还CtClass cc = classPool.get("org.spring.aop.framework.ProxyCreatorSupport");提出一些联动问题。现在有什么建议吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 java 8 在 WebSphere 上运行应用程序时出现 spring 异常 的相关文章

随机推荐