You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by co...@apache.org on 2017/02/02 10:58:52 UTC

svn commit: r1781368 [1/2] - /webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/

Author: coheigea
Date: Thu Feb  2 10:58:51 2017
New Revision: 1781368

URL: http://svn.apache.org/viewvc?rev=1781368&view=rev
Log:
WSS-597 - Implement equals/hashCode for the WSS4J policy model

Modified:
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractBinding.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractSecurityAssertion.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractSymmetricAsymmetricBinding.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractTokenWrapper.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AlgorithmSuite.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AsymmetricBinding.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Attachments.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/ContentEncryptedElements.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptedElements.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptedParts.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptionToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Header.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/HttpsToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorEncryptionToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorSignatureToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/IssuedToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/KerberosToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/KeyValueToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Layout.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/ProtectionToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientEncryptionToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientSignatureToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RelToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RequiredElements.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RequiredParts.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SamlToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SecureConversationToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SecurityContextToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignatureToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignedElements.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignedParts.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SpnegoContextToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SupportingTokens.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SymmetricBinding.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/TransportBinding.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/TransportToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Trust10.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Trust13.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/UsernameToken.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Wss10.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Wss11.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/X509Token.java
    webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/XPath.java

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractBinding.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractBinding.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractBinding.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractBinding.java Thu Feb  2 10:58:51 2017
@@ -50,6 +50,48 @@ public abstract class AbstractBinding ex
     public Policy getPolicy() {
         return nestedPolicy;
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof AbstractBinding)) {
+            return false;
+        }
+        
+        AbstractBinding that = (AbstractBinding)object;
+        if (algorithmSuite != null && !algorithmSuite.equals(that.algorithmSuite)
+            || algorithmSuite == null && that.algorithmSuite != null) {
+            return false;
+        }
+        
+        if (layout != null && !layout.equals(that.layout)
+            || layout == null && that.layout != null) {
+            return false;
+        }
+        
+        if (includeTimestamp != that.includeTimestamp) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (algorithmSuite != null) {
+            result = 31 * result + algorithmSuite.hashCode();
+        }
+        if (layout != null) {
+            result = 31 * result + layout.hashCode();
+        }
+        result = 31 * result + Boolean.hashCode(includeTimestamp);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     public PolicyComponent normalize() {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractSecurityAssertion.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractSecurityAssertion.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractSecurityAssertion.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractSecurityAssertion.java Thu Feb  2 10:58:51 2017
@@ -72,7 +72,44 @@ public abstract class AbstractSecurityAs
     public boolean equal(PolicyComponent policyComponent) {
         return policyComponent == this;
     }
-
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof AbstractSecurityAssertion)) {
+            return false;
+        }
+        
+        AbstractSecurityAssertion that = (AbstractSecurityAssertion)object;
+        if (isOptional != that.isOptional) {
+            return false;
+        }
+        if (isIgnorable != that.isIgnorable) {
+            return false;
+        }
+        
+        if (version != null && !version.equals(that.version)
+            || version == null && that.version != null) {
+            return false;
+        }
+        
+        return true;
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (version != null) {
+            result = 31 * result + version.hashCode();
+        }
+        result = 31 * result + Boolean.hashCode(isOptional);
+        result = 31 * result + Boolean.hashCode(isIgnorable);
+        
+        return result;
+    }
+    
     @Override
     public PolicyComponent normalize() {
         if (normalized == null) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractSymmetricAsymmetricBinding.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractSymmetricAsymmetricBinding.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractSymmetricAsymmetricBinding.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractSymmetricAsymmetricBinding.java Thu Feb  2 10:58:51 2017
@@ -55,6 +55,40 @@ public abstract class AbstractSymmetricA
 
         parseNestedSymmetricAsymmetricBindingBasePolicy(nestedPolicy, this);
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof AbstractSymmetricAsymmetricBinding)) {
+            return false;
+        }
+        
+        AbstractSymmetricAsymmetricBinding that = (AbstractSymmetricAsymmetricBinding)object;
+        if (protectionOrder != that.protectionOrder
+            || encryptSignature != that.encryptSignature
+            || protectTokens != that.protectTokens
+            || onlySignEntireHeadersAndBody != that.onlySignEntireHeadersAndBody) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (protectionOrder != null) {
+            result = 31 * result + protectionOrder.hashCode();
+        }
+        result = 31 * result + Boolean.hashCode(encryptSignature);
+        result = 31 * result + Boolean.hashCode(protectTokens);
+        result = 31 * result + Boolean.hashCode(onlySignEntireHeadersAndBody);
+        
+        return 31 * result + super.hashCode();
+    }
 
     protected void parseNestedSymmetricAsymmetricBindingBasePolicy(
         Policy nestedPolicy,  AbstractSymmetricAsymmetricBinding asymmetricBindingBase

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractToken.java Thu Feb  2 10:58:51 2017
@@ -79,6 +79,71 @@ public abstract class AbstractToken exte
     public PolicyComponent normalize() {
         return super.normalize(getPolicy());
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof AbstractToken)) {
+            return false;
+        }
+        
+        AbstractToken that = (AbstractToken)object;
+        if (includeTokenType != that.includeTokenType
+            || derivedKeys != that.derivedKeys) {
+            return false;
+        }
+        if (issuerName != null && !issuerName.equals(that.issuerName)
+            || issuerName == null && that.issuerName != null) {
+            return false;
+        }
+        
+        if (issuer == null && that.issuer != null
+            || issuer != null && issuer == null) {
+            return false;
+        }
+        
+        if (issuer != null 
+            && !DOM2Writer.nodeToString(issuer).equals(DOM2Writer.nodeToString(that.issuer))) {
+            return false;
+        }
+        
+        if (claims == null && that.claims != null
+            || claims != null && claims == null) {
+            return false;
+        }
+        
+        if (claims != null 
+            && !DOM2Writer.nodeToString(claims).equals(DOM2Writer.nodeToString(that.claims))) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (includeTokenType != null) {
+            result = 31 * result + includeTokenType.hashCode();
+        }
+        if (derivedKeys != null) {
+            result = 31 * result + derivedKeys.hashCode();
+        }
+        if (issuerName != null) {
+            result = 31 * result + issuerName.hashCode();
+        }
+        
+        if (issuer != null) {
+            result = 31 * result + DOM2Writer.nodeToString(issuer).hashCode();
+        }
+        if (claims != null) {
+            result = 31 * result + DOM2Writer.nodeToString(claims).hashCode();
+        }
+        
+        return 31 * result + super.hashCode();
+    }
 
     public SPConstants.IncludeTokenType getIncludeTokenType() {
         return includeTokenType;

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractTokenWrapper.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractTokenWrapper.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractTokenWrapper.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AbstractTokenWrapper.java Thu Feb  2 10:58:51 2017
@@ -46,6 +46,34 @@ public abstract class AbstractTokenWrapp
     public Policy getPolicy() {
         return nestedPolicy;
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof AbstractTokenWrapper)) {
+            return false;
+        }
+        
+        AbstractTokenWrapper that = (AbstractTokenWrapper)object;
+        if (token != null && !token.equals(that.token)
+            || token == null && that.token != null) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (token != null) {
+            result = 31 * result + token.hashCode();
+        }
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     public PolicyComponent normalize() {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AlgorithmSuite.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AlgorithmSuite.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AlgorithmSuite.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AlgorithmSuite.java Thu Feb  2 10:58:51 2017
@@ -256,6 +256,115 @@ public class AlgorithmSuite extends Abst
             this.maximumAsymmetricKeyLength = algorithmSuiteType.maximumAsymmetricKeyLength;
             this.mgfAlgo = algorithmSuiteType.mgfAlgo;
         }
