in modules/rampart-core/src/main/java/org/apache/rampart/builder/BindingBuilder.java [781:840]
protected void addSignatureConfirmation(RampartMessageData rmd, List<WSEncryptionPart> sigParts) {
if(!rmd.getPolicyData().isSignatureConfirmation()) {
//If we don't require sig confirmation simply go back :-)
return;
}
Document doc = rmd.getDocument();
List<WSHandlerResult> results
= (List<WSHandlerResult>)rmd.getMsgContext().getProperty(WSHandlerConstants.RECV_RESULTS);
/*
* loop over all results gathered by all handlers in the chain. For each
* handler result get the various actions. After that loop we have all
* signature results in the signatureActions list.
*/
List<WSSecurityEngineResult> signatureActions = new ArrayList<WSSecurityEngineResult>();
for (Object result : results) {
WSHandlerResult wshResult = (WSHandlerResult) result;
if (null != wshResult.getActionResults()) {
if (null != wshResult.getActionResults().get(WSConstants.SIGN)) {
signatureActions.addAll(wshResult.getActionResults().get(WSConstants.SIGN));
}
if (null != wshResult.getActionResults().get(WSConstants.ST_SIGNED)) {
signatureActions.addAll(wshResult.getActionResults().get(WSConstants.ST_SIGNED));
}
if (null != wshResult.getActionResults().get(WSConstants.UT_SIGN)) {
signatureActions.addAll(wshResult.getActionResults().get(WSConstants.UT_SIGN));
}
}
}
// prepare a SignatureConfirmation token
WSSecSignatureConfirmation wsc = new WSSecSignatureConfirmation(doc);
if (signatureActions.size() > 0) {
if (log.isDebugEnabled()) {
log.debug("Signature Confirmation: number of Signature results: "
+ signatureActions.size());
}
for (WSSecurityEngineResult signatureAction : signatureActions) {
byte[] sigVal = (byte[]) signatureAction.get(WSSecurityEngineResult.TAG_SIGNATURE_VALUE);
wsc.setSignatureValue(sigVal);
wsc.prepare();
RampartUtil.appendChildToSecHeader(rmd, wsc.getSignatureConfirmationElement());
if (sigParts != null) {
sigParts.add(new WSEncryptionPart(wsc.getId()));
}
}
} else {
//No Sig value
wsc.prepare();
RampartUtil.appendChildToSecHeader(rmd, wsc.getSignatureConfirmationElement());
if(sigParts != null) {
sigParts.add(new WSEncryptionPart(wsc.getId()));
}
}
}