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 2011/08/19 17:52:47 UTC
svn commit: r1159670 - in /webservices/wss4j/trunk/src:
main/java/org/apache/ws/security/message/token/
test/java/org/apache/ws/security/message/token/
Author: coheigea
Date: Fri Aug 19 15:52:47 2011
New Revision: 1159670
URL: http://svn.apache.org/viewvc?rev=1159670&view=rev
Log:
[WSS-307] - Added equals/hashcode for remaining types.
- Patch applied thanks!
- I removed the "id" checking, as we only care about a logical comparison.
Added:
webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/DerivedKeyTokenTest.java
Modified:
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/DOMX509IssuerSerial.java
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/DerivedKeyToken.java
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/Reference.java
webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/SecurityTokenReference.java
webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/ReferenceTest.java
Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/DOMX509IssuerSerial.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/DOMX509IssuerSerial.java?rev=1159670&r1=1159669&r2=1159670&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/DOMX509IssuerSerial.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/DOMX509IssuerSerial.java Fri Aug 19 15:52:47 2011
@@ -55,7 +55,12 @@ public final class DOMX509IssuerSerial {
element, WSConstants.X509_SERIAL_NUMBER_LN, WSConstants.SIG_NS
);
String serialNumberStr = getChildText(serialNumberElement);
- serialNumber = new BigInteger(serialNumberStr);
+ if (serialNumberStr != null) {
+ serialNumber = new BigInteger(serialNumberStr);
+ } else {
+ serialNumber = null;
+ }
+
}
/**
@@ -126,6 +131,9 @@ public final class DOMX509IssuerSerial {
private String getChildText(Node parentNode) {
+ if (parentNode == null) {
+ return null;
+ }
Node node = parentNode.getFirstChild();
StringBuilder buffer = new StringBuilder();
while (node != null) {
Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/DerivedKeyToken.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/DerivedKeyToken.java?rev=1159670&r1=1159669&r2=1159670&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/DerivedKeyToken.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/DerivedKeyToken.java Fri Aug 19 15:52:47 2011
@@ -557,5 +557,104 @@ public class DerivedKeyToken {
);
}
}
-
+
+ @Override
+ public int hashCode() {
+ int result = 17;
+ String algorithm = getAlgorithm();
+ if (algorithm != null) {
+ result = 31 * result + algorithm.hashCode();
+ }
+ try {
+ SecurityTokenReference tokenReference = getSecurityTokenReference();
+ if (tokenReference != null) {
+ result = 31 * result + tokenReference.hashCode();
+ }
+ } catch (WSSecurityException e) {
+ log.error(e);
+ }
+
+ Map<String, String> properties = getProperties();
+ if (properties != null) {
+ result = 31 * result + properties.hashCode();
+ }
+ int generation = getGeneration();
+ if (generation != -1) {
+ result = 31 * result + generation;
+ }
+ int offset = getOffset();
+ if (offset != -1) {
+ result = 31 * result + offset;
+ }
+ int length = getLength();
+ if (length != -1) {
+ result = 31 * result + length;
+ }
+ String label = getLabel();
+ if (label != null) {
+ result = 31 * result + label.hashCode();
+ }
+ String nonce = getNonce();
+ if (nonce != null) {
+ result = 31 * result + nonce.hashCode();
+ }
+
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (!(object instanceof DerivedKeyToken)) {
+ return false;
+ }
+ DerivedKeyToken token = (DerivedKeyToken)object;
+ if (!compare(getAlgorithm(), token.getAlgorithm())) {
+ return false;
+ }
+ try {
+ if (!getSecurityTokenReference().equals(token.getSecurityTokenReference())) {
+ return false;
+ }
+ } catch (WSSecurityException e) {
+ log.error(e);
+ return false;
+ }
+ if (!compare(getProperties(), token.getProperties())) {
+ return false;
+ }
+ if (getGeneration() != token.getGeneration()) {
+ return false;
+ }
+ if (getOffset() != token.getOffset()) {
+ return false;
+ }
+ if (getLength() != token.getLength()) {
+ return false;
+ }
+ if (!compare(getLabel(), token.getLabel())) {
+ return false;
+ }
+ if (!compare(getNonce(), token.getNonce())) {
+ return false;
+ }
+ return true;
+ }
+
+ private boolean compare(String item1, String item2) {
+ if (item1 == null && item2 != null) {
+ return false;
+ } else if (item1 != null && !item1.equals(item2)) {
+ return false;
+ }
+ return true;
+ }
+
+ private boolean compare(Map<String, String> item1, Map<String, String> item2) {
+ if (item1 == null && item2 != null) {
+ return false;
+ } else if (item1 != null && !item1.equals(item2)) {
+ return false;
+ }
+ return true;
+ }
}
Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/Reference.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/Reference.java?rev=1159670&r1=1159669&r2=1159670&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/Reference.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/Reference.java Fri Aug 19 15:52:47 2011
@@ -19,6 +19,8 @@
package org.apache.ws.security.message.token;
+import javax.xml.namespace.QName;
+
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.WSSecurityException;
import org.apache.ws.security.util.DOM2Writer;
@@ -27,8 +29,6 @@ import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-import javax.xml.namespace.QName;
-
/**
* Reference.
*
@@ -135,4 +135,42 @@ public class Reference {
public String toString() {
return DOM2Writer.nodeToString((Node)element);
}
+
+ @Override
+ public int hashCode() {
+ int result = 17;
+ String uri = getURI();
+ if (uri != null) {
+ result = 31 * result + uri.hashCode();
+ }
+ String valueType = getValueType();
+ if (valueType != null) {
+ result = 31 * result + valueType.hashCode();
+ }
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (!(object instanceof Reference)) {
+ return false;
+ }
+ Reference reference = (Reference)object;
+ if (!compare(getURI(), reference.getURI())) {
+ return false;
+ }
+ if (!compare(getValueType(), reference.getValueType())) {
+ return false;
+ }
+ return true;
+ }
+
+ private boolean compare(String item1, String item2) {
+ if (item1 == null && item2 != null) {
+ return false;
+ } else if (item1 != null && !item1.equals(item2)) {
+ return false;
+ }
+ return true;
+ }
}
Modified: webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/SecurityTokenReference.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/SecurityTokenReference.java?rev=1159670&r1=1159669&r2=1159670&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/SecurityTokenReference.java (original)
+++ webservices/wss4j/trunk/src/main/java/org/apache/ws/security/message/token/SecurityTokenReference.java Fri Aug 19 15:52:47 2011
@@ -40,8 +40,10 @@ import javax.xml.namespace.QName;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
+import java.math.BigInteger;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
+import java.util.Arrays;
/**
* Security Token Reference.
@@ -848,4 +850,117 @@ public class SecurityTokenReference {
}
}
}
+
+ @Override
+ public int hashCode() {
+ int result = 17;
+ try {
+ Reference reference = getReference();
+ if (reference != null) {
+ result = 31 * result + reference.hashCode();
+ }
+ } catch (WSSecurityException e) {
+ log.error(e);
+ }
+ String keyIdentifierEncodingType = getKeyIdentifierEncodingType();
+ if (keyIdentifierEncodingType != null) {
+ result = 31 * result + keyIdentifierEncodingType.hashCode();
+ }
+ String keyIdentifierValueType = getKeyIdentifierValueType();
+ if (keyIdentifierValueType != null) {
+ result = 31 * result + keyIdentifierValueType.hashCode();
+ }
+ String keyIdentifierValue = getKeyIdentifierValue();
+ if (keyIdentifierValue != null) {
+ result = 31 * result + keyIdentifierValue.hashCode();
+ }
+ String tokenType = getTokenType();
+ if (tokenType != null) {
+ result = 31 * result + tokenType.hashCode();
+ }
+ byte[] skiBytes = getSKIBytes();
+ if (skiBytes != null) {
+ result = 31 * result + Arrays.hashCode(skiBytes);
+ }
+ String issuer = null;
+ BigInteger serialNumber = null;
+
+ try {
+ issuer = getIssuerSerial().getIssuer();
+ serialNumber = getIssuerSerial().getSerialNumber();
+ } catch (WSSecurityException e) {
+ log.error(e);
+ }
+ if (issuer != null) {
+ result = 31 * result + issuer.hashCode();
+ }
+ if (serialNumber != null) {
+ result = 31 * result + serialNumber.hashCode();
+ }
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (!(object instanceof SecurityTokenReference)) {
+ return false;
+ }
+ SecurityTokenReference tokenReference = (SecurityTokenReference)object;
+ try {
+ if (!getReference().equals(tokenReference.getReference())) {
+ return false;
+ }
+ } catch (WSSecurityException e) {
+ log.error(e);
+ return false;
+ }
+ if (!compare(getKeyIdentifierEncodingType(), tokenReference.getKeyIdentifierEncodingType())) {
+ return false;
+ }
+ if (!compare(getKeyIdentifierValueType(), tokenReference.getKeyIdentifierValueType())) {
+ return false;
+ }
+ if (!compare(getKeyIdentifierValue(), tokenReference.getKeyIdentifierValue())) {
+ return false;
+ }
+ if (!compare(getTokenType(), tokenReference.getTokenType())) {
+ return false;
+ }
+ if (!Arrays.equals(getSKIBytes(), tokenReference.getSKIBytes())) {
+ return false;
+ }
+ try {
+ if (getIssuerSerial() != null && tokenReference.getIssuerSerial() != null) {
+ if (!compare(getIssuerSerial().getIssuer(), tokenReference.getIssuerSerial().getIssuer())) {
+ return false;
+ }
+ if (!compare(getIssuerSerial().getSerialNumber(), tokenReference.getIssuerSerial().getSerialNumber())) {
+ return false;
+ }
+ }
+ } catch (WSSecurityException e) {
+ log.error(e);
+ return false;
+ }
+
+ return true;
+ }
+
+ private boolean compare(String item1, String item2) {
+ if (item1 == null && item2 != null) {
+ return false;
+ } else if (item1 != null && !item1.equals(item2)) {
+ return false;
+ }
+ return true;
+ }
+
+ private boolean compare(BigInteger item1, BigInteger item2) {
+ if (item1 == null && item2 != null) {
+ return false;
+ } else if (item1 != null && !item1.equals(item2)) {
+ return false;
+ }
+ return true;
+ }
}
Added: webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/DerivedKeyTokenTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/DerivedKeyTokenTest.java?rev=1159670&view=auto
==============================================================================
--- webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/DerivedKeyTokenTest.java (added)
+++ webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/DerivedKeyTokenTest.java Fri Aug 19 15:52:47 2011
@@ -0,0 +1,95 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ws.security.message.token;
+
+/**
+ * Tests for DerivedKeyToken type.
+ */
+
+public class DerivedKeyTokenTest extends org.junit.Assert {
+
+ private static final String TEST_TOKEN_TEMPLATE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ + "<wsc:DerivedKeyToken "
+ + "xmlns:wsc=\"http://schemas.xmlsoap.org/ws/2005/02/sc\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" wsu:Id=\"_3\" >"
+ + "<wsse:SecurityTokenReference "
+ + "xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" wsu:Id=\"_5002\">"
+ + "<wsse:Reference ValueType=\"http://schemas.xmlsoap.org/ws/2005/02/sc/sct\" URI=\"PLACEHOLDER1\" />"
+ + "</wsse:SecurityTokenReference>"
+ + "<wsc:Offset>0</wsc:Offset>"
+ + "<wsc:Length>PLACEHOLDER2</wsc:Length>"
+ + "<wsc:Nonce>Kq/1ptgjZpX2g1q6MiJcSfTX</wsc:Nonce>"
+ + "<wsc:Label>WS-SecureConversationWS-SecureConversation</wsc:Label>"
+ + "<wsc:Generation>3</wsc:Generation>"
+ + "<wsc:Properties>"
+ + "<wsc:Name>.../derivedKeySource</wsc:Name>"
+ + "</wsc:Properties>"
+ + "</wsc:DerivedKeyToken>";
+
+ private DerivedKeyToken token;
+ private DerivedKeyToken tokenEqual;
+ private DerivedKeyToken tokenNotEqual;
+
+
+ public DerivedKeyTokenTest() throws Exception {
+ token = new DerivedKeyToken(createReferenceDocument(
+ TEST_TOKEN_TEMPLATE,
+ "#uuid-4063ae9b-fe66-4e09-a5fb-8fda903f34d8", "16")
+ .getDocumentElement());
+ tokenEqual = new DerivedKeyToken(createReferenceDocument(
+ TEST_TOKEN_TEMPLATE,
+ "#uuid-4063ae9b-fe66-4e09-a5fb-8fda903f34d8", "16")
+ .getDocumentElement());
+ tokenNotEqual = new DerivedKeyToken(createReferenceDocument(
+ TEST_TOKEN_TEMPLATE,
+ "#uuid-5603ae9b-fe66-4e09-a5fb-8fda903f34d8", "88")
+ .getDocumentElement());
+ }
+
+ @org.junit.Test
+ public void testEquals() throws Exception{
+ assertTrue(token.equals(tokenEqual));
+ assertTrue(tokenEqual.equals(token));
+ assertFalse(token.equals(tokenNotEqual));
+ assertFalse(token.equals(null));
+ assertFalse(token.equals("string"));
+ }
+
+ @org.junit.Test
+ public void testHashcode() throws Exception{
+ assertEquals(token.hashCode(), tokenEqual.hashCode());
+ assertTrue(!(token.hashCode() == tokenNotEqual.hashCode()));
+ }
+
+ private static org.w3c.dom.Document createReferenceDocument(
+ final String template, final String placeholder1,
+ final String placeholder2)
+ throws javax.xml.parsers.ParserConfigurationException,
+ org.xml.sax.SAXException, java.io.IOException {
+ final java.io.InputStream in = new java.io.ByteArrayInputStream(
+ template.replaceFirst("PLACEHOLDER1", placeholder1)
+ .replaceFirst("PLACEHOLDER2", placeholder2).getBytes());
+ final javax.xml.parsers.DocumentBuilderFactory factory = javax.xml.parsers.DocumentBuilderFactory
+ .newInstance();
+ factory.setNamespaceAware(true);
+ final javax.xml.parsers.DocumentBuilder builder = factory
+ .newDocumentBuilder();
+ return builder.parse(in);
+ }
+}
Modified: webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/ReferenceTest.java
URL: http://svn.apache.org/viewvc/webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/ReferenceTest.java?rev=1159670&r1=1159669&r2=1159670&view=diff
==============================================================================
--- webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/ReferenceTest.java (original)
+++ webservices/wss4j/trunk/src/test/java/org/apache/ws/security/message/token/ReferenceTest.java Fri Aug 19 15:52:47 2011
@@ -46,7 +46,17 @@ public class ReferenceTest extends org.j
+ "/>"
;
-
+ private Reference ref;
+ private Reference refEqual;
+ private Reference refNotEqual;
+
+ public ReferenceTest() throws Exception{
+ ref = new Reference (createReferenceDocument(TEST_REFERENCE_TEMPLATE, "test", "equalscheck").getDocumentElement());
+ refEqual = new Reference (createReferenceDocument(TEST_REFERENCE_TEMPLATE, "test", "equalscheck").getDocumentElement());
+ refNotEqual = new Reference (createReferenceDocument(TEST_REFERENCE_TEMPLATE, "test", "unequalscheck").getDocumentElement());
+ }
+
+
@org.junit.Test
public void
testConstructor() throws Exception {
@@ -103,6 +113,21 @@ public class ReferenceTest extends org.j
assertEquals(ref.getURI(), "bar");
}
+ @org.junit.Test
+ public void testEquals() throws Exception{
+ assertTrue(ref.equals(refEqual));
+ assertTrue(refEqual.equals(ref));
+ assertFalse(ref.equals(refNotEqual));
+ assertFalse(ref.equals(null));
+ assertFalse(ref.equals("string"));
+ }
+
+ @org.junit.Test
+ public void testHashcode() throws Exception{
+ assertEquals(ref.hashCode(), refEqual.hashCode());
+ assertTrue(!(ref.hashCode() == refNotEqual.hashCode()));
+ }
+
private static org.w3c.dom.Document
createReferenceDocument(
final String template,