+        
+        @Override
+        public boolean equals(Object object) {
+            if (object == this) {
+                return true;
+            }
+            
+            if (!(object instanceof AlgorithmSuiteType)) {
+                return false;
+            }
+            
+            AlgorithmSuiteType that = (AlgorithmSuiteType)object;
+            if (name != null && !name.equals(that.name)
+                || name == null && that.name != null) {
+                return false;
+            }
+            if (digest != null && !digest.equals(that.digest)
+                || digest == null && that.digest != null) {
+                return false;
+            }
+            if (encryption != null && !encryption.equals(that.encryption)
+                || encryption == null && that.encryption != null) {
+                return false;
+            }
+            if (symmetricKeyWrap != null && !symmetricKeyWrap.equals(that.symmetricKeyWrap)
+                || symmetricKeyWrap == null && that.symmetricKeyWrap != null) {
+                return false;
+            }
+            if (asymmetricKeyWrap != null && !asymmetricKeyWrap.equals(that.asymmetricKeyWrap)
+                || asymmetricKeyWrap == null && that.asymmetricKeyWrap != null) {
+                return false;
+            }
+            if (encryptionKeyDerivation != null && !encryptionKeyDerivation.equals(that.encryptionKeyDerivation)
+                || encryptionKeyDerivation == null && that.encryptionKeyDerivation != null) {
+                return false;
+            }
+            if (signatureKeyDerivation != null && !signatureKeyDerivation.equals(that.signatureKeyDerivation)
+                || signatureKeyDerivation == null && that.signatureKeyDerivation != null) {
+                return false;
+            }
+            if (ns != null && !ns.equals(that.ns)
+                || ns == null && that.ns != null) {
+                return false;
+            }
+            if (mgfAlgo != null && !mgfAlgo.equals(that.mgfAlgo)
+                || mgfAlgo == null && that.mgfAlgo != null) {
+                return false;
+            }
+            if (encryptionDigest != null && !encryptionDigest.equals(that.encryptionDigest)
+                || encryptionDigest == null && that.encryptionDigest != null) {
+                return false;
+            }
+            
+            if (encryptionDerivedKeyLength != that.encryptionDerivedKeyLength
+                || signatureDerivedKeyLength != that.signatureDerivedKeyLength
+                || minimumSymmetricKeyLength != that.minimumSymmetricKeyLength
+                || maximumSymmetricKeyLength != that.maximumSymmetricKeyLength
+                || minimumAsymmetricKeyLength != that.minimumAsymmetricKeyLength
+                || maximumAsymmetricKeyLength != that.maximumAsymmetricKeyLength) {
+                return false;
+            }
+            
+            return true;
+        }
+        
+        @Override
+        public int hashCode() {
+            int result = 17;
+            if (name != null) {
+                result = 31 * result + name.hashCode();
+            }
+            if (digest != null) {
+                result = 31 * result + digest.hashCode();
+            }
+            if (encryption != null) {
+                result = 31 * result + encryption.hashCode();
+            }
+            if (symmetricKeyWrap != null) {
+                result = 31 * result + symmetricKeyWrap.hashCode();
+            }
+            if (asymmetricKeyWrap != null) {
+                result = 31 * result + asymmetricKeyWrap.hashCode();
+            }
+            if (encryptionKeyDerivation != null) {
+                result = 31 * result + encryptionKeyDerivation.hashCode();
+            }
+            if (signatureKeyDerivation != null) {
+                result = 31 * result + signatureKeyDerivation.hashCode();
+            }
+            
+            result = 31 * result + Integer.hashCode(encryptionDerivedKeyLength);
+            result = 31 * result + Integer.hashCode(signatureDerivedKeyLength);
+            result = 31 * result + Integer.hashCode(minimumSymmetricKeyLength);
+            result = 31 * result + Integer.hashCode(maximumSymmetricKeyLength);
+            result = 31 * result + Integer.hashCode(minimumAsymmetricKeyLength);
+            result = 31 * result + Integer.hashCode(maximumAsymmetricKeyLength);
+            
+            if (mgfAlgo != null) {
+                result = 31 * result + mgfAlgo.hashCode();
+            }
+            if (ns != null) {
+                result = 31 * result + ns.hashCode();
+            }
+            if (encryptionDigest != null) {
+                result = 31 * result + encryptionDigest.hashCode();
+            }
+            
+            return 31 * result + super.hashCode();
+        }
 
         public String getName() {
             return name;
@@ -473,6 +582,73 @@ public class AlgorithmSuite extends Abst
     public QName getName() {
         return getVersion().getSPConstants().getAlgorithmSuite();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof AlgorithmSuite)) {
+            return false;
+        }
+        
+        AlgorithmSuite that = (AlgorithmSuite)object;
+        if (c14n != that.c14n || soapNormType != that.soapNormType || strType != that.strType
+            || xPathType != that.xPathType) {
+            return false;
+        }
+        
+        if (algorithmSuiteType != null && !algorithmSuiteType.equals(that.algorithmSuiteType)
+            || algorithmSuiteType == null && that.algorithmSuiteType != null) {
+            return false;
+        }
+        if (symmetricSignature != null && !symmetricSignature.equals(that.symmetricSignature)
+            || symmetricSignature == null && that.symmetricSignature != null) {
+            return false;
+        }
+        if (asymmetricSignature != null && !asymmetricSignature.equals(that.asymmetricSignature)
+            || asymmetricSignature == null && that.asymmetricSignature != null) {
+            return false;
+        }
+        if (computedKey != null && !computedKey.equals(that.computedKey)
+            || computedKey == null && that.computedKey != null) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (c14n != null) {
+            result = 31 * result + c14n.hashCode();
+        }
+        if (soapNormType != null) {
+            result = 31 * result + soapNormType.hashCode();
+        }
+        if (strType != null) {
+            result = 31 * result + strType.hashCode();
+        }
+        if (xPathType != null) {
+            result = 31 * result + xPathType.hashCode();
+        }
+        if (algorithmSuiteType != null) {
+            result = 31 * result + algorithmSuiteType.hashCode();
+        }
+        if (symmetricSignature != null) {
+            result = 31 * result + symmetricSignature.hashCode();
+        }
+        if (asymmetricSignature != null) {
+            result = 31 * result + asymmetricSignature.hashCode();
+        }
+        if (computedKey != null) {
+            result = 31 * result + computedKey.hashCode();
+        }
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     public PolicyComponent normalize() {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AsymmetricBinding.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AsymmetricBinding.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AsymmetricBinding.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/AsymmetricBinding.java Thu Feb  2 10:58:51 2017
@@ -45,6 +45,72 @@ public class AsymmetricBinding extends A
     public QName getName() {
         return getVersion().getSPConstants().getAsymmetricBinding();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof AsymmetricBinding)) {
+            return false;
+        }
+        
+        AsymmetricBinding that = (AsymmetricBinding)object;
+        if (initiatorToken != null && !initiatorToken.equals(that.initiatorToken)
+            || initiatorToken == null && that.initiatorToken != null) {
+            return false;
+        }
+        if (initiatorSignatureToken != null && !initiatorSignatureToken.equals(that.initiatorSignatureToken)
+            || initiatorSignatureToken == null && that.initiatorSignatureToken != null) {
+            return false;
+        }
+        if (initiatorEncryptionToken != null && !initiatorEncryptionToken.equals(that.initiatorEncryptionToken)
+            || initiatorEncryptionToken == null && that.initiatorEncryptionToken != null) {
+            return false;
+        }
+        
+        if (recipientToken != null && !recipientToken.equals(that.recipientToken)
+            || recipientToken == null && that.recipientToken != null) {
+            return false;
+        }
+        if (recipientSignatureToken != null && !recipientSignatureToken.equals(that.recipientSignatureToken)
+            || recipientSignatureToken == null && that.recipientSignatureToken != null) {
+            return false;
+        }
+        if (recipientEncryptionToken != null && !recipientEncryptionToken.equals(that.recipientEncryptionToken)
+            || recipientEncryptionToken == null && that.recipientEncryptionToken != null) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (initiatorToken != null) {
+            result = 31 * result + initiatorToken.hashCode();
+        }
+        if (initiatorSignatureToken != null) {
+            result = 31 * result + initiatorSignatureToken.hashCode();
+        }
+        if (initiatorEncryptionToken != null) {
+            result = 31 * result + initiatorEncryptionToken.hashCode();
+        }
+        
+        if (recipientToken != null) {
+            result = 31 * result + recipientToken.hashCode();
+        }
+        if (recipientSignatureToken != null) {
+            result = 31 * result + recipientSignatureToken.hashCode();
+        }
+        if (recipientEncryptionToken != null) {
+            result = 31 * result + recipientEncryptionToken.hashCode();
+        }
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Attachments.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Attachments.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Attachments.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Attachments.java Thu Feb  2 10:58:51 2017
@@ -43,6 +43,36 @@ public class Attachments extends Abstrac
     public QName getName() {
         return getVersion().getSPConstants().getAttachments();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof Attachments)) {
+            return false;
+        }
+        
+        Attachments that = (Attachments)object;
+        if (contentSignatureTransform != that.contentSignatureTransform) {
+            return false;
+        }
+        if (attachmentCompleteSignatureTransform != that.attachmentCompleteSignatureTransform) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Boolean.hashCode(contentSignatureTransform);
+        result = 31 * result + Boolean.hashCode(attachmentCompleteSignatureTransform);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/ContentEncryptedElements.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/ContentEncryptedElements.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/ContentEncryptedElements.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/ContentEncryptedElements.java Thu Feb  2 10:58:51 2017
@@ -34,6 +34,25 @@ public class ContentEncryptedElements ex
     public QName getName() {
         return getVersion().getSPConstants().getContentEncryptedElements();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof ContentEncryptedElements)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptedElements.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptedElements.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptedElements.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptedElements.java Thu Feb  2 10:58:51 2017
