当前位置: 首页 > 知识库问答 >
问题:

JVM bug?java.lang.VerifyError:操作数堆栈上的错误类型

呼延明朗
2023-03-14

使用org。阿帕奇。wss4j在Play Framework(Java版本)应用程序中调用SOAP服务的ws-security部分时,为了支持这些构件,导致了这种混乱:

java.util.concurrent.CompletionException: java.lang.RuntimeException: java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator.validateSignedEncryptedPolicies(Ljava/util/List;Ljava/util/List;Ljava/util/List;Lorg/apache/cxf/message/Message;)Z @28: invokespecial
  Reason:
    Type 'org/apache/wss4j/policy/model/EncryptedParts' (current frame, stack[1]) is not assignable to 'org/apache/wss4j/policy/model/SignedParts'
  Current Frame:
    bci: @28
    flags: { }
    locals: { 'org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator', 'java/util/List', 'java/util/List', 'java/util/List', 'org/apache/cxf/message/Message' }
    stack: { 'org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator', 'org/apache/wss4j/policy/model/EncryptedParts', integer, 'java/util/List', 'java/util/List', 'org/apache/cxf/message/Message' }
  Bytecode:
    0x0000000: 2a2a b400 2d03 2c2b 1904 b700 2e9a 0005
    0x0000010: 03ac 2a2a b400 2f04 2d2b 1904 b700 2e9a
    0x0000020: 0005 03ac 2a2a b400 3003 2c2b 1904 b700
    0x0000030: 319a 0005 03ac 2a2a b400 3203 2d2b 1904
    0x0000040: b700 31ac                              
  Stackmap Table:
    same_frame(@18)
    same_frame(@36)
    same_frame(@54)

        ... suppressed 8 lines
Caused by: java.lang.RuntimeException: java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator.validateSignedEncryptedPolicies(Ljava/util/List;Ljava/util/List;Ljava/util/List;Lorg/apache/cxf/message/Message;)Z @28: invokespecial
  Reason:
    Type 'org/apache/wss4j/policy/model/EncryptedParts' (current frame, stack[1]) is not assignable to 'org/apache/wss4j/policy/model/SignedParts'
  Current Frame:
    bci: @28
    flags: { }
    locals: { 'org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator', 'java/util/List', 'java/util/List', 'java/util/List', 'org/apache/cxf/message/Message' }
    stack: { 'org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator', 'org/apache/wss4j/policy/model/EncryptedParts', integer, 'java/util/List', 'java/util/List', 'org/apache/cxf/message/Message' }
  Bytecode:
    0x0000000: 2a2a b400 2d03 2c2b 1904 b700 2e9a 0005
    0x0000010: 03ac 2a2a b400 2f04 2d2b 1904 b700 2e9a
    0x0000020: 0005 03ac 2a2a b400 3003 2c2b 1904 b700
    0x0000030: 319a 0005 03ac 2a2a b400 3203 2d2b 1904
    0x0000040: b700 31ac                              
  Stackmap Table:
    same_frame(@18)
    same_frame(@36)
    same_frame(@54)

        at ir.iais.playCommons.utils.F$Promise$1.get(F.java:232) ~[play-commons_2.11-2017.0.2.12-SNAPSHOT.jar:2017.0.2.12-SNAPSHOT]
        ... 
        ... 5 more
