无法打开资源的输入流
Unable to open input stream for resource
使用 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.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.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
这是一个已知问题,已在 PI60902 中修复。虽然您对问题的描述不完全匹配,但 ifix 应该可以解决问题。 ifix 包含在 8.5.5.11 中。
WAS 在 8.5.5.9 中添加了 JDK8,还添加了一个新的支持读取 Java8classes 的 ASM 5 库。但是,WAS 直到 8.5.5.11 才更新其 ASM API 调用以包含 Opcodes.ASM5 设置。这意味着在升级到 8.5.5.11 之前,您不能在应用程序中包含 Java-8-compiled class。
但是,您显示的异常是抱怨存档 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-compiled class 并不重要。
在 PI60902(包含在 WAS 8.5.5.11 中)之前,WAS 使用“Opcodes.ASM4”设置。因此,此问题可能会在 8.5.5.9 或 8.5.5.10 中发生。 PI60902 将设置升级为使用“Opcodes.ASM5”。这允许 ASM 读取 Java 8 classes 并且还避免了上面显示的 MethodVisitor.visitParameter(...) 方法中的 RuntimeException。
使用 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.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.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
这是一个已知问题,已在 PI60902 中修复。虽然您对问题的描述不完全匹配,但 ifix 应该可以解决问题。 ifix 包含在 8.5.5.11 中。
WAS 在 8.5.5.9 中添加了 JDK8,还添加了一个新的支持读取 Java8classes 的 ASM 5 库。但是,WAS 直到 8.5.5.11 才更新其 ASM API 调用以包含 Opcodes.ASM5 设置。这意味着在升级到 8.5.5.11 之前,您不能在应用程序中包含 Java-8-compiled class。
但是,您显示的异常是抱怨存档 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-compiled class 并不重要。
在 PI60902(包含在 WAS 8.5.5.11 中)之前,WAS 使用“Opcodes.ASM4”设置。因此,此问题可能会在 8.5.5.9 或 8.5.5.10 中发生。 PI60902 将设置升级为使用“Opcodes.ASM5”。这允许 ASM 读取 Java 8 classes 并且还避免了上面显示的 MethodVisitor.visitParameter(...) 方法中的 RuntimeException。