Author: ruchithf
Date: Wed Nov 14 07:07:01 2007
New Revision: 594914

URL: http://svn.apache.org/viewvc?rev=594914&view=rev
Log:
Applied patch in RAMPART-109. Thanks Nandana

Modified:
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
    
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java?rev=594914&r1=594913&r2=594914&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/builder/SymmetricBindingBuilder.java
 Wed Nov 14 07:07:01 2007
@@ -216,10 +216,10 @@
                 encr.setSymmetricEncAlgorithm(algorithmSuite.getEncryption());
                 // SymmKey is already encrypted, no need to do it again
                 encr.setEncryptSymmKey(false);
-                // Use key identifier in the KeyInfo in server side
-                if (!rmd.isInitiator()) {
-                       encr.setUseKeyIdentifier(true);
-                       
encr.setKeyIdentifierType(WSConstants.ENCRYPTED_KEY_SHA1_IDENTIFIER);
+                if (!rmd.isInitiator() && tok instanceof EncryptedKeyToken) {
+                    encr.setUseKeyIdentifier(true);
+                    
encr.setCustomReferenceValue(((EncryptedKeyToken)tok).getSHA1());
+                    
encr.setKeyIdentifierType(WSConstants.ENCRYPTED_KEY_SHA1_IDENTIFIER);
                 }
                 
                 try {
@@ -233,9 +233,7 @@
                 }
             }
             
-            if (encrParts.size() > 0 ) {
-                RampartUtil.appendChildToSecHeader(rmd, refList);
-            }
+            RampartUtil.appendChildToSecHeader(rmd, refList);
             
             if(dotDebug){
                t1 = System.currentTimeMillis();
@@ -458,11 +456,15 @@
         } else {
             addSignatureConfirmation(rmd, sigParts);
         }
-        //Sign the message
-        signatureValues.add(this.doSymmSignature(rmd, sigToken, sigTok, 
sigParts));
-
-        this.mainSigId = 
RampartUtil.addWsuIdToElement((OMElement)this.getInsertionLocation());
+        
+        if (sigParts.size() > 0 ) {
+            //Sign the message
+            signatureValues.add(this.doSymmSignature(rmd, sigToken, sigTok, 
sigParts));
+    
+            this.mainSigId = 
RampartUtil.addWsuIdToElement((OMElement)this.getInsertionLocation());
 
+        }
+        
         if(rmd.isInitiator()) {
             //Do endorsed signatures
             Vector endSigVals = this.doEndorsedSignatures(rmd, endSuppTokMap);
@@ -562,8 +564,10 @@
                     encrDKTokenElem = dkEncr.getdktElement();
                     if(encrTokElem != null) {
                         RampartUtil.insertSiblingAfter(rmd, encrTokElem, 
encrDKTokenElem);
-                    } else {
+                    } else if (timestampElement != null){
                         RampartUtil.insertSiblingAfter(rmd, 
this.timestampElement, encrDKTokenElem);
+                    } else {
+                        RampartUtil.insertSiblingBefore(rmd, 
this.getInsertionLocation(), encrDKTokenElem);
                     }
                     
                     refList = dkEncr.encryptForExternalRef(null, encrParts);
@@ -607,28 +611,18 @@
                     }
                     encr.prepare(doc, RampartUtil.getEncryptionCrypto(rpd
                             .getRampartConfig(), rmd.getCustomClassLoader()));
-                    
-                    
-                    if (encrParts.size() > 0) {
-                    
-                        //Encrypt, get hold of the ref list and add it
-                        refList = encr.encryptForExternalRef(null, encrParts); 
            
-                        
-                        if(this.timestampElement != null){
-                                
this.setInsertionLocation(this.timestampElement);
-                        }else{
-                                this.setInsertionLocation(null);
-                        }                              
-        
-                        if(encrTokElem != null) {
-                            RampartUtil.insertSiblingAfter(rmd,
-                                                        encrTokElem,
-                                                        refList);
-                        } else {
-                            RampartUtil.insertSiblingAfter(rmd,
-                                    this.timestampElement,
-                                    refList);
-                        }
+                                       
+                    //Encrypt, get hold of the ref list and add it
+                    refList = encr.encryptForExternalRef(null, encrParts);     
                                   
+    
+                    if(encrTokElem != null) {
+                        RampartUtil.insertSiblingAfter(rmd,
+                                                    encrTokElem,
+                                                    refList);
+                    } else {
+                        RampartUtil.insertSiblingBeforeOrPrepend(rmd,
+                                this.getInsertionLocation(),
+                                refList);
                     }
                     
                 } catch (WSSecurityException e) {

Modified: 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java?rev=594914&r1=594913&r2=594914&view=diff
==============================================================================
--- 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
 (original)
+++ 
webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
 Wed Nov 14 07:07:01 2007
@@ -1026,27 +1026,45 @@
        if(child != null){ // child is not null so insert sibling after
                retElem = RampartUtil.insertSiblingAfter(rmd, child, elem);
        }else{ //Prepend 
-               
-               Element secHeaderElem = rmd.getSecHeader().getSecurityHeader();
-               Node node = secHeaderElem.getOwnerDocument().importNode(
-                        elem, true);
-               Element firstElem = (Element)secHeaderElem.getFirstChild();
-       
-               if(firstElem == null){
-                       retElem = (Element)secHeaderElem.appendChild(node);
-               }else{
-                       
if(firstElem.getOwnerDocument().equals(elem.getOwnerDocument())) {
-                               
((OMElement)firstElem).insertSiblingBefore((OMElement)elem);
-                       retElem = elem;
-                       } else {
-                               Element newSib = 
(Element)firstElem.getOwnerDocument().importNode(elem, true);
-                               
((OMElement)firstElem).insertSiblingBefore((OMElement)newSib);
-                               retElem = newSib;
-                       }
-               }
+                retElem = prependSecHeader(rmd, elem);
        }
        
        return retElem;
+    }
+    
+    public static Element insertSiblingBeforeOrPrepend(RampartMessageData rmd, 
Element child, Element elem) {
+        Element retElem = null;
+        if(child != null && child.getPreviousSibling() != null){ 
+                retElem = RampartUtil.insertSiblingBefore(rmd, child, elem);
+        }else{ //Prepend 
+                retElem = prependSecHeader(rmd, elem);
+        }
+        
+        return retElem;
+    }
+    
+    private static Element prependSecHeader(RampartMessageData rmd, Element 
elem){
+        Element retElem = null;
+        
+        Element secHeaderElem = rmd.getSecHeader().getSecurityHeader();
+        Node node = secHeaderElem.getOwnerDocument().importNode(
+                elem, true);
+        Element firstElem = (Element)secHeaderElem.getFirstChild();
+
+        if(firstElem == null){
+                retElem = (Element)secHeaderElem.appendChild(node);
+        }else{
+                
if(firstElem.getOwnerDocument().equals(elem.getOwnerDocument())) {
+                        
((OMElement)firstElem).insertSiblingBefore((OMElement)elem);
+                retElem = elem;
+                } else {
+                        Element newSib = 
(Element)firstElem.getOwnerDocument().importNode(elem, true);
+                        
((OMElement)firstElem).insertSiblingBefore((OMElement)newSib);
+                        retElem = newSib;
+                }
+        }
+        
+        return retElem;
     }
 
 }


Reply via email to