encryptionUser=useReqSigCert fails to find request certificate
--------------------------------------------------------------
Key: CXF-2298
URL: https://issues.apache.org/jira/browse/CXF-2298
Project: CXF
Issue Type: Bug
Components: WS-* Components
Affects Versions: 2.2.2
Reporter: Jim Hansen
When setting encryptionUser=useReqSigCert, CXF should locate the request
certificate and use it to encrypt the response. The logic is to retrieve the
RECV_RESULTS from the msgContext, and then retrieve the request certificate
from the RECV_RESULTS. The WSS4JOutInterceptor attempts to retrieve the
RECV_RESULTS by calling WSS4JOutInterceptor.getProperty(msgContext,
WSHandlerConstants.RECV_RESULTS), but getProperty() fails to find the
RECV_RESULTS. The underlying implementation of getProperty() looks in various
places for the RECV_RESULTS, but fails to look in ((Message)
msgContext).getExchange().getInMessage(), where the RECV_RESULTS are actually
located. So the incoming message is located in the Exchange, and it is this
extra level of indirection that seems to be missing from the search for
RECV_RESULTS. I'm not familiar enough with the code to identify the root cause,
but it seems to be an incompatibility between CXF and the underlying WSS4J
implementation (just a guess).
I am attaching three files:
1) Exception.txt shows the text of the exception that is thrown
2) application-context.xml is the CXF configuration for the WSS4JOutInterceptor
3) FixedWSS4JOutInterceptor.java is a fixed version of the WSS4JOutInterceptor
that retrieves the RCV_RESULTS from the correct location. This is provided for
illustrative purposes only, and is not intended as a fix - my guess is that the
correct fix to this problem is at a lower level in the code, and I would
appreciate it if someone would take this further and determine the root cause
of this problem, and a more appropriate fix.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.