in modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java [1727:1772]
public static void handleEncryptedSignedHeaders(List<WSEncryptionPart> encryptedParts,
List<WSEncryptionPart> signedParts, Document doc) {
//TODO Is there a more efficient way to do this ? better search algorithm
for (WSEncryptionPart signedPart : signedParts) {
//This signed part is not a header
if (signedPart.getNamespace() == null || signedPart.getName() == null) {
continue;
}
for (WSEncryptionPart encryptedPart : encryptedParts) {
if (encryptedPart.getNamespace() == null || encryptedPart.getName() == null) {
continue;
}
if (signedPart.getName().equals(encryptedPart.getName()) &&
signedPart.getNamespace().equals(encryptedPart.getNamespace())) {
String encDataID = encryptedPart.getEncId();
// TODO Do we need to go through the whole tree to find element by id ? Verify
Element encDataElem = XMLUtils.findElementById(doc.getDocumentElement(), encDataID, false);
if (encDataElem != null) {
Element encHeader = (Element) encDataElem.getParentNode();
String encHeaderId = encHeader.getAttributeNS(WSConstants.WSU_NS, "Id");
//For some reason the id might not be available
// so the part/element with empty/null id won't be recognized afterwards.
if (encHeaderId != null && !"".equals(encHeaderId.trim())) {
signedParts.remove(signedPart);
signedParts.add(createEncryptionPart(signedPart.getName(), encHeaderId,
signedPart.getNamespace(),
signedPart.getEncModifier(), signedPart.getXpath()));
}
}
}
}
}
}