@@ -34,6 +34,25 @@ public class EncryptedElements extends R
     public QName getName() {
         return getVersion().getSPConstants().getEncryptedElements();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof EncryptedElements)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptedParts.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptedParts.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptedParts.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptedParts.java Thu Feb  2 10:58:51 2017
@@ -24,16 +24,36 @@ import org.apache.wss4j.policy.SPConstan
 import javax.xml.namespace.QName;
 import java.util.List;
 
-public class EncryptedParts extends SignedParts {
+public class EncryptedParts extends AbstractSecuredParts {
 
     public EncryptedParts(SPConstants.SPVersion version, boolean body, Attachments attachments, List<Header> headers) {
-        super(version, body, attachments, headers, false);
+        super(version, body, attachments, headers);
     }
 
     @Override
     public QName getName() {
         return getVersion().getSPConstants().getEncryptedParts();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof EncryptedParts)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptionToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptionToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptionToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/EncryptionToken.java Thu Feb  2 10:58:51 2017
@@ -33,6 +33,25 @@ public class EncryptionToken extends Abs
     public QName getName() {
         return getVersion().getSPConstants().getEncryptionToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof EncryptionToken)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Header.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Header.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Header.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Header.java Thu Feb  2 10:58:51 2017
@@ -35,6 +35,43 @@ public class Header {
     public String getNamespace() {
         return namespace;
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof Header)) {
+            return false;
+        }
+     
+        Header that = (Header)object;
+        if (name != null && !name.equals(that.name)
+            || name == null && that.name != null) {
+            return false;
+        }
+        
+        if (namespace != null && !namespace.equals(that.namespace)
+            || namespace == null && that.namespace != null) {
+            return false;
+        }
+        
+        return true;
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (name != null) {
+            result = 31 * result + name.hashCode();
+        }
+        if (namespace != null) {
+            result = 31 * result + namespace.hashCode();
+        }
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     public String toString() {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/HttpsToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/HttpsToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/HttpsToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/HttpsToken.java Thu Feb  2 10:58:51 2017
@@ -64,6 +64,33 @@ public class HttpsToken extends Abstract
     public QName getName() {
         return getVersion().getSPConstants().getHttpsToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof HttpsToken)) {
+            return false;
+        }
+        
+        HttpsToken that = (HttpsToken)object;
+        if (authenticationType != that.authenticationType) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (authenticationType != null) {
+            result = 31 * result + authenticationType.hashCode();
+        }
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorEncryptionToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorEncryptionToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorEncryptionToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorEncryptionToken.java Thu Feb  2 10:58:51 2017
@@ -33,6 +33,25 @@ public class InitiatorEncryptionToken ex
     public QName getName() {
         return getVersion().getSPConstants().getInitiatorEncryptionToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof InitiatorEncryptionToken)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorSignatureToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorSignatureToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorSignatureToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorSignatureToken.java Thu Feb  2 10:58:51 2017
@@ -33,6 +33,25 @@ public class InitiatorSignatureToken ext
     public QName getName() {
         return getVersion().getSPConstants().getInitiatorSignatureToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof InitiatorSignatureToken)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/InitiatorToken.java Thu Feb  2 10:58:51 2017
@@ -33,6 +33,25 @@ public class InitiatorToken extends Abst
     public QName getName() {
         return getVersion().getSPConstants().getInitiatorToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof InitiatorToken)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/IssuedToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/IssuedToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/IssuedToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/IssuedToken.java Thu Feb  2 10:58:51 2017
@@ -50,6 +50,47 @@ public class IssuedToken extends Abstrac
     public QName getName() {
         return getVersion().getSPConstants().getIssuedToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof IssuedToken)) {
+            return false;
+        }
+        
+        IssuedToken that = (IssuedToken)object;
+        if (requireExternalReference != that.requireExternalReference
+            || requireInternalReference != that.requireInternalReference) {
+            return false;
+        }
+        
+        if (requestSecurityTokenTemplate == null && that.requestSecurityTokenTemplate != null
+            || requestSecurityTokenTemplate != null && requestSecurityTokenTemplate == null) {
+            return false;
+        }
+        
+        if (requestSecurityTokenTemplate != null 
+            && !DOM2Writer.nodeToString(requestSecurityTokenTemplate).equals(
+                DOM2Writer.nodeToString(that.requestSecurityTokenTemplate))) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (requestSecurityTokenTemplate != null) {
+            result = 31 * result + DOM2Writer.nodeToString(requestSecurityTokenTemplate).hashCode();
+        }
+        result = 31 * result + Boolean.hashCode(requireExternalReference);
+        result = 31 * result + Boolean.hashCode(requireInternalReference);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     public void serialize(XMLStreamWriter writer) throws XMLStreamException {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/KerberosToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/KerberosToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/KerberosToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/KerberosToken.java Thu Feb  2 10:58:51 2017
@@ -60,6 +60,37 @@ public class KerberosToken extends Abstr
     public QName getName() {
         return getVersion().getSPConstants().getKerberosToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof KerberosToken)) {
+            return false;
+        }
+        
+        KerberosToken that = (KerberosToken)object;
+        if (requireKeyIdentifierReference != that.requireKeyIdentifierReference) {
+            return false;
+        }
+        if (apReqTokenType != that.apReqTokenType) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (apReqTokenType != null) {
+            result = 31 * result + apReqTokenType.hashCode();
+        }
+        result = 31 * result + Boolean.hashCode(requireKeyIdentifierReference);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/KeyValueToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/KeyValueToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/KeyValueToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/KeyValueToken.java Thu Feb  2 10:58:51 2017
@@ -42,6 +42,31 @@ public class KeyValueToken extends Abstr
     public QName getName() {
         return getVersion().getSPConstants().getKeyValueToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof KeyValueToken)) {
+            return false;
+        }
+        
+        KeyValueToken that = (KeyValueToken)object;
+        if (rsaKeyValue != that.rsaKeyValue) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Boolean.hashCode(rsaKeyValue);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Layout.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Layout.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Layout.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Layout.java Thu Feb  2 10:58:51 2017
@@ -69,6 +69,34 @@ public class Layout extends AbstractSecu
     public QName getName() {
         return getVersion().getSPConstants().getLayout();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof Layout)) {
+            return false;
+        }
+        
+        Layout that = (Layout)object;
+        if (layoutType != that.layoutType) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (layoutType != null) {
+            result = 31 * result + layoutType.hashCode();
+        }
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     public PolicyComponent normalize() {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/ProtectionToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/ProtectionToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/ProtectionToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/ProtectionToken.java Thu Feb  2 10:58:51 2017
@@ -33,6 +33,25 @@ public class ProtectionToken extends Abs
     public QName getName() {
         return getVersion().getSPConstants().getProtectionToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof ProtectionToken)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientEncryptionToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientEncryptionToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientEncryptionToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientEncryptionToken.java Thu Feb  2 10:58:51 2017
@@ -33,8 +33,27 @@ public class RecipientEncryptionToken ex
     public QName getName() {
         return getVersion().getSPConstants().getRecipientEncryptionToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof RecipientEncryptionToken)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
 
     @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
+    
+    @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {
         return new RecipientEncryptionToken(getVersion(), nestedPolicy);
     }

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientSignatureToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientSignatureToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientSignatureToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientSignatureToken.java Thu Feb  2 10:58:51 2017
@@ -33,6 +33,25 @@ public class RecipientSignatureToken ext
     public QName getName() {
         return getVersion().getSPConstants().getRecipientSignatureToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof RecipientSignatureToken)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RecipientToken.java Thu Feb  2 10:58:51 2017
@@ -33,6 +33,25 @@ public class RecipientToken extends Abst
     public QName getName() {
         return getVersion().getSPConstants().getRecipientToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof RecipientToken)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RelToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RelToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RelToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RelToken.java Thu Feb  2 10:58:51 2017
@@ -61,6 +61,37 @@ public class RelToken extends AbstractTo
     public QName getName() {
         return getVersion().getSPConstants().getRelToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof RelToken)) {
+            return false;
+        }
+        
+        RelToken that = (RelToken)object;
+        if (requireKeyIdentifierReference != that.requireKeyIdentifierReference) {
+            return false;
+        }
+        if (relTokenType != that.relTokenType) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (relTokenType != null) {
+            result = 31 * result + relTokenType.hashCode();
+        }
+        result = 31 * result + Boolean.hashCode(requireKeyIdentifierReference);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RequiredElements.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RequiredElements.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RequiredElements.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RequiredElements.java Thu Feb  2 10:58:51 2017
@@ -46,6 +46,40 @@ public class RequiredElements extends Ab
     public QName getName() {
         return getVersion().getSPConstants().getRequiredElements();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof RequiredElements)) {
+            return false;
+        }
+        
+        RequiredElements that = (RequiredElements)object;
+        if (xPathVersion != null && !xPathVersion.equals(that.xPathVersion)
+            || xPathVersion == null && that.xPathVersion != null) {
+            return false;
+        }
+        
+        if (!xPaths.equals(that.xPaths)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (xPathVersion != null) {
+            result = 31 * result + xPathVersion.hashCode();
+        }
+        result = 31 * result + xPaths.hashCode();
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RequiredParts.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RequiredParts.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RequiredParts.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/RequiredParts.java Thu Feb  2 10:58:51 2017
@@ -41,6 +41,31 @@ public class RequiredParts extends Abstr
     public QName getName() {
         return getVersion().getSPConstants().getRequiredParts();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof RequiredParts)) {
+            return false;
+        }
+        
+        RequiredParts that = (RequiredParts)object;
+        if (!headers.equals(that.headers)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + headers.hashCode();
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     public void serialize(XMLStreamWriter writer) throws XMLStreamException {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SamlToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SamlToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SamlToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SamlToken.java Thu Feb  2 10:58:51 2017
@@ -62,6 +62,37 @@ public class SamlToken extends AbstractT
     public QName getName() {
         return getVersion().getSPConstants().getSamlToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof SamlToken)) {
+            return false;
+        }
+        
+        SamlToken that = (SamlToken)object;
+        if (requireKeyIdentifierReference != that.requireKeyIdentifierReference) {
+            return false;
+        }
+        if (samlTokenType != that.samlTokenType) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (samlTokenType != null) {
+            result = 31 * result + samlTokenType.hashCode();
+        }
+        result = 31 * result + Boolean.hashCode(requireKeyIdentifierReference);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SecureConversationToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SecureConversationToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SecureConversationToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SecureConversationToken.java Thu Feb  2 10:58:51 2017
@@ -46,6 +46,35 @@ public class SecureConversationToken ext
     public QName getName() {
         return getVersion().getSPConstants().getSecureConversationToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof SecureConversationToken)) {
+            return false;
+        }
+        
+        SecureConversationToken that = (SecureConversationToken)object;
+        if (mustNotSendCancel != that.mustNotSendCancel
+            || mustNotSendAmend != that.mustNotSendAmend
+            || mustNotSendRenew != that.mustNotSendRenew) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Boolean.hashCode(mustNotSendCancel);
+        result = 31 * result + Boolean.hashCode(mustNotSendAmend);
+        result = 31 * result + Boolean.hashCode(mustNotSendRenew);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SecurityContextToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SecurityContextToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SecurityContextToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SecurityContextToken.java Thu Feb  2 10:58:51 2017
@@ -44,6 +44,35 @@ public class SecurityContextToken extend
     public QName getName() {
         return getVersion().getSPConstants().getSecurityContextToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof SecurityContextToken)) {
+            return false;
+        }
+        
+        SecurityContextToken that = (SecurityContextToken)object;
+        if (requireExternalUriReference != that.requireExternalUriReference
+            || sc13SecurityContextToken != that.sc13SecurityContextToken
+            || sc10SecurityContextToken != that.sc10SecurityContextToken) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Boolean.hashCode(requireExternalUriReference);
+        result = 31 * result + Boolean.hashCode(sc13SecurityContextToken);
+        result = 31 * result + Boolean.hashCode(sc10SecurityContextToken);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignatureToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignatureToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignatureToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignatureToken.java Thu Feb  2 10:58:51 2017
@@ -33,6 +33,25 @@ public class SignatureToken extends Abst
     public QName getName() {
         return getVersion().getSPConstants().getSignatureToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof SignatureToken)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignedElements.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignedElements.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignedElements.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignedElements.java Thu Feb  2 10:58:51 2017
