diff --git a/README.md b/README.md
index ebdfe9f..3a39f8a 100644
--- a/README.md
+++ b/README.md
@@ -342,7 +342,15 @@ Validates the tickets using the CAS 2.0 protocol. If you provide either the `acc
| `hostnameVerifier` | Hostname verifier class name, used when making back-channel calls | No
#### org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter
-Validates the tickets using the CAS 3.0 protocol. If you provide either the `acceptAnyProxy` or the `allowedProxyChains` parameters, a `Cas30ProxyTicketValidator` will be constructed. Otherwise a general `Cas30ServiceTicketValidator` will be constructed that does not accept proxy tickets. Supports all configurations that are available for `Cas20ProxyReceivingTicketValidationFilter`.
+Validates the tickets using the CAS 3.0 protocol. If you provide either the `acceptAnyProxy` or the `allowedProxyChains` parameters,
+a `Cas30ProxyTicketValidator` will be constructed. Otherwise a general `Cas30ServiceTicketValidator` will be constructed that does not
+accept proxy tickets. Supports all configurations that are available for `Cas20ProxyReceivingTicketValidationFilter`.
+
+#### org.jasig.cas.client.validation.json.Cas30JsonProxyReceivingTicketValidationFilter
+Indentical to `Cas30ProxyReceivingTicketValidationFilter`, yet the filter is able to accept validation responses from CAS
+that are formatted as JSON per guidelines laid out by the CAS protocol.
+See the [protocol documentation](https://apereo.github.io/cas/5.1.x/protocol/CAS-Protocol-Specification.html)
+for more info.
##### Proxy Authentication vs. Distributed Caching
The client has support for clustering and distributing the TGT state among application nodes that are behind a load balancer. In order to do so, the parameter needs to be defined as such for the filter.
diff --git a/cas-client-core/pom.xml b/cas-client-core/pom.xml
index ed838b2..8cd1d2f 100644
--- a/cas-client-core/pom.xml
+++ b/cas-client-core/pom.xml
@@ -35,6 +35,11 @@
true
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
org.springframework
spring-beans
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java
index c97cf21..7bdf0d7 100644
--- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java
@@ -50,9 +50,10 @@ public class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator {
return "proxyValidate";
}
+ @Override
protected void customParseResponse(final String response, final Assertion assertion)
throws TicketValidationException {
- final List proxies = XmlUtils.getTextForElements(response, "proxy");
+ final List proxies = parseProxiesFromResponse(response);
if (proxies == null) {
throw new InvalidProxyChainTicketValidationException(
@@ -61,7 +62,7 @@ public class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator {
);
}
// this means there was nothing in the proxy chain, which is okay
- if ((this.allowEmptyProxyChain && proxies.isEmpty())) {
+ if (this.allowEmptyProxyChain && proxies.isEmpty()) {
logger.debug("Found an empty proxy chain, permitted by client configuration");
return;
}
@@ -85,6 +86,10 @@ public class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator {
throw new InvalidProxyChainTicketValidationException("Invalid proxy chain: " + proxies.toString());
}
+ protected List parseProxiesFromResponse(final String response) {
+ return XmlUtils.getTextForElements(response, "proxy");
+ }
+
public final void setAcceptAnyProxy(final boolean acceptAnyProxy) {
this.acceptAnyProxy = acceptAnyProxy;
}
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java
index 9ecc5b8..fa20991 100644
--- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java
@@ -77,15 +77,15 @@ public class Cas20ServiceTicketValidator extends AbstractCasProtocolUrlBasedTick
return "serviceValidate";
}
- protected final Assertion parseResponseFromServer(final String response) throws TicketValidationException {
- final String error = XmlUtils.getTextForElement(response, "authenticationFailure");
+ protected Assertion parseResponseFromServer(final String response) throws TicketValidationException {
+ final String error = parseAuthenticationFailureFromResponse(response);
if (CommonUtils.isNotBlank(error)) {
throw new TicketValidationException(error);
}
- final String principal = XmlUtils.getTextForElement(response, "user");
- final String proxyGrantingTicketIou = XmlUtils.getTextForElement(response, "proxyGrantingTicket");
+ final String principal = parsePrincipalFromResponse(response);
+ final String proxyGrantingTicketIou = parseProxyGrantingTicketFromResponse(response);
final String proxyGrantingTicket;
if (CommonUtils.isBlank(proxyGrantingTicketIou) || this.proxyGrantingTicketStorage == null) {
@@ -113,6 +113,18 @@ public class Cas20ServiceTicketValidator extends AbstractCasProtocolUrlBasedTick
return assertion;
}
+ protected String parseProxyGrantingTicketFromResponse(final String response) {
+ return XmlUtils.getTextForElement(response, "proxyGrantingTicket");
+ }
+
+ protected String parsePrincipalFromResponse(final String response) {
+ return XmlUtils.getTextForElement(response, "user");
+ }
+
+ protected String parseAuthenticationFailureFromResponse(final String response) {
+ return XmlUtils.getTextForElement(response, "authenticationFailure");
+ }
+
/**
* Default attribute parsing of attributes that look like the following:
* <cas:attributes>
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas30ServiceTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas30ServiceTicketValidator.java
index cb155a7..236ea6e 100644
--- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas30ServiceTicketValidator.java
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas30ServiceTicketValidator.java
@@ -26,7 +26,7 @@ package org.jasig.cas.client.validation;
*/
public class Cas30ServiceTicketValidator extends Cas20ServiceTicketValidator {
- public Cas30ServiceTicketValidator(String casServerUrlPrefix) {
+ public Cas30ServiceTicketValidator(final String casServerUrlPrefix) {
super(casServerUrlPrefix);
}
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyReceivingTicketValidationFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyReceivingTicketValidationFilter.java
new file mode 100644
index 0000000..76c9d7e
--- /dev/null
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyReceivingTicketValidationFilter.java
@@ -0,0 +1,35 @@
+/*
+ * 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.validation.json;
+
+import org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter;
+
+/**
+ * Creates either a Cas30JsonServiceTicketValidator to validate tickets.
+ *
+ * @author Misagh Moayyed
+ */
+public class Cas30JsonProxyReceivingTicketValidationFilter extends Cas30ProxyReceivingTicketValidationFilter {
+
+ public Cas30JsonProxyReceivingTicketValidationFilter() {
+ super();
+ this.defaultServiceTicketValidatorClass = Cas30JsonServiceTicketValidator.class;
+ this.defaultProxyTicketValidatorClass = Cas30JsonProxyTicketValidator.class;
+ }
+}
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyTicketValidator.java
new file mode 100644
index 0000000..0cd5ec0
--- /dev/null
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonProxyTicketValidator.java
@@ -0,0 +1,43 @@
+package org.jasig.cas.client.validation.json;
+
+import org.jasig.cas.client.validation.Assertion;
+import org.jasig.cas.client.validation.Cas30ProxyTicketValidator;
+import org.jasig.cas.client.validation.TicketValidationException;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * This is {@link Cas30JsonProxyTicketValidator} that attempts to parse the CAS validation response
+ * as JSON. Very similar to {@link Cas30JsonServiceTicketValidator}, it also honors proxies as the name suggests.
+ *
+ * @author Misagh Moayyed
+ */
+public class Cas30JsonProxyTicketValidator extends Cas30ProxyTicketValidator {
+ public Cas30JsonProxyTicketValidator(final String casServerUrlPrefix) {
+ super(casServerUrlPrefix);
+ setCustomParameters(Collections.singletonMap("format", "JSON"));
+ }
+
+ @Override
+ protected Assertion parseResponseFromServer(final String response) throws TicketValidationException {
+ try {
+ final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response);
+ return json.getAssertion(getProxyGrantingTicketStorage(), getProxyRetriever());
+ } catch (final Exception e) {
+ logger.warn("Unable parse the JSON response");
+ return super.parseResponseFromServer(response);
+ }
+ }
+
+ @Override
+ protected List parseProxiesFromResponse(final String response) {
+ try {
+ final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response);
+ return json.getServiceResponse().getAuthenticationSuccess().getProxies();
+ } catch (final Exception e) {
+ logger.warn("Unable to locate proxies from the JSON response", e);
+ return super.parseProxiesFromResponse(response);
+ }
+ }
+}
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonServiceTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonServiceTicketValidator.java
new file mode 100644
index 0000000..9fee4b3
--- /dev/null
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/Cas30JsonServiceTicketValidator.java
@@ -0,0 +1,44 @@
+package org.jasig.cas.client.validation.json;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import org.jasig.cas.client.validation.Assertion;
+import org.jasig.cas.client.validation.Cas30ServiceTicketValidator;
+import org.jasig.cas.client.validation.TicketValidationException;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * This is {@link Cas30JsonServiceTicketValidator} that attempts to parse the CAS validation response
+ * as JSON. If the response is not formatted as JSON, it shall fallback to the XML default syntax.
+ * The JSON response provides advantages in terms of naming and parsing CAS attributes that have special
+ * names that otherwise may not be encoded as XML, such as the invalid {@code value}
+ *
+ * @author Misagh Moayyed
+ */
+public class Cas30JsonServiceTicketValidator extends Cas30ServiceTicketValidator {
+
+ public Cas30JsonServiceTicketValidator(final String casServerUrlPrefix) {
+ super(casServerUrlPrefix);
+ setCustomParameters(Collections.singletonMap("format", "JSON"));
+ }
+
+ @Override
+ protected Assertion parseResponseFromServer(final String response) throws TicketValidationException {
+ try {
+ final TicketValidationJsonResponse json = new JsonValidationResponseParser().parse(response);
+ return json.getAssertion(getProxyGrantingTicketStorage(), getProxyRetriever());
+ } catch (final JsonProcessingException e) {
+ logger.warn("Unable parse the JSON response. Falling back to XML", e);
+ return super.parseResponseFromServer(response);
+ } catch (final IOException e) {
+ throw new TicketValidationException(e.getMessage(), e);
+ }
+ }
+
+ @Override
+ protected Map extractCustomAttributes(final String xml) {
+ return Collections.emptyMap();
+ }
+}
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/JsonValidationResponseParser.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/JsonValidationResponseParser.java
new file mode 100644
index 0000000..c4b58fa
--- /dev/null
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/JsonValidationResponseParser.java
@@ -0,0 +1,48 @@
+package org.jasig.cas.client.validation.json;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.jasig.cas.client.util.CommonUtils;
+import org.jasig.cas.client.validation.TicketValidationException;
+
+import java.io.IOException;
+
+/**
+ * This is {@link JsonValidationResponseParser}.
+ *
+ * @author Misagh Moayyed
+ */
+final class JsonValidationResponseParser {
+ private final ObjectMapper objectMapper;
+
+ public JsonValidationResponseParser() {
+ this.objectMapper = new ObjectMapper();
+ this.objectMapper.findAndRegisterModules();
+ }
+
+ public TicketValidationJsonResponse parse(final String response) throws TicketValidationException, IOException {
+ if (CommonUtils.isBlank(response)) {
+ throw new TicketValidationException("Invalid JSON response; The response is empty");
+ }
+
+ final TicketValidationJsonResponse json = this.objectMapper.readValue(response, TicketValidationJsonResponse.class);
+
+ final TicketValidationJsonResponse.CasServiceResponseAuthentication serviceResponse = json.getServiceResponse();
+ if (serviceResponse.getAuthenticationFailure() != null
+ && serviceResponse.getAuthenticationSuccess() != null) {
+ throw new TicketValidationException("Invalid JSON response; It indicates both a success "
+ + "and a failure event, which is indicative of a server error. The actual response is " + response);
+ }
+
+ if (serviceResponse.getAuthenticationFailure() != null) {
+ final String error = json.getServiceResponse().getAuthenticationFailure().getCode()
+ + " - " + serviceResponse.getAuthenticationFailure().getDescription();
+ throw new TicketValidationException(error);
+ }
+
+ final String principal = json.getServiceResponse().getAuthenticationSuccess().getUser();
+ if (CommonUtils.isEmpty(principal)) {
+ throw new TicketValidationException("No principal was found in the response from the CAS server.");
+ }
+ return json;
+ }
+}
diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/TicketValidationJsonResponse.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/TicketValidationJsonResponse.java
new file mode 100644
index 0000000..84db6e2
--- /dev/null
+++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/json/TicketValidationJsonResponse.java
@@ -0,0 +1,140 @@
+package org.jasig.cas.client.validation.json;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.jasig.cas.client.authentication.AttributePrincipal;
+import org.jasig.cas.client.authentication.AttributePrincipalImpl;
+import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage;
+import org.jasig.cas.client.proxy.ProxyRetriever;
+import org.jasig.cas.client.util.CommonUtils;
+import org.jasig.cas.client.validation.Assertion;
+import org.jasig.cas.client.validation.AssertionImpl;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This is {@link TicketValidationJsonResponse}.
+ *
+ * @author Misagh Moayyed
+ */
+final class TicketValidationJsonResponse {
+ private final CasServiceResponseAuthentication serviceResponse;
+
+ @JsonCreator
+ public TicketValidationJsonResponse(@JsonProperty("serviceResponse")
+ final CasServiceResponseAuthentication serviceResponse) {
+ this.serviceResponse = serviceResponse;
+ }
+
+ public CasServiceResponseAuthentication getServiceResponse() {
+ return serviceResponse;
+ }
+
+ Assertion getAssertion(final ProxyGrantingTicketStorage proxyGrantingTicketStorage,
+ final ProxyRetriever proxyRetriever) {
+ final String proxyGrantingTicketIou = getServiceResponse().getAuthenticationSuccess().getProxyGrantingTicket();
+ final String proxyGrantingTicket;
+ if (CommonUtils.isBlank(proxyGrantingTicketIou) || proxyGrantingTicketStorage == null) {
+ proxyGrantingTicket = null;
+ } else {
+ proxyGrantingTicket = proxyGrantingTicketStorage.retrieve(proxyGrantingTicketIou);
+ }
+
+ final Assertion assertion;
+ final Map attributes = getServiceResponse().getAuthenticationSuccess().getAttributes();
+ final String principal = getServiceResponse().getAuthenticationSuccess().getUser();
+ if (CommonUtils.isNotBlank(proxyGrantingTicket)) {
+ final AttributePrincipal attributePrincipal = new AttributePrincipalImpl(principal, attributes,
+ proxyGrantingTicket, proxyRetriever);
+ assertion = new AssertionImpl(attributePrincipal);
+ } else {
+ assertion = new AssertionImpl(new AttributePrincipalImpl(principal, attributes));
+ }
+ return assertion;
+ }
+
+ static class CasServiceResponseAuthentication {
+ private final CasServiceResponseAuthenticationFailure authenticationFailure;
+ private final CasServiceResponseAuthenticationSuccess authenticationSuccess;
+
+ @JsonCreator
+ public CasServiceResponseAuthentication(@JsonProperty("authenticationFailure")
+ final CasServiceResponseAuthenticationFailure authenticationFailure,
+ @JsonProperty("authenticationSuccess")
+ final CasServiceResponseAuthenticationSuccess authenticationSuccess) {
+ this.authenticationFailure = authenticationFailure;
+ this.authenticationSuccess = authenticationSuccess;
+ }
+
+ public CasServiceResponseAuthenticationFailure getAuthenticationFailure() {
+ return this.authenticationFailure;
+ }
+
+ public CasServiceResponseAuthenticationSuccess getAuthenticationSuccess() {
+ return this.authenticationSuccess;
+ }
+ }
+
+ static class CasServiceResponseAuthenticationSuccess {
+ private String user;
+ private String proxyGrantingTicket;
+ private List proxies;
+ private Map attributes;
+
+ public String getUser() {
+ return this.user;
+ }
+
+ public void setUser(final String user) {
+ this.user = user;
+ }
+
+ public String getProxyGrantingTicket() {
+ return this.proxyGrantingTicket;
+ }
+
+ public void setProxyGrantingTicket(final String proxyGrantingTicket) {
+ this.proxyGrantingTicket = proxyGrantingTicket;
+ }
+
+ public List getProxies() {
+ return this.proxies;
+ }
+
+ public void setProxies(final List proxies) {
+ this.proxies = proxies;
+ }
+
+ public Map getAttributes() {
+ return this.attributes;
+ }
+
+ public void setAttributes(final Map attributes) {
+ this.attributes = attributes;
+ }
+ }
+
+ static class CasServiceResponseAuthenticationFailure {
+ private String code;
+ private String description;
+
+ public String getCode() {
+ return this.code;
+ }
+
+ public void setCode(final String code) {
+ this.code = code;
+ }
+
+ public String getDescription() {
+ return this.description;
+ }
+
+ public void setDescription(final String description) {
+ this.description = description;
+ }
+ }
+}
+
+
diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/validation/json/Cas30JsonServiceTicketValidatorTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/validation/json/Cas30JsonServiceTicketValidatorTests.java
new file mode 100644
index 0000000..1163331
--- /dev/null
+++ b/cas-client-core/src/test/java/org/jasig/cas/client/validation/json/Cas30JsonServiceTicketValidatorTests.java
@@ -0,0 +1,90 @@
+package org.jasig.cas.client.validation.json;
+
+import org.jasig.cas.client.PublicTestHttpServer;
+import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage;
+import org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl;
+import org.jasig.cas.client.proxy.ProxyRetriever;
+import org.jasig.cas.client.validation.AbstractTicketValidatorTests;
+import org.jasig.cas.client.validation.Assertion;
+import org.jasig.cas.client.validation.TicketValidationException;
+import org.junit.Before;
+import org.junit.Test;
+import junit.framework.Assert;
+
+public class Cas30JsonServiceTicketValidatorTests extends AbstractTicketValidatorTests {
+ private static final PublicTestHttpServer server = PublicTestHttpServer.instance(8088);
+ private ProxyGrantingTicketStorage proxyGrantingTicketStorage;
+
+ private Cas30JsonServiceTicketValidator ticketValidator;
+
+ @Before
+ public void setUp() throws Exception {
+ this.proxyGrantingTicketStorage = getProxyGrantingTicketStorage();
+ this.ticketValidator = new Cas30JsonServiceTicketValidator(CONST_CAS_SERVER_URL_PREFIX + "8088");
+ this.ticketValidator.setProxyCallbackUrl("test");
+ this.ticketValidator.setProxyGrantingTicketStorage(getProxyGrantingTicketStorage());
+ this.ticketValidator.setProxyRetriever(getProxyRetriever());
+ this.ticketValidator.setRenew(true);
+ }
+
+ private ProxyGrantingTicketStorage getProxyGrantingTicketStorage() {
+ return new ProxyGrantingTicketStorageImpl();
+ }
+
+ private ProxyRetriever getProxyRetriever() {
+ return new ProxyRetriever() {
+
+ /** Unique Id for serialization. */
+ private static final long serialVersionUID = 1L;
+
+ public String getProxyTicketIdFor(final String proxyGrantingTicketId, final String targetService) {
+ return "test";
+ }
+ };
+ }
+
+ @Test
+ public void testSuccessfulJsonResponse() throws Exception {
+ final String RESPONSE = "{ " +
+ "\"serviceResponse\" : { " +
+ "\"authenticationSuccess\" : { " +
+ "\"user\" : \"casuser\", " +
+ "\"proxyGrantingTicket\" : \"PGTIOU-84678-8a9d\" ," +
+ "\"attributes\" : { " +
+ "\"cn\" : [ \"Name\" ] " +
+ '}' +
+ '}' +
+ '}' +
+ '}';
+
+ server.content = RESPONSE.getBytes(server.encoding);
+ final Assertion assertion = ticketValidator.validate("test", "test");
+ Assert.assertEquals(assertion.getPrincipal().getName(), "casuser");
+ Assert.assertTrue(assertion.getPrincipal().getAttributes().containsKey("cn"));
+ }
+
+ @Test(expected = TicketValidationException.class)
+ public void testFailingJsonResponse() throws Exception {
+ final String RESPONSE = "{ " +
+ "\"serviceResponse\" : { " +
+ "\"authenticationFailure\" : { " +
+ "\"code\" : \"INVALID_TICKET\", " +
+ "\"description\" : \"Description\" " +
+ '}' +
+ '}' +
+ '}';
+
+ server.content = RESPONSE.getBytes(server.encoding);
+ ticketValidator.validate("test", "test");
+
+ }
+
+
+ @Test
+ public void testSuccessfulXmlResponseWithJson() throws Exception {
+ final String RESPONSE = ""
+ + "testPGTIOU";
+ server.content = RESPONSE.getBytes(server.encoding);
+ ticketValidator.validate("test", "test");
+ }
+}
diff --git a/cas-client-integration-atlassian/pom.xml b/cas-client-integration-atlassian/pom.xml
index 9c1c7b0..c29a0ab 100644
--- a/cas-client-integration-atlassian/pom.xml
+++ b/cas-client-integration-atlassian/pom.xml
@@ -1,4 +1,5 @@
-
+
org.jasig.cas.client
3.5.0-SNAPSHOT
@@ -10,46 +11,103 @@
Jasig CAS Client for Java - Atlassian Integration
+
atlassian-seraph
com.atlassian.seraph
- 2.5.1
+ 3.0.0
provided
jar
-
- commons-lang
- commons-lang
-
-
- log4j
- log4j
-
-
- javax.servlet
- servlet-api
-
-
- opensymphony
- oscore
-
-
- com.atlassian.security
- atlassian-secure-random
-
-
- com.atlassian.security
- atlassian-cookie-tools
-
-
- true
-
+
+ javax.transaction
+ jta
+
+
+ commons-lang
+ commons-lang
+
+
+ log4j
+ log4j
+
+
+ javax.servlet
+ servlet-api
+
+
+ opensymphony
+ oscore
+
+
+ com.atlassian.security
+ atlassian-secure-random
+
+
+ com.atlassian.security
+ atlassian-cookie-tools
+
+
+ commons-logging
+ commons-logging
+
+
+ true
+
org.springframework
spring-context
+
+ atlassian-user
+ com.atlassian.user
+ 1.26
+ provided
+ jar
+ true
+
+
+ opensymphony
+ oscore
+
+
+ opensymphony
+ propertyset
+
+
+ commons-logging
+ commons-logging
+
+
+ javax.transaction
+ jta
+
+
+ ofbcore
+ ofbcore-jira-entity
+
+
+ ofbcore
+ ofbcore-jira-share
+
+
+ log4j
+ log4j
+
+
+
+ commons-logging
+ commons-logging
+
+
+ dom4j
+ dom4j
+
+
+
+
atlassian-osuser
com.atlassian.osuser
@@ -58,1304 +116,1310 @@
jar
true
-
- opensymphony
- oscore
-
-
- opensymphony
- propertyset
-
-
- commons-logging
- commons-logging
-
+
+ opensymphony
+ oscore
+
+
+ opensymphony
+ propertyset
+
+
+ commons-logging
+ commons-logging
+
-
- ofbcore
- ofbcore-jira-entity
-
-
- ofbcore
- ofbcore-jira-share
-
-
- log4j
- log4j
-
-
-
- dom4j
- dom4j
-
+
+ ofbcore
+ ofbcore-jira-entity
+
+
+ ofbcore
+ ofbcore-jira-share
+
+
+ log4j
+ log4j
+
+
+ javax.transaction
+ jta
+
+
+ dom4j
+ dom4j
+
-
com.atlassian.confluence
confluence
- 3.5
+ 4.0
provided
-
- opensymphony
- webwork
-
-
- com.atlassian.crowd
- embedded-crowd-api
-
-
- com.atlassian.crowd
- crowd-integration-api
-
-
- com.atlassian.crowd
- crowd-integration-seraph22
-
-
- com.atlassian.crowd
- embedded-crowd-spi
-
-
- com.atlassian.crowd
- crowd-password-encoders
-
-
- com.atlassian.crowd
- atlassian-embedded-crowd-atlassian-user
-
-
- com.atlassian.crowd
- atlassian-embedded-crowd-hibernate2
-
-
- com.atlassian.crowd
- embedded-crowd-core
-
-
- com.atlassian.crowd
- crowd-persistence
-
-
- com.atlassian.crowd
- crowd-ldap
-
-
- org.springframework.ldap
- spring-ldap-core
-
-
- com.atlassian.confluence
- confluence-upgrade
-
-
- com.atlassian.gzipfilter
- atlassian-gzipfilter
-
-
- com.atlassian.applinks
- applinks-api
-
-
- com.atlassian.applinks
- applinks-spi
-
-
- com.atlassian.applinks
- applinks-host
-
-
- com.atlassian.util.concurrent
- atlassian-util-concurrent
-
-
- com.atlassian.modzdetector
- modz-detector
-
-
- com.atlassian.mail
- atlassian-mail
-
-
- com.atlassian.velocity
- atlassian-velocity
-
-
- com.atlassian.core
- atlassian-core
-
-
- com.atlassian.config
- atlassian-config
-
-
- com.atlassian.spring
- atlassian-spring
-
-
- com.atlassian.confluence
- confluence-bucket
-
-
- com.atlassian.xwork
- atlassian-xwork-10
-
-
- com.atlassian.xwork
- atlassian-xwork-core
-
-
- com.atlassian.profiling
- atlassian-profiling
-
-
- com.atlassian.trackback
- atlassian-trackback
-
-
- com.atlassian.extras
- atlassian-extras
-
-
- com.atlassian.johnson
- atlassian-johnson
-
-
- com.atlassian.plugins
- atlassian-plugins-core
-
-
- com.atlassian.plugins
- atlassian-plugins-servlet
-
-
- com.atlassian.plugins
- atlassian-plugins-webfragment
-
-
- com.atlassian.plugins
- atlassian-plugins-webresource
-
-
- com.atlassian.plugins
- atlassian-plugins-osgi
-
-
- com.atlassian.plugins
- atlassian-plugins-spring
-
-
- com.atlassian.bandana
- atlassian-bandana
-
-
- com.atlassian.user
- atlassian-user
-
-
- com.atlassian.renderer
- atlassian-renderer
-
-
- com.atlassian.bonnie
- atlassian-bonnie
-
-
- com.atlassian.jdk.utilities
- atlassian-jdk-utilities
-
-
- joda-time
- joda-time
-
-
- com.atlassian.seraph
- atlassian-seraph
-
-
- com.atlassian.security.auth.trustedapps
- atlassian-trusted-apps-core
-
-
- com.atlassian.security.auth.trustedapps
- atlassian-trusted-apps-seraph-integration
-
-
- javax.activation
- activation
-
-
- log4j
- log4j
-
-
- org.slf4j
- slf4j-api
-
-
- org.slf4j
- slf4j-log4j12
-
-
- org.slf4j
- jul-to-slf4j
-
-
- commons-lang
- commons-lang
-
-
- commons-logging
- commons-logging
-
-
- commons-io
- commons-io
-
-
- commons-beanutils
- commons-beanutils
-
-
- commons-fileupload
- commons-fileupload
-
-
- org.directwebremoting
- dwr
-
-
- hibernate
- hibernate
-
-
- cglib
- cglib
-
-
- dom4j
- dom4j
-
-
- odmg
- odmg
-
-
- c3p0
- c3p0
-
-
- javax.transaction
- jta
-
-
- javax.media
- jai-core
-
-
- com.sun
- jai_codec
-
-
- opensymphony
- webwork
-
-
- opensymphony
- xwork
-
-
- ognl
- ognl
-
-
- opensymphony
- oscore
-
-
- oscache
- oscache
-
-
- osuser
- osuser
-
-
- opensymphony
- propertyset
-
-
- org.apache.velocity
- velocity
-
-
- javax.servlet
- servlet-api
-
-
- javax.mail
- mail
-
-
- org.springframework
- spring-core
-
-
- org.springframework
- spring-web
-
-
- org.springframework
- spring-support
-
-
- org.springframework
- spring-aop
-
-
- org.springframework
- spring-hibernate2
-
-
- org.springframework
- spring-beans
-
-
- org.springframework
- spring-jdbc
-
-
- org.springframework
- spring-dao
-
-
- org.springframework
- spring-jmx
-
-
- com.atlassian.paddle
- atlassian-paddle
-
-
- org.aspectj
- aspectjweaver
-
-
- net.sf.ldaptemplate
- ldaptemplate
-
-
- opensymphony
- sitemesh
-
-
- velocity-tools
- velocity-tools
-
-
- radeox
- radeox
-
-
- org.apache.lucene
- lucene-core
-
-
- org.apache.lucene
- lucene-analyzers
-
-
- org.apache.lucene
- lucene-misc
-
-
- org.apache.lucene
- lucene-highlighter
-
-
- commons-digester
- commons-digester
-
-
- batik
- batik-all
-
-
- net.sourceforge.cssparser
- cssparser
-
-
- org.hibernate
- jtidy
-
-
- org.quartz-scheduler
- quartz
-
-
- org.hsqldb
- hsqldb
-
-
- mockobjects
- mockobjects-core
-
-
- org.mockito
- mockito-all
-
-
- org.springframework
- spring-mock
-
-
- rome
- rome
-
-
- jdom
- jdom
-
-
- commons-jrcs
- commons-jrcs
-
-
- commons-httpclient
- commons-httpclient
-
-
- xerces
- xercesImpl
-
-
- xmlrpc
- xmlrpc
-
-
- glue
- glue
-
-
- exml
- exml
-
-
- axis
- axis
-
-
- axis
- axis-jaxrpc
-
-
- axis
- axis-saaj
-
-
- commons-discovery
- commons-discovery
-
-
- commons-codec
- commons-codec
-
-
- oro
- oro
-
-
- slide
- slide
-
-
- com.thoughtworks.xstream
- xstream
-
-
- jfree
- jfreechart
-
-
- xalan
- xalan
-
-
- com.octo.captcha
- jcaptcha-all
-
-
- net.java.dev.urlrewrite
- urlrewrite
-
-
- commons-collections
- commons-collections
-
-
- javax.xml.stream
- stax-api
-
-
- org.codehaus.woodstox
- wstx-asl
-
-
- org.codehaus.xfire
- xfire-core
-
-
- org.codehaus.xfire
- xfire-aegis
-
-
- net.jcip
- jcip-annotations
-
-
- com.atlassian.cache
- atlassian-cache-api
-
-
- com.atlassian.sal
- sal-spi
-
-
- com.atlassian.sal
- sal-spring
-
-
- com.atlassian.sal
- sal-api
-
-
- com.atlassian.cache
- atlassian-cache-memory
-
-
- net.sourceforge.findbugs
- jsr305
-
-
- opensymphony
- pell-multipart
-
-
- ch.qos.logback
- logback-classic
-
+
+ opensymphony
+ webwork
+
+
+ com.atlassian.crowd
+ embedded-crowd-api
+
+
+ com.atlassian.crowd
+ crowd-integration-api
+
+
+ com.atlassian.crowd
+ crowd-integration-seraph22
+
+
+ com.atlassian.crowd
+ embedded-crowd-spi
+
+
+ com.atlassian.crowd
+ crowd-password-encoders
+
+
+ com.atlassian.crowd
+ atlassian-embedded-crowd-atlassian-user
+
+
+ com.atlassian.crowd
+ atlassian-embedded-crowd-hibernate2
+
+
+ com.atlassian.crowd
+ embedded-crowd-core
+
+
+ com.atlassian.crowd
+ crowd-persistence
+
+
+ com.atlassian.crowd
+ crowd-ldap
+
+
+ org.springframework.ldap
+ spring-ldap-core
+
+
+ com.atlassian.confluence
+ confluence-upgrade
+
+
+ com.atlassian.gzipfilter
+ atlassian-gzipfilter
+
+
+ com.atlassian.applinks
+ applinks-api
+
+
+ com.atlassian.applinks
+ applinks-spi
+
+
+ com.atlassian.applinks
+ applinks-host
+
+
+ com.atlassian.util.concurrent
+ atlassian-util-concurrent
+
+
+ com.atlassian.modzdetector
+ modz-detector
+
+
+ com.atlassian.mail
+ atlassian-mail
+
+
+ com.atlassian.velocity
+ atlassian-velocity
+
+
+ com.atlassian.core
+ atlassian-core
+
+
+ com.atlassian.config
+ atlassian-config
+
+
+ com.atlassian.spring
+ atlassian-spring
+
+
+ com.atlassian.confluence
+ confluence-bucket
+
+
+ com.atlassian.xwork
+ atlassian-xwork-10
+
+
+ com.atlassian.xwork
+ atlassian-xwork-core
+
+
+ com.atlassian.profiling
+ atlassian-profiling
+
+
+ com.atlassian.trackback
+ atlassian-trackback
+
+
+ com.atlassian.extras
+ atlassian-extras
+
+
+ com.atlassian.johnson
+ atlassian-johnson
+
+
+ com.atlassian.plugins
+ atlassian-plugins-core
+
+
+ com.atlassian.plugins
+ atlassian-plugins-servlet
+
+
+ com.atlassian.plugins
+ atlassian-plugins-webfragment
+
+
+ com.atlassian.plugins
+ atlassian-plugins-webresource
+
+
+ com.atlassian.plugins
+ atlassian-plugins-osgi
+
+
+ com.atlassian.plugins
+ atlassian-plugins-spring
+
+
+ com.atlassian.bandana
+ atlassian-bandana
+
+
+ com.atlassian.user
+ atlassian-user
+
+
+ com.atlassian.renderer
+ atlassian-renderer
+
+
+ com.atlassian.bonnie
+ atlassian-bonnie
+
+
+ com.atlassian.jdk.utilities
+ atlassian-jdk-utilities
+
+
+ joda-time
+ joda-time
+
+
+ com.atlassian.seraph
+ atlassian-seraph
+
+
+ com.atlassian.security.auth.trustedapps
+ atlassian-trusted-apps-core
+
+
+ com.atlassian.security.auth.trustedapps
+ atlassian-trusted-apps-seraph-integration
+
+
+ javax.activation
+ activation
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+ org.slf4j
+ jul-to-slf4j
+
+
+ commons-lang
+ commons-lang
+
+
+ commons-logging
+ commons-logging
+
+
+ commons-io
+ commons-io
+
+
+ commons-beanutils
+ commons-beanutils
+
+
+ commons-fileupload
+ commons-fileupload
+
+
+ org.directwebremoting
+ dwr
+
+
+ hibernate
+ hibernate
+
+
+ cglib
+ cglib
+
+
+ dom4j
+ dom4j
+
+
+ odmg
+ odmg
+
+
+ c3p0
+ c3p0
+
+
+ javax.transaction
+ jta
+
+
+ javax.media
+ jai-core
+
+
+ com.sun
+ jai_codec
+
+
+ opensymphony
+ webwork
+
+
+ opensymphony
+ xwork
+
+
+ ognl
+ ognl
+
+
+ opensymphony
+ oscore
+
+
+ oscache
+ oscache
+
+
+ osuser
+ osuser
+
+
+ opensymphony
+ propertyset
+
+
+ org.apache.velocity
+ velocity
+
+
+ javax.servlet
+ servlet-api
+
+
+ javax.mail
+ mail
+
+
+ org.springframework
+ spring-core
+
+
+ org.springframework
+ spring-web
+
+
+ org.springframework
+ spring-support
+
+
+ org.springframework
+ spring-aop
+
+
+ org.springframework
+ spring-hibernate2
+
+
+ org.springframework
+ spring-beans
+
+
+ org.springframework
+ spring-jdbc
+
+
+ org.springframework
+ spring-dao
+
+
+ org.springframework
+ spring-jmx
+
+
+ com.atlassian.paddle
+ atlassian-paddle
+
+
+ org.aspectj
+ aspectjweaver
+
+
+ net.sf.ldaptemplate
+ ldaptemplate
+
+
+ opensymphony
+ sitemesh
+
+
+ velocity-tools
+ velocity-tools
+
+
+ radeox
+ radeox
+
+
+ org.apache.lucene
+ lucene-core
+
+
+ org.apache.lucene
+ lucene-analyzers
+
+
+ org.apache.lucene
+ lucene-misc
+
+
+ org.apache.lucene
+ lucene-highlighter
+
+
+ commons-digester
+ commons-digester
+
+
+ batik
+ batik-all
+
+
+ net.sourceforge.cssparser
+ cssparser
+
+
+ org.hibernate
+ jtidy
+
+
+ org.quartz-scheduler
+ quartz
+
+
+ org.hsqldb
+ hsqldb
+
+
+ mockobjects
+ mockobjects-core
+
+
+ org.mockito
+ mockito-all
+
+
+ org.springframework
+ spring-mock
+
+
+ rome
+ rome
+
+
+ jdom
+ jdom
+
+
+ commons-jrcs
+ commons-jrcs
+
+
+ commons-httpclient
+ commons-httpclient
+
+
+ xerces
+ xercesImpl
+
+
+ xmlrpc
+ xmlrpc
+
+
+ glue
+ glue
+
+
+ exml
+ exml
+
+
+ axis
+ axis
+
+
+ axis
+ axis-jaxrpc
+
+
+ axis
+ axis-saaj
+
+
+ commons-discovery
+ commons-discovery
+
+
+ commons-codec
+ commons-codec
+
+
+ oro
+ oro
+
+
+ slide
+ slide
+
+
+ com.thoughtworks.xstream
+ xstream
+
+
+ jfree
+ jfreechart
+
+
+ xalan
+ xalan
+
+
+ com.octo.captcha
+ jcaptcha-all
+
+
+ net.java.dev.urlrewrite
+ urlrewrite
+
+
+ commons-collections
+ commons-collections
+
+
+ javax.xml.stream
+ stax-api
+
+
+ org.codehaus.woodstox
+ wstx-asl
+
+
+ org.codehaus.xfire
+ xfire-core
+
+
+ org.codehaus.xfire
+ xfire-aegis
+
+
+ net.jcip
+ jcip-annotations
+
+
+ com.atlassian.cache
+ atlassian-cache-api
+
+
+ com.atlassian.sal
+ sal-spi
+
+
+ com.atlassian.sal
+ sal-spring
+
+
+ com.atlassian.sal
+ sal-api
+
+
+ com.atlassian.cache
+ atlassian-cache-memory
+
+
+ net.sourceforge.findbugs
+ jsr305
+
+
+ opensymphony
+ pell-multipart
+
+
+ ch.qos.logback
+ logback-classic
+
com.atlassian.jira
jira-core
- 4.4
+ 4.4.5
provided
jar
-
- com.atlassian.jira
- jira-api
-
-
- com.atlassian.multitenant
- multitenant-core
-
-
- com.atlassian.multitenant
- multitenant-utils
-
-
- com.atlassian.crowd
- atlassian-embedded-crowd-ofbiz
-
-
- com.atlassian.crowd
- embedded-crowd-core
-
-
- com.atlassian.crowd
- embedded-crowd-spi
-
-
- com.atlassian.crowd
- crowd-api
-
-
- com.atlassian.crowd
- crowd-core
-
-
- com.atlassian.crowd
- crowd-integration-api
-
-
- com.atlassian.crowd
- crowd-integration-client-rest
-
-
- com.atlassian.crowd
- crowd-persistence
-
-
- com.atlassian.crowd
- crowd-events
-
-
- com.atlassian.crowd
- crowd-ldap
-
-
- com.atlassian.crowd
- crowd-remote
-
-
- com.atlassian.crowd
- crowd-server-common
-
-
- com.atlassian.crowd
- crowd-password-encoders
-
-
- com.atlassian.security
- atlassian-password-encoder
-
-
- org.springframework.security
- spring-security-core
-
-
- org.springframework
- spring-core
-
-
- org.springframework
- spring-beans
-
-
- org.springframework.ldap
- spring-ldap-core
-
-
- org.springframework
- spring-tx
-
-
- com.atlassian.crowd
- crowd-integration-client
-
-
- wsdl4j
- wsdl4j
-
-
- org.codehaus.xfire
- xfire-core
-
-
- org.codehaus.xfire
- xfire-aegis
-
-
- sal-spi
- com.atlassian.sal
-
-
- com.atlassian.sal
- sal-core
-
-
- com.atlassian.gadgets
- atlassian-gadgets-api
-
-
- com.atlassian.gadgets
- atlassian-gadgets-spi
-
-
- com.atlassian.oauth
- atlassian-oauth-api
-
-
- com.atlassian.p4package
- atlassian-p4package
-
-
- com.atlassian.extras
- atlassian-extras
-
-
- com.atlassian.cache
- atlassian-cache-api
-
-
- com.atlassian.cache
- atlassian-cache-memory
-
-
- joda-time
- joda-time
-
-
- com.sun
- jai_core
-
-
- com.sun
- jai_codec
-
-
- commons-lang
- commons-lang
-
-
- commons-collections
- commons-collections
-
-
- commons-io
- commons-io
-
-
- com.atlassian.activeobjects
- activeobjects-spi
-
-
- log4j
- log4j
-
-
- dom4j
- dom4j
-
-
- oro
- oro
-
-
- com.atlassian.util.concurrent
- atlassian-util-concurrent
-
-
- com.atlassian.profiling
- atlassian-profiling
-
-
- org.slf4j
- slf4j-api
-
-
- org.slf4j
- slf4j-log4j12
-
-
- org.slf4j
- jul-to-slf4j
-
-
- org.slf4j
- jcl-over-slf4j
-
-
- com.atlassian.jdk.utilities
- atlassian-jdk-utilities
-
-
- com.atlassian.scheduler
- atlassian-scheduler
-
-
- com.atlassian.johnson
- atlassian-johnson
-
-
- com.atlassian.plugins
- atlassian-plugins-core
-
-
- com.atlassian.plugins
- atlassian-plugins-servlet
-
-
- com.atlassian.plugins
- atlassian-plugins-webfragment
-
-
- com.atlassian.plugins
- atlassian-plugins-webresource
-
-
- com.atlassian.plugins
- atlassian-plugins-osgi
-
-
- com.atlassian.plugins
- atlassian-plugins-osgi-events
-
-
- com.atlassian.seraph
- atlassian-seraph
-
-
- com.atlassian.security
- atlassian-secure-random
-
-
- com.atlassian.security.auth.trustedapps
- atlassian-trusted-apps-core
-
-
- com.atlassian.security.auth.trustedapps
- atlassian-trusted-apps-seraph-integration
-
-
- bouncycastle
- bcprov-jdk15
-
-
- com.atlassian.renderer
- atlassian-renderer
-
-
- com.atlassian.gzipfilter
- atlassian-gzipfilter
-
-
- com.atlassian.event
- atlassian-event
-
-
- opensymphony
- oscore
-
-
- opensymphony
- sitemesh
-
-
- commons-digester
- commons-digester
-
-
- commons-beanutils
- commons-beanutils
-
-
- commons-configuration
- commons-configuration
-
-
- org.apache.lucene
- lucene-analyzers
-
-
- velocity
- velocity
-
-
- org.apache.velocity
- velocity-tools
-
-
- javax.activation
- activation
-
-
- javax.mail
- mail
-
-
- glue
- glue
-
-
- bsf
- bsf
-
-
- bsh
- bsh
-
-
- com.atlassian.ofbiz
- entityengine-share
-
-
- com.atlassian.ofbiz
- entityengine
-
-
- csv
- csv
-
-
- quartz
- quartz
-
-
- picocontainer
- picocontainer
-
-
- jzlib
- jzlib
-
-
- jsch
- jsch
-
-
- com.octo.captcha
- jcaptcha
-
-
- com.octo.captcha
- jcaptcha-api
-
-
- com.jhlabs
- filters
-
-
- javacvs
- javacvs
-
-
- statcvs
- statcvs
-
-
- commons-dbcp
- commons-dbcp
-
-
- commons-pool
- commons-pool
-
-
- hsqldb
- hsqldb
-
-
- jndi
- jndi
-
-
- jta
- jta
-
-
- ots-jts
- ots-jts
-
-
- jotm
- jotm
-
-
- jotm
- jotm-jrmp_stubs
-
-
- jotm
- jotm-iiop_stubs
-
-
- jotm
- jonas_timer
-
-
- jotm
- objectweb-datasource
-
-
- carol
- carol
-
-
- carol
- carol-properties
-
-
- xapool
- xapool
-
-
- xml-apis
- xml-apis
-
-
- saxon
- saxon-noaelfred
-
-
- commons-jelly
- commons-jelly
-
-
- commons-jelly
- commons-jelly-tags-junit
-
-
- commons-jelly
- commons-jelly-tags-util
-
-
- commons-jelly
- commons-jelly-tags-email
-
-
- commons-jelly
- commons-jelly-tags-log
-
-
- commons-jelly
- commons-jelly-tags-http
-
-
- commons-jelly
- commons-jelly-tags-soap
-
-
- commons-jelly
- commons-jelly-tags-sql
-
-
- commons-jelly
- commons-jelly-tags-regexp
-
-
- commons-jexl
- commons-jexl
-
-
- commons-httpclient
- commons-httpclient
-
-
- commons-codec
- commons-codec
-
-
- xmlrpc
- xmlrpc
-
-
- axis
- axis
-
-
- axis
- axis-jaxrpc
-
-
- axis
- axis-saaj
-
-
- commons-discovery
- commons-discovery
-
-
- xerces
- xercesImpl
-
-
- xalan
- xalan
-
-
- xml-security
- xmlsec
-
-
- datafile
- datafile
-
-
- xpp3
- xpp3
-
-
- com.thoughtworks.xstream
- xstream
-
-
- jfree
- jfreechart
-
-
- jfree
- jcommon
-
-
- net.java.dev.urlrewrite
- urlrewrite
-
-
- radeox
- radeox
-
-
- jtidy
- jtidy
-
-
- jdom
- jdom
-
-
- net.sf.ehcache
- ehcache
-
-
- org.codehaus.woodstox
- wstx-asl
-
-
- javax.servlet
- servlet-api
-
-
- javax.servlet
- jsp-api
-
-
- com.atlassian.modzdetector
- modz-detector
-
-
- org.antlr
- antlr-runtime
-
-
- commons-jrcs
- commons-jrcs
-
-
- com.google.collections
- google-collections
-
-
- com.atlassian.jira
- jira-lang-ca_ES
-
-
- com.atlassian.jira
- jira-lang-cs_CZ
-
-
- com.atlassian.jira
- jira-lang-da_DK
-
-
- com.atlassian.jira
- jira-lang-de_CH
-
-
- com.atlassian.jira
- jira-lang-de_DE
-
-
- com.atlassian.jira
- jira-lang-en_UK
-
-
- com.atlassian.jira
- jira-lang-en_US
-
-
- com.atlassian.jira
- jira-lang-es_ES
-
-
- com.atlassian.jira
- jira-lang-fr_FR
-
-
- com.atlassian.jira
- jira-lang-hu_HU
-
-
- com.atlassian.jira
- jira-lang-it_IT
-
-
- com.atlassian.jira
- jira-lang-ja_JP
-
-
- com.atlassian.jira
- jira-lang-nl_BE
-
-
- com.atlassian.jira
- jira-lang-no_NO
-
-
- com.atlassian.jira
- jira-lang-pl_PL
-
-
- com.atlassian.jira
- jira-lang-pt_BR
-
-
- com.atlassian.jira
- jira-lang-ru_RU
-
-
- com.atlassian.jira
- jira-lang-sk_SK
-
-
- com.atlassian.jira
- jira-lang-tr_TR
-
-
- com.atlassian.jira
- jira-lang-zh_CN
-
-
- com.atlassian.jira
- jira-lang-zh_TW
-
-
- com.google.code.findbugs
- jsr305
-
-
- com.google.code.findbugs
- annotations
-
-
- cglib
- cglib-nodep
-
-
- com.atlassian.sal
- sal-api
-
-
- com.atlassian.applinks
- applinks-api
-
-
- com.atlassian.applinks
- applinks-spi
-
-
- com.atlassian.applinks
- applinks-host
-
-
- rhino
- js
-
+
+ commons-logging
+ commons-logging
+
+
+ com.atlassian.jira
+ jira-api
+
+
+ com.atlassian.multitenant
+ multitenant-core
+
+
+ com.atlassian.multitenant
+ multitenant-utils
+
+
+ com.atlassian.crowd
+ atlassian-embedded-crowd-ofbiz
+
+
+ com.atlassian.crowd
+ embedded-crowd-core
+
+
+ com.atlassian.crowd
+ embedded-crowd-spi
+
+
+ com.atlassian.crowd
+ crowd-api
+
+
+ com.atlassian.crowd
+ crowd-core
+
+
+ com.atlassian.crowd
+ crowd-integration-api
+
+
+ com.atlassian.crowd
+ crowd-integration-client-rest
+
+
+ com.atlassian.crowd
+ crowd-persistence
+
+
+ com.atlassian.crowd
+ crowd-events
+
+
+ com.atlassian.crowd
+ crowd-ldap
+
+
+ com.atlassian.crowd
+ crowd-remote
+
+
+ com.atlassian.crowd
+ crowd-server-common
+
+
+ com.atlassian.crowd
+ crowd-password-encoders
+
+
+ com.atlassian.security
+ atlassian-password-encoder
+
+
+ org.springframework.security
+ spring-security-core
+
+
+ org.springframework
+ spring-core
+
+
+ org.springframework
+ spring-beans
+
+
+ org.springframework.ldap
+ spring-ldap-core
+
+
+ org.springframework
+ spring-tx
+
+
+ com.atlassian.crowd
+ crowd-integration-client
+
+
+ wsdl4j
+ wsdl4j
+
+
+ org.codehaus.xfire
+ xfire-core
+
+
+ org.codehaus.xfire
+ xfire-aegis
+
+
+ sal-spi
+ com.atlassian.sal
+
+
+ com.atlassian.sal
+ sal-core
+
+
+ com.atlassian.gadgets
+ atlassian-gadgets-api
+
+
+ com.atlassian.gadgets
+ atlassian-gadgets-spi
+
+
+ com.atlassian.oauth
+ atlassian-oauth-api
+
+
+ com.atlassian.p4package
+ atlassian-p4package
+
+
+ com.atlassian.extras
+ atlassian-extras
+
+
+ com.atlassian.cache
+ atlassian-cache-api
+
+
+ com.atlassian.cache
+ atlassian-cache-memory
+
+
+ joda-time
+ joda-time
+
+
+ com.sun
+ jai_core
+
+
+ com.sun
+ jai_codec
+
+
+ commons-lang
+ commons-lang
+
+
+ commons-collections
+ commons-collections
+
+
+ commons-io
+ commons-io
+
+
+ com.atlassian.activeobjects
+ activeobjects-spi
+
+
+ log4j
+ log4j
+
+
+ dom4j
+ dom4j
+
+
+ oro
+ oro
+
+
+ com.atlassian.util.concurrent
+ atlassian-util-concurrent
+
+
+ com.atlassian.profiling
+ atlassian-profiling
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+ org.slf4j
+ jul-to-slf4j
+
+
+ org.slf4j
+ jcl-over-slf4j
+
+
+ com.atlassian.jdk.utilities
+ atlassian-jdk-utilities
+
+
+ com.atlassian.scheduler
+ atlassian-scheduler
+
+
+ com.atlassian.johnson
+ atlassian-johnson
+
+
+ com.atlassian.plugins
+ atlassian-plugins-core
+
+
+ com.atlassian.plugins
+ atlassian-plugins-servlet
+
+
+ com.atlassian.plugins
+ atlassian-plugins-webfragment
+
+
+ com.atlassian.plugins
+ atlassian-plugins-webresource
+
+
+ com.atlassian.plugins
+ atlassian-plugins-osgi
+
+
+ com.atlassian.plugins
+ atlassian-plugins-osgi-events
+
+
+ com.atlassian.seraph
+ atlassian-seraph
+
+
+ com.atlassian.security
+ atlassian-secure-random
+
+
+ com.atlassian.security.auth.trustedapps
+ atlassian-trusted-apps-core
+
+
+ com.atlassian.security.auth.trustedapps
+ atlassian-trusted-apps-seraph-integration
+
+
+ bouncycastle
+ bcprov-jdk15
+
+
+ com.atlassian.renderer
+ atlassian-renderer
+
+
+ com.atlassian.gzipfilter
+ atlassian-gzipfilter
+
+
+ com.atlassian.event
+ atlassian-event
+
+
+ opensymphony
+ oscore
+
+
+ opensymphony
+ sitemesh
+
+
+ commons-digester
+ commons-digester
+
+
+ commons-beanutils
+ commons-beanutils
+
+
+ commons-configuration
+ commons-configuration
+
+
+ org.apache.lucene
+ lucene-analyzers
+
+
+ velocity
+ velocity
+
+
+ org.apache.velocity
+ velocity-tools
+
+
+ javax.activation
+ activation
+
+
+ javax.mail
+ mail
+
+
+ glue
+ glue
+
+
+ bsf
+ bsf
+
+
+ bsh
+ bsh
+
+
+ com.atlassian.ofbiz
+ entityengine-share
+
+
+ com.atlassian.ofbiz
+ entityengine
+
+
+ csv
+ csv
+
+
+ quartz
+ quartz
+
+
+ picocontainer
+ picocontainer
+
+
+ jzlib
+ jzlib
+
+
+ jsch
+ jsch
+
+
+ com.octo.captcha
+ jcaptcha
+
+
+ com.octo.captcha
+ jcaptcha-api
+
+
+ com.jhlabs
+ filters
+
+
+ javacvs
+ javacvs
+
+
+ statcvs
+ statcvs
+
+
+ commons-dbcp
+ commons-dbcp
+
+
+ commons-pool
+ commons-pool
+
+
+ hsqldb
+ hsqldb
+
+
+ jndi
+ jndi
+
+
+ jta
+ jta
+
+
+ ots-jts
+ ots-jts
+
+
+ jotm
+ jotm
+
+
+ jotm
+ jotm-jrmp_stubs
+
+
+ jotm
+ jotm-iiop_stubs
+
+
+ jotm
+ jonas_timer
+
+
+ jotm
+ objectweb-datasource
+
+
+ carol
+ carol
+
+
+ carol
+ carol-properties
+
+
+ xapool
+ xapool
+
+
+ xml-apis
+ xml-apis
+
+
+ saxon
+ saxon-noaelfred
+
+
+ commons-jelly
+ commons-jelly
+
+
+ commons-jelly
+ commons-jelly-tags-junit
+
+
+ commons-jelly
+ commons-jelly-tags-util
+
+
+ commons-jelly
+ commons-jelly-tags-email
+
+
+ commons-jelly
+ commons-jelly-tags-log
+
+
+ commons-jelly
+ commons-jelly-tags-http
+
+
+ commons-jelly
+ commons-jelly-tags-soap
+
+
+ commons-jelly
+ commons-jelly-tags-sql
+
+
+ commons-jelly
+ commons-jelly-tags-regexp
+
+
+ commons-jexl
+ commons-jexl
+
+
+ commons-httpclient
+ commons-httpclient
+
+
+ commons-codec
+ commons-codec
+
+
+ xmlrpc
+ xmlrpc
+
+
+ axis
+ axis
+
+
+ axis
+ axis-jaxrpc
+
+
+ axis
+ axis-saaj
+
+
+ commons-discovery
+ commons-discovery
+
+
+ xerces
+ xercesImpl
+
+
+ xalan
+ xalan
+
+
+ xml-security
+ xmlsec
+
+
+ datafile
+ datafile
+
+
+ xpp3
+ xpp3
+
+
+ com.thoughtworks.xstream
+ xstream
+
+
+ jfree
+ jfreechart
+
+
+ jfree
+ jcommon
+
+
+ net.java.dev.urlrewrite
+ urlrewrite
+
+
+ radeox
+ radeox
+
+
+ jtidy
+ jtidy
+
+
+ jdom
+ jdom
+
+
+ net.sf.ehcache
+ ehcache
+
+
+ org.codehaus.woodstox
+ wstx-asl
+
+
+ javax.servlet
+ servlet-api
+
+
+ javax.servlet
+ jsp-api
+
+
+ com.atlassian.modzdetector
+ modz-detector
+
+
+ org.antlr
+ antlr-runtime
+
+
+ commons-jrcs
+ commons-jrcs
+
+
+ com.google.collections
+ google-collections
+
+
+ com.atlassian.jira
+ jira-lang-ca_ES
+
+
+ com.atlassian.jira
+ jira-lang-cs_CZ
+
+
+ com.atlassian.jira
+ jira-lang-da_DK
+
+
+ com.atlassian.jira
+ jira-lang-de_CH
+
+
+ com.atlassian.jira
+ jira-lang-de_DE
+
+
+ com.atlassian.jira
+ jira-lang-en_UK
+
+
+ com.atlassian.jira
+ jira-lang-en_US
+
+
+ com.atlassian.jira
+ jira-lang-es_ES
+
+
+ com.atlassian.jira
+ jira-lang-fr_FR
+
+
+ com.atlassian.jira
+ jira-lang-hu_HU
+
+
+ com.atlassian.jira
+ jira-lang-it_IT
+
+
+ com.atlassian.jira
+ jira-lang-ja_JP
+
+
+ com.atlassian.jira
+ jira-lang-nl_BE
+
+
+ com.atlassian.jira
+ jira-lang-no_NO
+
+
+ com.atlassian.jira
+ jira-lang-pl_PL
+
+
+ com.atlassian.jira
+ jira-lang-pt_BR
+
+
+ com.atlassian.jira
+ jira-lang-ru_RU
+
+
+ com.atlassian.jira
+ jira-lang-sk_SK
+
+
+ com.atlassian.jira
+ jira-lang-tr_TR
+
+
+ com.atlassian.jira
+ jira-lang-zh_CN
+
+
+ com.atlassian.jira
+ jira-lang-zh_TW
+
+
+ com.google.code.findbugs
+ jsr305
+
+
+ com.google.code.findbugs
+ annotations
+
+
+ cglib
+ cglib-nodep
+
+
+ com.atlassian.sal
+ sal-api
+
+
+ com.atlassian.applinks
+ applinks-api
+
+
+ com.atlassian.applinks
+ applinks-spi
+
+
+ com.atlassian.applinks
+ applinks-host
+
+
+ rhino
+ js
+
@@ -1371,7 +1435,13 @@
atlassian
Atlassian Repository
- https://maven.atlassian.com/repository/public
+ https://maven.atlassian.com/content/repositories/atlassian-public/
+
+ atlassian-3rdparty
+ Atlassian 3rd Party Repository
+ https://maven.atlassian.com/3rdparty/
+
+
diff --git a/pom.xml b/pom.xml
index 46ca4ae..4d9df01 100644
--- a/pom.xml
+++ b/pom.xml
@@ -127,6 +127,7 @@
+
com.mycila.maven-license-plugin
maven-license-plugin
@@ -206,6 +207,11 @@
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
@@ -261,5 +267,6 @@
2.2.0
3.0.2
1.7.1
+ 2.8.8.1