You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rampart-dev@ws.apache.org by na...@apache.org on 2008/02/05 06:33:28 UTC

svn commit: r618549 - in /webservices/rampart/trunk/java/modules: rampart-core/src/main/java/org/apache/rampart/ rampart-core/src/main/java/org/apache/rampart/util/ rampart-policy/src/main/java/META-INF/services/

Author: nandana
Date: Mon Feb  4 21:33:24 2008
New Revision: 618549

URL: http://svn.apache.org/viewvc?rev=618549&view=rev
Log:
Fixing https://issues.apache.org/jira/browse/RAMPART-136.

Modified:
    webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
    webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
    webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
    webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder

Modified: webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java?rev=618549&r1=618548&r2=618549&view=diff
==============================================================================
--- webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java (original)
+++ webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/PolicyBasedResultsValidator.java Mon Feb  4 21:33:24 2008
@@ -16,6 +16,7 @@
 
 package org.apache.rampart;
 
+import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.rampart.policy.RampartPolicyData;
@@ -136,6 +137,8 @@
         validateEncryptedParts(data, encryptedParts, results);
 
         validateSignedPartsHeaders(data, signatureParts, results);
+        
+        validateRequiredElements(data);
 
         //Supporting tokens
         if(!rmd.isInitiator()) {
@@ -429,6 +432,27 @@
 //            throw new RampartException("invalidNumberOfEncryptedParts", 
 //                    new String[]{Integer.toString(refCount)});
 //        }
+        
+    }
+    
+    public void validateRequiredElements(ValidatorData data) throws RampartException {
+        
+        RampartMessageData rmd = data.getRampartMessageData();
+        
+        RampartPolicyData rpd = rmd.getPolicyData();
+        
+        SOAPEnvelope envelope = rmd.getMsgContext().getEnvelope();
+        
+        Iterator elementsIter = rpd.getRequiredElements().iterator();
+        
+        while (elementsIter.hasNext()) {
+            
+            String expression = (String) elementsIter.next();
+            
+            if ( !RampartUtil.checkRequiredElements(envelope, rpd.getDeclaredNamespaces(), expression)) {
+                throw new RampartException("requiredElementsMissing", new String[] { expression } );
+            }
+        }
         
     }
 

Modified: webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties?rev=618549&r1=618548&r2=618549&view=diff
==============================================================================
--- webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties (original)
+++ webservices/rampart/trunk/java/modules/rampart-core/src/main/java/org/apache/rampart/errors.properties Mon Feb  4 21:33:24 2008
@@ -90,4 +90,5 @@
 encryptionMissing = Expected encrypted part missing
 signedPartHeaderNotSigned = Soap Header must be signed : {0}
 unexprectedSignature = Unexpected signature
-invalidTransport = Expected transport is "https" but incoming transport found : \"{0}\"  
\ No newline at end of file
+invalidTransport = Expected transport is "https" but incoming transport found : \"{0}\" 
+requiredElementsMissing = Required Elements not found in the incoming message : {0}
\ No newline at end of file

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=618549&r1=618548&r2=618549&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 Mon Feb  4 21:33:24 2008
@@ -813,6 +813,42 @@
         return result;
     }
     
+    /**
+     * Get a element for SOAP 
+     * @param envelope
+     * @param namespaces
+     * @param xpath
+     * @return
+     */
+    public static boolean checkRequiredElements(SOAPEnvelope envelope, HashMap decNamespaces, String expression ) {
+        
+        
+        Set namespaces = findAllPrefixNamespaces(envelope, decNamespaces);
+
+        try {
+                        XPath xp = new AXIOMXPath(expression);
+                        Iterator nsIter = namespaces.iterator();
+                        
+                        while (nsIter.hasNext())
+                        {
+                                OMNamespace tmpNs = (OMNamespace)nsIter.next();
+                                xp.addNamespace(tmpNs.getPrefix(), tmpNs.getNamespaceURI());
+                        }
+                        
+                        List selectedNodes = xp.selectNodes(envelope);
+                        
+                        if (selectedNodes.size() == 0 ) {
+                            return false;
+                        }
+                
+        } catch (JaxenException e) {
+                // This has to be changed to propagate an instance of a RampartException up
+                throw new RuntimeException(e);
+        }
+        
+        return true;
+    }
+    
     
     public static KeyGenerator getEncryptionKeyGenerator(String symEncrAlgo) throws WSSecurityException {
         KeyGenerator keyGen;

Modified: webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder?rev=618549&r1=618548&r2=618549&view=diff
==============================================================================
--- webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder (original)
+++ webservices/rampart/trunk/java/modules/rampart-policy/src/main/java/META-INF/services/org.apache.neethi.builders.AssertionBuilder Mon Feb  4 21:33:24 2008
@@ -23,6 +23,7 @@
 org.apache.ws.secpolicy11.builders.SecureConversationTokenBuilder
 org.apache.ws.secpolicy11.builders.SymmetricBindingBuilder
 org.apache.ws.secpolicy11.builders.IssuedTokenBuilder
+org.apache.ws.secpolicy11.builders.RequiredElementsBuilder
 org.apache.ws.secpolicy12.builders.AlgorithmSuiteBuilder
 org.apache.ws.secpolicy12.builders.AsymmetricBindingBuilder
 org.apache.ws.secpolicy12.builders.EncryptedElementsBuilder
@@ -44,4 +45,5 @@
 org.apache.ws.secpolicy12.builders.SecurityContextTokenBuilder
 org.apache.ws.secpolicy12.builders.SecureConversationTokenBuilder
 org.apache.ws.secpolicy12.builders.SymmetricBindingBuilder
-org.apache.ws.secpolicy12.builders.IssuedTokenBuilder
\ No newline at end of file
+org.apache.ws.secpolicy12.builders.IssuedTokenBuilder
+org.apache.ws.secpolicy12.builders.RequiredElementsBuilder
\ No newline at end of file