代码之家  ›  专栏  ›  技术社区  ›  user3249353

无法打开资源的输入流

  •  0
  • user3249353  · 技术社区  · 5 年前

    使用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)
    

    Java版本设置为服务器JDK为1.8

    1 回复  |  直到 5 年前
        1
  •  1
  •   jblye    5 年前

    这是一个已知的问题,在 PI60902 . 尽管您对该问题的描述不完全匹配,但IFIX应该会解决该问题。IFIX包含在8.5.5.11中。

    在J.D5.5.9中添加了JDK 8,还添加了一个支持读取Java 8类的新ASM 5库。但是,直到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中的JavassistProxy工厂$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(包括在WAS8.5.5.11中)之前,使用操作码.asm4设置。所以这个问题可能发生在8.5.5.9或8.5.5.10中。PI60902已将设置升级为使用opcode.asm5。这允许ASM读取Java 8类,也避免了上面所示的方法访问者.VisualPosits(…)方法中的RunTimeExpRebug。