Caused by: java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator.validateSignedEncryptedPolicies(Ljava/util/List;Ljava/util/List;Ljava/util/List;Lorg/apache/cxf/message/Message;)Z @28: invokespecial
  Reason:
    Type 'org/apache/wss4j/policy/model/EncryptedParts' (current frame, stack[1]) is not assignable to 'org/apache/wss4j/policy/model/SignedParts'
  Current Frame:
    bci: @28
    flags: { }
    locals: { 'org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator', 'java/util/List', 'java/util/List', 'java/util/List', 'org/apache/cxf/message/Message' }
    stack: { 'org/apache/cxf/ws/security/wss4j/policyvalidators/AbstractSupportingTokenPolicyValidator', 'org/apache/wss4j/policy/model/EncryptedParts', integer, 'java/util/List', 'java/util/List', 'org/apache/cxf/message/Message' }
  Bytecode:
    0x0000000: 2a2a b400 2d03 2c2b 1904 b700 2e9a 0005
    0x0000010: 03ac 2a2a b400 2f04 2d2b 1904 b700 2e9a
    0x0000020: 0005 03ac 2a2a b400 3003 2c2b 1904 b700
    0x0000030: 319a 0005 03ac 2a2a b400 3203 2d2b 1904
    0x0000040: b700 31ac                              
  Stackmap Table:
    same_frame(@18)
    same_frame(@36)
    same_frame(@54)

        at org.apache.cxf.ws.security.wss4j.policyvalidators.ValidatorUtils.configureSupportingTokenValidators(ValidatorUtils.java:97) ~[cxf-rt-ws-security-3.1.7.jar:3.1.7]
        at org.apache.cxf.ws.security.wss4j.policyvalidators.ValidatorUtils.(ValidatorUtils.java:46) ~[cxf-rt-ws-security-3.1.7.jar:3.1.7]
        at org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JInInterceptor.doResults(PolicyBasedWSS4JInInterceptor.java:576) ~[cxf-rt-ws-security-3.1.7.jar:3.1.7]
        at org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessageInternal(WSS4JInInterceptor.java:277) ~[cxf-rt-ws-security-3.1.7.jar:3.1.7]
        at org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:171) ~[cxf-rt-ws-security-3.1.7.jar:3.1.7]
        at org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JInInterceptor.handleMessage(PolicyBasedWSS4JInInterceptor.java:80) ~[cxf-rt-ws-security-3.1.7.jar:3.1.7]
        at org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JInInterceptor.handleMessage(PolicyBasedWSS4JInInterceptor.java:66) ~[cxf-rt-ws-security-3.1.7.jar:3.1.7]
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) ~[cxf-core-3.1.7.jar:3.1.7]
        at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:798) ~[cxf-core-3.1.7.jar:3.1.7]
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1670) ~[cxf-rt-transports-http-3.1.7.jar:3.1.7]
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1551) ~[cxf-rt-transports-http-3.1.7.jar:3.1.7]
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1348) ~[cxf-rt-transports-http-3.1.7.jar:3.1.7]
        at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) ~[cxf-core-3.1.7.jar:3.1.7]
        at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:651) ~[cxf-rt-transports-http-3.1.7.jar:3.1.7]
        at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) ~[cxf-core-3.1.7.jar:3.1.7]
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) ~[cxf-core-3.1.7.jar:3.1.7]
        at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514) ~[cxf-core-3.1.7.jar:3.1.7]
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423) ~[cxf-core-3.1.7.jar:3.1.7]
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:324) ~[cxf-core-3.1.7.jar:3.1.7]
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:277) ~[cxf-core-3.1.7.jar:3.1.7]
        at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) ~[cxf-rt-frontend-simple-3.1.7.jar:3.1.7]
        at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:139) ~[cxf-rt-frontend-jaxws-3.1.7.jar:3.1.7]
        at com.sun.proxy.$Proxy124.sendMessageToConsignee(Unknown Source) ~[?:?]
        at ir.iais.rasam.services.AnnouncementAboutDeclarationService$1.get(AnnouncementAboutDeclarationService.java:61) ~[classes/:?]
        at ir.iais.rasam.services.AnnouncementAboutDeclarationService$1.get(AnnouncementAboutDeclarationService.java:48) ~[classes/:?]
        at ir.iais.playCommons.utils.F$Promise$1.get(F.java:230) ~[play-commons_2.11-2017.0.2.12-SNAPSHOT.jar:2017.0.2.12-SNAPSHOT]
        ... 
        ... 5 more

所使用的org模块。阿帕奇。wss4j工件包括:

"org.apache.wss4j" % "wss4j-bindings" % wss4jversion,
"org.apache.wss4j" % "wss4j-policy" % wss4jversion,
"org.apache.wss4j" % "wss4j-ws-security-dom" % wss4jversion,
"org.apache.wss4j" % "wss4j-ws-security-stax" % wss4jversion,
"org.apache.wss4j" % "wss4j-integration" % wss4jversion,
"org.apache.wss4j" % "wss4j-ws-security-policy-stax" % wss4jversion,
"org.apache.wss4j" % "wss4j-ws-security-common" % wss4jversion,

