2017-07-19 37 views
0

使用org.apache.wss4j文物來支持SOAP服務調用播放框架(Java版本)的應用程序中的WS-Security的部分導致了這個爛攤子:JVM的錯誤? java.lang.VerifyError的:在操作數堆棧壞類型

 
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.apache.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" 

通過搜索這一部分:Type ... (current frame, stack[1]) is not assignable to ...我降落在this page認爲問題是由JVM。然而,這個Q/A是針對2013年的,現在這個錯誤必須解決。

再說,如果我取代以上所有依賴從org.apache.wss4j文物由這一個:"org.apache.ws.security" % "wss4j" % "1.6.18"(以及它意味着降級的包),這個問題將得到解決,服務調用將成功運行。

現在我的問題是:當錯誤已經撒謊呢?在JVM或WSS4J或Play框架中?

播放Framework版本:2.5.8

Java版本 「1.8.0_121」

的Java(TM)SE運行時環境(建1.8.0_121-B13)

+0

你確定你鏈接正確的Q&A?鏈接的答案是關於一個*編譯器*錯誤,它是從2015年,而不是2013年... – Holger

回答

1

的問題是造成Apache CXF Runtime和WSS4J之間的版本不兼容。

cxf-rt-ws-security 3.1.7depends onwss4j-policy 2.1.7,但您使用wss4j-policy 2.1.10

字節碼驗證失敗,因爲EncryptedPartswss4j-policy不能再分配給SignedParts(雖然在早期版本中這些類在相同的層次結構中)。

有兩種方法來解決這個問題:

  • 升級的Apache CXF運行到3.1.11或以上版本;
  • 降級的Apache WSS4J到2.1.7以下版本。
+0

這發生在我有Apache CXF 3.1.11和沒有apache wss4j。 – Amalgovinus