@@ -34,8 +34,27 @@ public class SignedElements extends Requ
     public QName getName() {
         return getVersion().getSPConstants().getSignedElements();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof SignedElements)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
 
     @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
+    
+    @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {
         return new SignedElements(getVersion(), getXPathVersion(), getXPaths());
     }

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignedParts.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignedParts.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignedParts.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SignedParts.java Thu Feb  2 10:58:51 2017
@@ -18,27 +18,20 @@
  */
 package org.apache.wss4j.policy.model;
 
-import org.apache.neethi.Constants;
 import org.apache.neethi.Policy;
 import org.apache.wss4j.policy.SPConstants;
 
 import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
 import java.util.List;
 
-public class SignedParts extends RequiredParts {
+public class SignedParts extends AbstractSecuredParts {
 
-    private boolean body;
-    private Attachments attachments;
     private boolean signAllHeaders;
 
     public SignedParts(SPConstants.SPVersion version, boolean body, Attachments attachments,
                        List<Header> headers, boolean signAllHeaders) {
-        super(version, headers);
+        super(version, body, attachments, headers);
 
-        this.body = body;
-        this.attachments = attachments;
         this.signAllHeaders = signAllHeaders;
     }
 
@@ -46,38 +39,30 @@ public class SignedParts extends Require
     public QName getName() {
         return getVersion().getSPConstants().getSignedParts();
     }
-
+    
     @Override
-    public void serialize(XMLStreamWriter writer) throws XMLStreamException {
-        writer.writeStartElement(getName().getPrefix(), getName().getLocalPart(), getName().getNamespaceURI());
-        writer.writeNamespace(getName().getPrefix(), getName().getNamespaceURI());
-        if (!isNormalized() && isOptional()) {
-            writer.writeAttribute(Constants.ATTR_WSP,
-                                  writer.getNamespaceContext().getNamespaceURI(Constants.ATTR_WSP),
-                                  Constants.ATTR_OPTIONAL, "true");
-        }
-        if (isIgnorable()) {
-            writer.writeAttribute(Constants.ATTR_WSP,
-                                  writer.getNamespaceContext().getNamespaceURI(Constants.ATTR_WSP),
-                                  Constants.ATTR_IGNORABLE, "true");
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
         }
-        if (isBody()) {
-            final QName body = getVersion().getSPConstants().getBody();
-            writer.writeEmptyElement(body.getPrefix(), body.getLocalPart(), body.getNamespaceURI());
+        if (!(object instanceof SignedParts)) {
+            return false;
         }
-        for (int i = 0; i < getHeaders().size(); i++) {
-            Header header = getHeaders().get(i);
-            final QName headerName = getVersion().getSPConstants().getHeader();
-            writer.writeEmptyElement(headerName.getPrefix(), headerName.getLocalPart(), headerName.getNamespaceURI());
-            if (header.getName() != null) {
-                writer.writeAttribute(SPConstants.NAME, header.getName());
-            }
-            writer.writeAttribute(SPConstants.NAMESPACE, header.getNamespace());
+        
+        SignedParts that = (SignedParts)object;
+        if (signAllHeaders != that.signAllHeaders) {
+            return false;
         }
-        if (getAttachments() != null) {
-            getAttachments().serialize(writer);
-        }
-        writer.writeEndElement();
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Boolean.hashCode(signAllHeaders);
+        
+        return 31 * result + super.hashCode();
     }
 
     @Override
@@ -87,22 +72,6 @@ public class SignedParts extends Require
                 getHeaders(), isSignAllHeaders());
     }
 
-    public boolean isBody() {
-        return body;
-    }
-
-    protected void setBody(boolean body) {
-        this.body = body;
-    }
-
-    public Attachments getAttachments() {
-        return attachments;
-    }
-
-    protected void setAttachments(Attachments attachments) {
-        this.attachments = attachments;
-    }
-
     public boolean isSignAllHeaders() {
         return signAllHeaders;
     }

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SpnegoContextToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SpnegoContextToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SpnegoContextToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SpnegoContextToken.java Thu Feb  2 10:58:51 2017
@@ -46,6 +46,35 @@ public class SpnegoContextToken extends
     }
 
     @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof SpnegoContextToken)) {
+            return false;
+        }
+        
+        SpnegoContextToken that = (SpnegoContextToken)object;
+        if (mustNotSendCancel != that.mustNotSendCancel
+            || mustNotSendAmend != that.mustNotSendAmend
+            || mustNotSendRenew != that.mustNotSendRenew) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Boolean.hashCode(mustNotSendCancel);
+        result = 31 * result + Boolean.hashCode(mustNotSendAmend);
+        result = 31 * result + Boolean.hashCode(mustNotSendRenew);
+        
+        return 31 * result + super.hashCode();
+    }
+    
+    @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {
         return new SpnegoContextToken(getVersion(), getIncludeTokenType(), getIssuer(),
                                       getIssuerName(), getClaims(), nestedPolicy);

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SupportingTokens.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SupportingTokens.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SupportingTokens.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SupportingTokens.java Thu Feb  2 10:58:51 2017
@@ -55,6 +55,74 @@ public class SupportingTokens extends Ab
     public QName getName() {
         return supportingTokenType;
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof SupportingTokens)) {
+            return false;
+        }
+        
+        SupportingTokens that = (SupportingTokens)object;
+        if (supportingTokenType != null && !supportingTokenType.equals(that.supportingTokenType)
+            || supportingTokenType == null && that.supportingTokenType != null) {
+            return false;
+        }
+        if (algorithmSuite != null && !algorithmSuite.equals(that.algorithmSuite)
+            || algorithmSuite == null && that.algorithmSuite != null) {
+            return false;
+        }
+        if (signedParts != null && !signedParts.equals(that.signedParts)
+            || signedParts == null && that.signedParts != null) {
+            return false;
+        }
+        if (signedElements != null && !signedElements.equals(that.signedElements)
+            || signedElements == null && that.signedElements != null) {
+            return false;
+        }
+        if (encryptedParts != null && !encryptedParts.equals(that.encryptedParts)
+            || encryptedParts == null && that.encryptedParts != null) {
+            return false;
+        }
+        if (encryptedElements != null && !encryptedElements.equals(that.encryptedElements)
+            || encryptedElements == null && that.encryptedElements != null) {
+            return false;
+        }
+        if (!tokens.equals(that.tokens)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (supportingTokenType != null) {
+            result = 31 * result + supportingTokenType.hashCode();
+        }
+        if (algorithmSuite != null) {
+            result = 31 * result + algorithmSuite.hashCode();
+        }
+        if (signedParts != null) {
+            result = 31 * result + signedParts.hashCode();
+        }
+        if (signedElements != null) {
+            result = 31 * result + signedElements.hashCode();
+        }
+        if (encryptedParts != null) {
+            result = 31 * result + encryptedParts.hashCode();
+        }
+        if (encryptedElements != null) {
+            result = 31 * result + encryptedElements.hashCode();
+        }
+        result = 31 * result + tokens.hashCode();
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     public void serialize(XMLStreamWriter writer) throws XMLStreamException {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SymmetricBinding.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SymmetricBinding.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SymmetricBinding.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/SymmetricBinding.java Thu Feb  2 10:58:51 2017
@@ -42,6 +42,49 @@ public class SymmetricBinding extends Ab
     public QName getName() {
         return getVersion().getSPConstants().getSymmetricBinding();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof SymmetricBinding)) {
+            return false;
+        }
+        
+        SymmetricBinding that = (SymmetricBinding)object;
+        if (encryptionToken != null && !encryptionToken.equals(that.encryptionToken)
+            || encryptionToken == null && that.encryptionToken != null) {
+            return false;
+        }
+        if (signatureToken != null && !signatureToken.equals(that.signatureToken)
+            || signatureToken == null && that.signatureToken != null) {
+            return false;
+        }
+        if (protectionToken != null && !protectionToken.equals(that.protectionToken)
+            || protectionToken == null && that.protectionToken != null) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (encryptionToken != null) {
+            result = 31 * result + encryptionToken.hashCode();
+        }
+        if (signatureToken != null) {
+            result = 31 * result + signatureToken.hashCode();
+        }
+        if (protectionToken != null) {
+            result = 31 * result + protectionToken.hashCode();
+        }
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/TransportBinding.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/TransportBinding.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/TransportBinding.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/TransportBinding.java Thu Feb  2 10:58:51 2017
@@ -42,6 +42,35 @@ public class TransportBinding extends Ab
     public QName getName() {
         return getVersion().getSPConstants().getTransportBinding();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        
+        if (!(object instanceof TransportBinding)) {
+            return false;
+        }
+        
+        TransportBinding that = (TransportBinding)object;
+        if (transportToken != null && !transportToken.equals(that.transportToken)
+            || transportToken == null && that.transportToken != null) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (transportToken != null) {
+            result = 31 * result + transportToken.hashCode();
+        }
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/TransportToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/TransportToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/TransportToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/TransportToken.java Thu Feb  2 10:58:51 2017
@@ -33,6 +33,25 @@ public class TransportToken extends Abst
     public QName getName() {
         return getVersion().getSPConstants().getTransportToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof TransportToken)) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Trust10.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Trust10.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Trust10.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Trust10.java Thu Feb  2 10:58:51 2017
@@ -57,6 +57,39 @@ public class Trust10 extends AbstractSec
     }
 
     @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof Trust10)) {
+            return false;
+        }
+        
+        Trust10 that = (Trust10)object;
+        if (mustSupportClientChallenge != that.mustSupportClientChallenge
+            || mustSupportServerChallenge != that.mustSupportServerChallenge
+            || requireClientEntropy != that.requireClientEntropy
+            || requireServerEntropy != that.requireServerEntropy
+            || mustSupportIssuedTokens != that.mustSupportIssuedTokens) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Boolean.hashCode(mustSupportClientChallenge);
+        result = 31 * result + Boolean.hashCode(mustSupportServerChallenge);
+        result = 31 * result + Boolean.hashCode(requireClientEntropy);
+        result = 31 * result + Boolean.hashCode(requireServerEntropy);
+        result = 31 * result + Boolean.hashCode(mustSupportIssuedTokens);
+        
+        return 31 * result + super.hashCode();
+    }
+    
+    @Override
     public PolicyComponent normalize() {
         return super.normalize(getPolicy());
     }

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Trust13.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Trust13.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Trust13.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Trust13.java Thu Feb  2 10:58:51 2017
@@ -44,6 +44,37 @@ public class Trust13 extends Trust10 {
     public QName getName() {
         return getVersion().getSPConstants().getTrust13();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof Trust13)) {
+            return false;
+        }
+        
+        Trust13 that = (Trust13)object;
+        if (requireRequestSecurityTokenCollection != that.requireRequestSecurityTokenCollection
+            || requireAppliesTo != that.requireAppliesTo
+            || scopePolicy15 != that.scopePolicy15
+            || mustSupportInteractiveChallenge != that.mustSupportInteractiveChallenge) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Boolean.hashCode(requireRequestSecurityTokenCollection);
+        result = 31 * result + Boolean.hashCode(requireAppliesTo);
+        result = 31 * result + Boolean.hashCode(scopePolicy15);
+        result = 31 * result + Boolean.hashCode(mustSupportInteractiveChallenge);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/UsernameToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/UsernameToken.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/UsernameToken.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/UsernameToken.java Thu Feb  2 10:58:51 2017
@@ -78,6 +78,41 @@ public class UsernameToken extends Abstr
     public QName getName() {
         return getVersion().getSPConstants().getUsernameToken();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof UsernameToken)) {
+            return false;
+        }
+        
+        UsernameToken that = (UsernameToken)object;
+        if (passwordType != that.passwordType || usernameTokenType != that.usernameTokenType) {
+            return false;
+        }
+        if (created != that.created || nonce != that.nonce) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        if (passwordType != null) {
+            result = 31 * result + passwordType.hashCode();
+        }
+        if (usernameTokenType != null) {
+            result = 31 * result + usernameTokenType.hashCode();
+        }
+        result = 31 * result + Boolean.hashCode(created);
+        result = 31 * result + Boolean.hashCode(nonce);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     protected AbstractSecurityAssertion cloneAssertion(Policy nestedPolicy) {

Modified: webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Wss10.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Wss10.java?rev=1781368&r1=1781367&r2=1781368&view=diff
==============================================================================
--- webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Wss10.java (original)
+++ webservices/wss4j/trunk/policy/src/main/java/org/apache/wss4j/policy/model/Wss10.java Thu Feb  2 10:58:51 2017
@@ -54,6 +54,37 @@ public class Wss10 extends AbstractSecur
     public QName getName() {
         return getVersion().getSPConstants().getWss10();
     }
+    
+    @Override
+    public boolean equals(Object object) {
+        if (object == this) {
+            return true;
+        }
+        if (!(object instanceof Wss10)) {
+            return false;
+        }
+        
+        Wss10 that = (Wss10)object;
+        if (mustSupportRefKeyIdentifier != that.mustSupportRefKeyIdentifier
+            || mustSupportRefIssuerSerial != that.mustSupportRefIssuerSerial
+            || mustSupportRefExternalURI != that.mustSupportRefExternalURI
+            || mustSupportRefEmbeddedToken != that.mustSupportRefEmbeddedToken) {
+            return false;
+        }
+        
+        return super.equals(object);
+    }
+    
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Boolean.hashCode(mustSupportRefKeyIdentifier);
+        result = 31 * result + Boolean.hashCode(mustSupportRefIssuerSerial);
+        result = 31 * result + Boolean.hashCode(mustSupportRefExternalURI);
+        result = 31 * result + Boolean.hashCode(mustSupportRefEmbeddedToken);
+        
+        return 31 * result + super.hashCode();
+    }
 
     @Override
     public PolicyComponent normalize() {