其中,wss4jVersion是:

val wss4jVersion = "2.1.10"

通过搜索此部分:键入。。。(当前帧,堆栈[1])不可分配给 我在这个页面上说问题来自JVM。然而,这个Q/A是针对2013年的,到目前为止,这个错误必须得到解决。

此外,如果我从org替换所有上述依赖项。阿帕奇。wss4j工件:org.apache.ws.security“%”wss4j“%”1.6.18“(这意味着降级包),问题将得到解决,服务调用将成功工作。

现在我的问题是:错误在哪里?在JVM、WSS4J或游戏框架中?

播放框架版本:2.5.8

java版本“1.8.0_121”

Java(TM)SE运行时环境(build 1.8.0_121-b13)

共有1个答案

寇鸿
2023-03-14

该问题是由Apache CXF运行时和WSS4J之间的版本不兼容引起的。

cxf rt ws-security 3.1.7取决于wss4j策略2.1.7,但您使用的是wss4j策略2.1.10

字节码验证程序失败,因为wss4j策略中的加密部件类不能再分配给签名部件(尽管在早期版本中,这些类位于同一层次结构中)。

有两种方法可以解决这个问题:

  • 将Apache CXF Runtime升级到3.1.11或以上版本;
  • 将Apache WSS4J降级到2.1.7或以下版本。
 类似资料:
  • 检查我的Codename One应用程序(它已经完美地工作了一年多),我意识到它不会再启动了。当我试图在Eclipse中启动它时,我得到了以下堆栈跟踪: 线程“AWT-EventQuue-0”中的异常java.lang.VerifyError:操作数堆栈上的错误类型异常详细信息:位置:javax/摆/JScrollBar.getAccessibleContext()Ljavax/可访问性/Acce

  • 问题内容: 我正在阅读有关JVM体系结构的信息。今天,我了解了操作数堆栈的概念。根据一篇文章: 在字节码指令执行期间使用操作数堆栈,其方式与在本机CPU中使用通用寄存器的方式类似。 我不明白:操作数堆栈到底是什么,以及它在jvm中如何工作? 问题答案: 这是各种单个字节码操作如何获取其输入以及它们如何提供其输出的方式。 例如,考虑将两个s相加的运算。要使用它,您将两个值压入堆栈,然后使用它: 现在

  • 问题内容: 运行下面的代码将导致错误消息。 但是,在lamda中删除双括号初始化(匿名内部类)可以使代码按预期运行,为什么?以下作品: 编译器错误?毕竟这是抢先体验版… (除非您具有最新的jdk 8 lambda下载,否则不会编译。) 问题答案: 看来,不仅在返回类型时发生该问题,而且即使在内部构造了任何匿名类也是如此。即: 这实际上导致(…)。 进一步的研究表明,如果将参数引入method ,则

  • 6、堆栈操作指令(StackOperation Instruction) 堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来保存程序的返回地址。它主要有两大类操作:进栈操作和出栈操作。 1)、进栈操作 、PUSH(Push Word or Doublewordonto Stack) 指令格式:PUSH Reg/Mem PUSH Imm;80286+ 一个字进栈,系统自动完成两步操作:SP

  • 问题内容: 下面给出的代码显示了运行时的Stackoverflow错误。但是,如果我使另一个类CarChange创建Car的对象,它将成功运行。我是一个初学者,请执行以下代码以了解在Java中进行向上转换的重要性。 问题答案: 一个stackoverflow通常意味着您有一个无限循环。 收到此消息的原因是因为您从testdrive方法调用驱动器,并且在该方法中再次调用drive。

  • 问题内容: JVM运行时数据区为每个正在执行的方法提供单独的堆栈。它包含操作数堆栈和局部变量。每次加载变量时,都需要先到操作数堆栈,然后再到局部变量。为什么不直接操作局部变量表,并进行一些看似重复的工作? 问题答案: 具有直接操作数的指令集必须对每个指令中的操作数进行编码。相反,对于使用操作数堆栈的指令集,操作数是隐式的。 当查看小的琐碎运算(例如将常量加载到变量中)时,隐式参数的优势并不明显。本