无法打开资源的输入流

时间:2019-02-04 13:38:03

标签: websphere

使用Websphere 8.5.5.9启动我的应用程序时出现以下错误

W com.ibm.ws.ecs.internal.scan.context.impl.ScannerContextImpl scanJAR unable to open input stream for resource org/hibernate/proxy/pojo/javassist/JavassistProxyFactory$2.class in archive WEB-INF/lib/hibernate-core-5.1.0.Final.jar
                                 java.lang.RuntimeException
            at org.objectweb.asm.MethodVisitor.visitParameter(Unknown Source)
            at org.objectweb.asm.ClassReader.b(Unknown Source)
            at org.objectweb.asm.ClassReader.accept(Unknown Source)
            at org.objectweb.asm.ClassReader.accept(Unknown Source)



W com.ibm.ws.ecs.internal.scan.context.impl.ScannerContextImpl scanJAR unable to open input stream for resource org/hibernate/bytecode/enhance/spi/Enhancer$1.class in archive WEB-INF/lib/hibernate-core-5.1.0.Final.jar
                             java.lang.RuntimeException
        at org.objectweb.asm.MethodVisitor.visitParameter(Unknown Source)
        at org.objectweb.asm.ClassReader.b(Unknown Source)
        at org.objectweb.asm.ClassReader.accept(Unknown Source)
        at org.objectweb.asm.ClassReader.accept(Unknown Source)
        at com.ibm.ws.ecs.internal.scan.impl.ClassScanner.scanInputStream(ClassScanner.java:149)

设置为服务器jdk的Java版本为1.8

1 个答案:

答案 0 :(得分:1)

这是PI60902中已解决的已知问题。尽管您对问题的描述不完全匹配,但是ifix应该可以解决问题。 ifix包含在8.5.5.11中。

WAS在8.5.5.9中添加了JDK 8,并且还添加了一个新的ASM 5库,该库支持读取Java 8类。但是,直到8.5.5.11,WAS才更新其ASM API调用以包括Opcodes.ASM5设置。这意味着,在升级到8.5.5.11之前,您不能在应用程序中包括Java-8编译的类。

但是,您所显示的异常是抱怨归档文件WEB-INF / lib / hibernate-core-5.1.0.Final.jar中的JavassistProxyFactory $ 2.class。 它不是用Java 8编译的。所以这不完全是问题。

问题似乎是ASM 5库不完全向后兼容。请参阅visitParameter方法:

public void visitParameter(String name, int access) {

    if (api < Opcodes.ASM5) {

        throw new RuntimeException();

    }

    if (mv != null) {

        mv.visitParameter(name, access);

    }
}

因此,如果您遇到了该代码,则在您的应用程序中是否有Java-8编译的类都没关系。

在PI60902(包含在WAS 8.5.5.11中)之前,WAS使用了“ Opcodes.ASM4”设置。因此,此问题可能在8.5.5.9或8.5.5.10中发生。 PI60902将该设置升级为使用“ Opcodes.ASM5”。这样,ASM可以读取Java 8类,还可以避免上面显示的MethodVisitor.visitParameter(...)方法中的RuntimeException。