【发布时间】:2021-03-11 07:03:33
【问题描述】:
当 HTTP 响应代码为 200 时,使用 WSO2 EI 6.4.0 发送带有 wsp:Policy wsu:Id="SigOnly" 的 SOAP 消息可以正常工作。签名检查良好,消息流可以继续。
当响应是响应代码为 500 的 SOAP 故障时,发送给 EI 的发起请求会一直挂起。 Send 调解器没有收到任何异常,因此我无法在序列流中处理它(我想向调用者报告它),即使在 faultSequence 中也是如此。我的日志中出现了这个错误:Caused by: org.apache.ws.security.WSSecurityException: The signature or decryption was invalid.
我真的不明白为什么 - 在这种故障情况下 - 签名或解密可能是无效的,而它对于非故障 SOAP 响应是有效的。我看不出soap头结构(故障与非故障)之间的差异,在我看来只有主体不同:
<soapenv:Body wsu:Id="id-1-2b51dae55e169f7625472a2369df8671" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soapenv:Fault>
<faultcode>soapenv:Client</faultcode>
<faultstring>Message bcd45e75-b778-4fe1-83fb-ea97e4015sss failed : VALI-0100 - Validation of request message failed : org.xml.sax.SAXParseException; cvc-enumeration-valid: Value 'Q1andQ2' is not facet-valid with respect to enumeration '[Q1, Q2, Q1+Q2, SO]'. It must be a value from the enumeration., org.xml.sax.SAXParseException; cvc-type.3.1.3: The value 'Q1andQ2' of element 'v21:codeQ' is not valid.
</faultstring>
<faultactor>
...
还有完整的例外:
[2021-02-09 17:37:01,216] [EI-Core] ERROR - AxisEngine The signature or decryption was invalid org.apache.axis2.AxisFault: The signature or decryption was invalid
at org.apache.rampart.handler.RampartReceiver.setFaultCodeAndThrowAxisFault(RampartReceiver.java:194)
at org.apache.rampart.handler.RampartReceiver.invoke(RampartReceiver.java:96)
at org.apache.axis2.engine.Phase.invokeHandler(Phase.java:340)
at org.apache.axis2.engine.Phase.invoke(Phase.java:313)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:167)
at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:263)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748) Caused by: org.apache.ws.security.WSSecurityException: The signature or decryption was invalid
at org.apache.ws.security.processor.SignatureProcessor.verifyXMLSignature(SignatureProcessor.java:703)
at org.apache.ws.security.processor.SignatureProcessor.handleToken(SignatureProcessor.java:124)
at org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:332)
at org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:249)
at org.apache.rampart.RampartEngine.process(RampartEngine.java:221)
at org.apache.rampart.handler.RampartReceiver.invoke(RampartReceiver.java:93)
... 9 more
[2021-02-09 17:37:01,220] [EI-Core] ERROR - ClientWorker Fault processing response message through Axis2 org.apache.axis2.AxisFault: The signature or decryption was invalid
at org.apache.rampart.handler.RampartReceiver.setFaultCodeAndThrowAxisFault(RampartReceiver.java:194)
at org.apache.rampart.handler.RampartReceiver.invoke(RampartReceiver.java:96)
at org.apache.axis2.engine.Phase.invokeHandler(Phase.java:340)
at org.apache.axis2.engine.Phase.invoke(Phase.java:313)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:167)
at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:263)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.ws.security.WSSecurityException: The signature or decryption was invalid
如有任何帮助,请告诉我该怎么做才能将错误报告到调解员级别,以便我可以管理流程。
【问题讨论】: