diff --git a/cas-client-core/pom.xml b/cas-client-core/pom.xml
index 08a42b1..f82ac35 100644
--- a/cas-client-core/pom.xml
+++ b/cas-client-core/pom.xml
@@ -34,12 +34,6 @@
2.6
-
- joda-time
- joda-time
- 2.7
-
-
xml-security
xmlsec
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java b/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java
index e7cc375..95eff51 100644
--- a/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java
@@ -22,9 +22,6 @@ import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -33,11 +30,6 @@ import org.jasig.cas.client.ssl.HttpURLConnectionFactory;
import org.jasig.cas.client.ssl.HttpsURLConnectionFactory;
import org.jasig.cas.client.validation.ProxyList;
import org.jasig.cas.client.validation.ProxyListEditor;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.joda.time.LocalDateTime;
-import org.joda.time.format.DateTimeFormatter;
-import org.joda.time.format.ISODateTimeFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,24 +56,10 @@ public final class CommonUtils {
private static final HttpURLConnectionFactory DEFAULT_URL_CONNECTION_FACTORY = new HttpsURLConnectionFactory();
- private static final DateTimeFormatter ISO_FORMAT = ISODateTimeFormat.dateTimeNoMillis();
-
private CommonUtils() {
// nothing to do
}
- public static String formatForUtcTime(final Date date) {
- return ISO_FORMAT.print(new DateTime(date).withZone(DateTimeZone.UTC));
- }
-
-
- public static Date parseUtcDate(final String date) {
- if (isEmpty(date)) {
- return null;
- }
- return ISODateTimeFormat.dateTimeParser().parseDateTime(date).toDate();
- }
-
/**
* Check whether the object is null or not. If it is, throw an exception and
* display the message.
diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java
index 479a3f3..1b28ad5 100644
--- a/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java
+++ b/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java
@@ -21,7 +21,6 @@ package org.jasig.cas.client.util;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Date;
import junit.framework.TestCase;
import org.jasig.cas.client.PublicTestHttpServer;
@@ -194,9 +193,4 @@ public final class CommonUtilsTests extends TestCase {
public void testUrlEncode() {
assertEquals("this+is+a+very+special+parameter+with+%3D%25%2F", CommonUtils.urlEncode("this is a very special parameter with =%/"));
}
-
- public void testParseUtcDate() {
- final Date expected = new Date(1424437961025L);
- assertEquals(expected, CommonUtils.parseUtcDate("2015-02-20T08:12:41.025-0500"));
- }
}
diff --git a/cas-client-support-saml/pom.xml b/cas-client-support-saml/pom.xml
index 60c49f7..b63ae11 100644
--- a/cas-client-support-saml/pom.xml
+++ b/cas-client-support-saml/pom.xml
@@ -16,7 +16,13 @@
cas-client-core
${project.version}
+
+ joda-time
+ joda-time
+ 2.7
+
+
org.jasig.cas.client
cas-client-core
diff --git a/cas-client-support-saml/src/main/java/org/jasig/cas/client/util/SamlUtils.java b/cas-client-support-saml/src/main/java/org/jasig/cas/client/util/SamlUtils.java
new file mode 100644
index 0000000..8e74a71
--- /dev/null
+++ b/cas-client-support-saml/src/main/java/org/jasig/cas/client/util/SamlUtils.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to Jasig under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work
+ * for additional information regarding copyright ownership.
+ * Jasig 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 the following location:
+ * *
+ * 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.jasig.cas.client.util;
+
+import java.util.Date;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.joda.time.format.DateTimeFormatter;
+import org.joda.time.format.ISODateTimeFormat;
+
+/**
+ * SAML utility class.
+ *
+ * @author Marvin S. Addison
+ * @since 3.4
+ */
+public final class SamlUtils {
+
+ private static final DateTimeFormatter ISO_FORMAT = ISODateTimeFormat.dateTimeNoMillis();
+
+ private SamlUtils() {
+ // nothing to do
+ }
+
+ public static String formatForUtcTime(final Date date) {
+ return ISO_FORMAT.print(new DateTime(date).withZone(DateTimeZone.UTC));
+ }
+
+ public static Date parseUtcDate(final String date) {
+ if (CommonUtils.isEmpty(date)) {
+ return null;
+ }
+ return ISODateTimeFormat.dateTimeParser().parseDateTime(date).toDate();
+ }
+}
diff --git a/cas-client-support-saml/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidator.java b/cas-client-support-saml/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidator.java
index f1e5f3a..4a59081 100644
--- a/cas-client-support-saml/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidator.java
+++ b/cas-client-support-saml/src/main/java/org/jasig/cas/client/validation/Saml11TicketValidator.java
@@ -120,9 +120,9 @@ public final class Saml11TicketValidator extends AbstractUrlBasedTicketValidator
protected Assertion parseResponseFromServer(final String response) throws TicketValidationException {
try {
final Document document = XmlUtils.newDocument(response);
- final Date assertionValidityStart = CommonUtils.parseUtcDate(
+ final Date assertionValidityStart = SamlUtils.parseUtcDate(
XPATH_ASSERTION_DATE_START.evaluateAsString(document));
- final Date assertionValidityEnd = CommonUtils.parseUtcDate(
+ final Date assertionValidityEnd = SamlUtils.parseUtcDate(
XPATH_ASSERTION_DATE_END.evaluateAsString(document));
if (!isValidAssertion(assertionValidityStart, assertionValidityEnd)) {
throw new TicketValidationException("Invalid SAML assertion");
@@ -191,7 +191,7 @@ public final class Saml11TicketValidator extends AbstractUrlBasedTicketValidator
final String request = String.format(
SAML_REQUEST_TEMPLATE,
generateId(),
- CommonUtils.formatForUtcTime(new Date()),
+ SamlUtils.formatForUtcTime(new Date()),
ticket);
HttpURLConnection conn = null;
try {
diff --git a/cas-client-support-saml/src/test/java/org/jasig/cas/client/util/SamlUtilsTest.java b/cas-client-support-saml/src/test/java/org/jasig/cas/client/util/SamlUtilsTest.java
new file mode 100644
index 0000000..bd42201
--- /dev/null
+++ b/cas-client-support-saml/src/test/java/org/jasig/cas/client/util/SamlUtilsTest.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to Jasig under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work
+ * for additional information regarding copyright ownership.
+ * Jasig 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 the following location:
+ * *
+ * 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.jasig.cas.client.util;
+
+import java.util.Date;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Test cases for {@link SamlUtils}.
+ *
+ * @author Marvin S. Addison
+ */
+public class SamlUtilsTest {
+
+ @Test
+ public void testParseUtcDate() {
+ final Date expected = new Date(1424437961025L);
+ assertEquals(expected, SamlUtils.parseUtcDate("2015-02-20T08:12:41.025-0500"));
+ }
+}
\ No newline at end of file
diff --git a/cas-client-support-saml/src/test/java/org/jasig/cas/client/validation/Saml11TicketValidatorTests.java b/cas-client-support-saml/src/test/java/org/jasig/cas/client/validation/Saml11TicketValidatorTests.java
index 7738966..8d90800 100644
--- a/cas-client-support-saml/src/test/java/org/jasig/cas/client/validation/Saml11TicketValidatorTests.java
+++ b/cas-client-support-saml/src/test/java/org/jasig/cas/client/validation/Saml11TicketValidatorTests.java
@@ -24,7 +24,7 @@ import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.Date;
import org.jasig.cas.client.PublicTestHttpServer;
-import org.jasig.cas.client.util.CommonUtils;
+import org.jasig.cas.client.util.SamlUtils;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.Interval;
@@ -83,13 +83,13 @@ public final class Saml11TicketValidatorTests extends AbstractTicketValidatorTes
final Interval range = currentTimeRangeInterval();
final Date now = new Date();
final String RESPONSE = "testtestPrincipalurn:oasis:names:tc:SAML:1.0:cm:artifact";
server.content = RESPONSE.getBytes(server.encoding);
try {
@@ -107,21 +107,21 @@ public final class Saml11TicketValidatorTests extends AbstractTicketValidatorTes
final String response = ""
+ ""
+ ""
+ ""
+ ""
+ "https://example.com/test-client/secure/"
+ ""
+ ""
+ "testPrincipal"
+ "urn:oasis:names:tc:SAML:1.0:cm:artifact"