You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2019/04/24 12:31:58 UTC

[sling-org-apache-sling-committer-cli] 29/44: SLING-8337 - Create sub-command to manage the Jira update when promoting a release

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch feature/SLING-8337
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-committer-cli.git

commit 0ec8b05aed0c59bd821bb94195e407ba67d1b29f
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Fri Apr 19 17:40:12 2019 +0300

    SLING-8337 - Create sub-command to manage the Jira update when promoting a release
    
    Initial work on read-only Jira release command.
---
 .../org/apache/sling/cli/impl/jira/Version.java    |    6 +
 .../apache/sling/cli/impl/jira/VersionFinder.java  |  134 +-
 .../cli/impl/release/PrepareVoteEmailCommand.java  |    2 +-
 .../org/apache/sling/cli/impl/release/Release.java |   50 +
 .../sling/cli/impl/release/UpdateJiraCommand.java  |   65 +
 .../sling/cli/impl/jira/VersionFinderTest.java     |   93 +
 .../apache/sling/cli/impl/release/ReleaseTest.java |   15 +
 src/test/resources/README.md                       |   11 +
 .../jira/relatedIssueCounts/12329667.json          |    6 +
 .../jira/relatedIssueCounts/12329844.json          |    6 +
 src/test/resources/jira/versions.json              | 2087 ++++++++++++++++++++
 11 files changed, 2447 insertions(+), 28 deletions(-)

diff --git a/src/main/java/org/apache/sling/cli/impl/jira/Version.java b/src/main/java/org/apache/sling/cli/impl/jira/Version.java
index 7cce8d5..173971e 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/Version.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/Version.java
@@ -44,4 +44,10 @@ public class Version {
     public void setRelatedIssuesCount(int relatedIssuesCount) {
         this.issuesFixedCount = relatedIssuesCount;
     }
+    
+    @Override
+    public String toString() {
+        
+        return "Version: " + name + " (id=" + id+", fixed issues="+issuesFixedCount+")";
+    }
 }
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/VersionFinder.java b/src/main/java/org/apache/sling/cli/impl/jira/VersionFinder.java
index a752be0..2c2be18 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/VersionFinder.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/VersionFinder.java
@@ -21,7 +21,9 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.lang.reflect.Type;
 import java.util.List;
-import java.util.stream.Collectors;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.function.Predicate;
 
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
@@ -33,14 +35,25 @@ import org.osgi.service.component.annotations.Component;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 
+/**
+ * Access the ASF <em>Jira</em> instance and looks up project version data.
+ */
 @Component(service = VersionFinder.class)
 public class VersionFinder {
 
-    public Version find(String versionName) {
+    /**
+     * Finds a Jira version which matches the specified release
+     * 
+     * @param release the release
+     * @return the version
+     * @throws IllegalArgumentException when no matching Jira release is found
+     */
+    public Version find(Release release) {
         Version version;
         
         try (CloseableHttpClient client = HttpClients.createDefault()) {
-            version = findVersion(versionName, client);
+            version = findVersion( v -> release.getName().equals(v.getName()), client)
+                    .orElseThrow( () -> new IllegalArgumentException("No version found with name " + release.getName()));
             populateRelatedIssuesCount(client, version);
         } catch ( IOException e ) {
             throw new RuntimeException(e);
@@ -49,48 +62,115 @@ public class VersionFinder {
         return version;
     }
 
-    private Version findVersion(String versionName, CloseableHttpClient client) throws IOException {
+    /**
+     * Finds a version that is the successor of the version of the specified
+     * <tt>release</tt>
+     * 
+     * <p>
+     * A successor has the same base name but a higher version. For instance, the
+     * <em>XSS Protection API 2.1.6</em> is succeeded by <em>XSS Protection API
+     * 2.1.8</em>.
+     * </p>
+     * 
+     * <p>
+     * If multiple successors are found the one which is closest in terms of
+     * versioning is returned.
+     * </p>
+     * 
+     * @param release the release to find a successor for
+     * @return the successor version, possibly <code>null</code>
+     * @throws IOException in case of communication errors with Jira
+     */
+    public Version findSuccessorVersion(Release release) {
         Version version;
-        HttpGet get = new HttpGet("https://issues.apache.org/jira/rest/api/2/project/SLING/versions");
-        get.addHeader("Accept", "application/json");
+        
+        try ( CloseableHttpClient client = HttpClients.createDefault() ) {
+            Optional<Version> opt = findVersion ( 
+                    v -> {
+                        Release releaseFromVersion = Release.fromString(v.getName()).get(0);
+                        return 
+                            releaseFromVersion.getComponent().equals(release.getComponent())
+                                && new org.osgi.framework.Version(releaseFromVersion.getVersion()).compareTo(new org.osgi.framework.Version(release.getVersion())) > 0;
+                    },client);
+            if ( !opt.isPresent() )
+                return null;
+            version = opt.get();
+            populateRelatedIssuesCount(client, version);
+        } catch ( IOException e ) {
+            throw new RuntimeException(e);
+        }
+        
+        return version;
+    }
+
+    private Optional<Version> findVersion(Predicate<Version> matcher, CloseableHttpClient client) throws IOException {
+        
+        return doWithJiraVersions(client, reader -> {
+            Gson gson = new Gson();
+            Type collectionType = TypeToken.getParameterized(List.class, Version.class).getType();
+            List<Version> versions = gson.fromJson(reader, collectionType);
+            return versions.stream()
+                    .filter( v -> v.getName().length() > 1) // avoid old '3' release
+                    .filter(matcher)
+                    .sorted(VersionFinder::compare)
+                    .findFirst();
+        });
+    }
+    
+    protected <T> T doWithJiraVersions(CloseableHttpClient client, Function<InputStreamReader, T> parserCallback) throws IOException {
+        HttpGet get = newGet("project/SLING/versions");
         try (CloseableHttpResponse response = client.execute(get)) {
             try (InputStream content = response.getEntity().getContent();
                     InputStreamReader reader = new InputStreamReader(content)) {
                 if (response.getStatusLine().getStatusCode() != 200)
                     throw new IOException("Status line : " + response.getStatusLine());
-                Gson gson = new Gson();
-                Type collectionType = TypeToken.getParameterized(List.class, Version.class).getType();
-                List<Version> versions = gson.fromJson(reader, collectionType);
-                List<String> filter = Release.fromString(versionName)
-                        .stream()
-                        .map( Release::getName )
-                        .collect(Collectors.toList());
                 
-                version = versions.stream()
-                    .filter(v -> filter.contains(v.getName()))
-                    .findFirst()
-                    .orElseThrow( () -> new IllegalArgumentException("No version found with name " + versionName));
+                return parserCallback.apply(reader);
             }
         }
-        return version;
     }
-
-    private void populateRelatedIssuesCount(CloseableHttpClient client, Version version) throws IOException {
-
-        HttpGet get = new HttpGet("https://issues.apache.org/jira/rest/api/2/version/" + version.getId() +"/relatedIssueCounts");
-        get.addHeader("Accept", "application/json");
+    
+    protected <T> T doWithRelatedIssueCounts(CloseableHttpClient client, Version version, Function<InputStreamReader, T> parserCallback) throws IOException {
+        
+        HttpGet get = newGet("version/" + version.getId() +"/relatedIssueCounts");
         try (CloseableHttpResponse response = client.execute(get)) {
             try (InputStream content = response.getEntity().getContent();
                     InputStreamReader reader = new InputStreamReader(content)) {
                 if (response.getStatusLine().getStatusCode() != 200)
                     throw new IOException("Status line : " + response.getStatusLine());
-                Gson gson = new Gson();
-                VersionRelatedIssuesCount issuesCount = gson.fromJson(reader, VersionRelatedIssuesCount.class);
-                
-                version.setRelatedIssuesCount(issuesCount.getIssuesFixedCount());
+                return parserCallback.apply(reader);
             }
         }
     }
+    
+    private HttpGet newGet(String suffix) {
+        HttpGet get = new HttpGet("https://issues.apache.org/jira/rest/api/2/" + suffix);
+        get.addHeader("Accept", "application/json");
+        return get;
+    }
+    
+    private void populateRelatedIssuesCount(CloseableHttpClient client, Version version) throws IOException {
+        
+        doWithRelatedIssueCounts(client, version, reader ->  {
+            Gson gson = new Gson();
+            VersionRelatedIssuesCount issuesCount = gson.fromJson(reader, VersionRelatedIssuesCount.class);
+            
+            version.setRelatedIssuesCount(issuesCount.getIssuesFixedCount());
+
+            return null;
+        });
+    }
+    
+    private static int compare(Version v1, Version v2) {
+        // version names will never map to multiple release names
+        Release r1 = Release.fromString(v1.getName()).get(0);
+        Release r2 = Release.fromString(v2.getName()).get(0);
+        
+        org.osgi.framework.Version ver1 = new org.osgi.framework.Version(r1.getVersion());
+        org.osgi.framework.Version ver2 = new org.osgi.framework.Version(r2.getVersion());
+        
+        return ver1.compareTo(ver2);
+    }
 
     static class VersionRelatedIssuesCount {
 
diff --git a/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java b/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java
index 4cc4222..8656362 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java
@@ -89,7 +89,7 @@ public class PrepareVoteEmailCommand implements Command {
             StagingRepository repo = repoFinder.find(repoId);
             List<Release> releases = Release.fromString(repo.getDescription());
             List<Version> versions = releases.stream()
-                    .map( r -> versionFinder.find(r.getName()))
+                    .map( r -> versionFinder.find(r))
                     .collect(Collectors.toList());
             
             String releaseName = releases.stream()
diff --git a/src/main/java/org/apache/sling/cli/impl/release/Release.java b/src/main/java/org/apache/sling/cli/impl/release/Release.java
index 95786b3..2428996 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/Release.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/Release.java
@@ -22,6 +22,9 @@ import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+/**
+ * Provides structured access to the components of a release name.
+ */
 public final class Release {
 
     /*
@@ -70,22 +73,69 @@ public final class Release {
         
     }
     
+    /**
+     * Returns the full name, e.g. <em>Apache Sling Foo 1.0.2</em>
+     * 
+     * @return the full name
+     */
     public String getFullName() {
         return fullName;
     }
     
+    /**
+     * Returns the name, e.g. <em>Foo 1.0.2</em>
+     * 
+     * @return the name
+     */
     public String getName() {
         return name;
     }
     
+    /**
+     * Returns the version, e.g. <em>1.0.2</em>
+     * 
+     * @return the version 
+     */
     public String getVersion() {
         return version;
     }
 
+    /**
+     * Returns the component, e.g. <tt>Foo</tt>
+     * 
+     * @return the component
+     */
     public String getComponent() {
         return component;
     }
 
+    /**
+     * Creates a new Release object that corresponds to the next release name
+     * 
+     * <p>The next object is identical to <tt>this</tt> object, except the fact that the
+     * micro component of the version is increased by two.</P>
+     * 
+     * <p>For instance, the next version of <tt>Apache Sling Foo 1.0.2</tt> is <tt>Apache Sling Foo 1.0.4</tt>.</p>
+     * 
+     * @return the next release
+     */
+    public Release next() {
+        
+        // assumption is that the release object is well-formed
+        int lastSeparator = fullName.lastIndexOf('.'); // Apache Sling Foo 1.0.2 -> 1.0.4
+        int increment = 2;
+        if ( lastSeparator == -1 ) {
+            lastSeparator = fullName.lastIndexOf(' '); // Apache Sling Bar 2 -> 3
+            increment = 1;
+        }
+        
+        int componentToIncrement = Integer.parseInt(fullName.substring(lastSeparator + 1));
+        
+        String unchangedPart = fullName.substring(0, lastSeparator + 1);
+        
+        return Release.fromString(unchangedPart + ( componentToIncrement + increment )).get(0);
+    }
+    
     @Override
     public int hashCode() {
         return fullName.hashCode();
diff --git a/src/main/java/org/apache/sling/cli/impl/release/UpdateJiraCommand.java b/src/main/java/org/apache/sling/cli/impl/release/UpdateJiraCommand.java
new file mode 100644
index 0000000..20d2acc
--- /dev/null
+++ b/src/main/java/org/apache/sling/cli/impl/release/UpdateJiraCommand.java
@@ -0,0 +1,65 @@
+/*
+ * 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.sling.cli.impl.release;
+
+import java.io.IOException;
+
+import org.apache.sling.cli.impl.Command;
+import org.apache.sling.cli.impl.jira.Version;
+import org.apache.sling.cli.impl.jira.VersionFinder;
+import org.apache.sling.cli.impl.nexus.StagingRepository;
+import org.apache.sling.cli.impl.nexus.StagingRepositoryFinder;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component(service = Command.class, property = {
+        Command.PROPERTY_NAME_COMMAND+"=release",
+        Command.PROPERTY_NAME_SUBCOMMAND+"=update-jira",
+        Command.PROPERTY_NAME_SUMMARY+"=Releases the current version, closes versions fixed in the current version and creates a new version if needed"
+    })
+public class UpdateJiraCommand implements Command {
+
+    @Reference
+    private StagingRepositoryFinder repoFinder;
+    
+    @Reference
+    private VersionFinder versionFinder;
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Override
+    public void execute(String target) {
+        try {
+            StagingRepository repo = repoFinder.find(Integer.parseInt(target));
+            for (Release release : Release.fromString(repo.getDescription()) ) {
+                Version version = versionFinder.find(release);
+                logger.info("Found version {}", version);
+                Version successorVersion = versionFinder.findSuccessorVersion(release);
+                logger.info("Found successor version {}", successorVersion);
+                if ( successorVersion == null ) {
+                    Release next = release.next();
+                    logger.info("Would create version {}", next);
+                }
+                    
+            }
+        } catch (IOException e) {
+            logger.warn("Failed executing command", e);
+        }
+    }
+}
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/VersionFinderTest.java b/src/test/java/org/apache/sling/cli/impl/jira/VersionFinderTest.java
new file mode 100644
index 0000000..04a97bd
--- /dev/null
+++ b/src/test/java/org/apache/sling/cli/impl/jira/VersionFinderTest.java
@@ -0,0 +1,93 @@
+/*
+ * 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.sling.cli.impl.jira;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.hamcrest.Matchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.function.Function;
+
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.sling.cli.impl.release.Release;
+import org.junit.Test;
+
+public class VersionFinderTest {
+
+    private VersionFinder finder = new StubVersionFinder();
+    
+    @Test
+    public void findMatchingVersion() {
+        
+        finder = new StubVersionFinder();
+        Version version = finder.find(Release.fromString("XSS Protection API 1.0.2").get(0));
+        
+        assertThat("version", version, notNullValue());
+        assertThat("version.name", version.getName(), equalTo("XSS Protection API 1.0.2"));
+        assertThat("version.id", version.getId(), equalTo(12329667));
+        assertThat("version.issuesFixedCount", version.getIssuesFixedCount(), equalTo(1)); 
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void missingVersionNotFound() {
+        
+        finder.find(Release.fromString("XSS Protection API 1.0.3").get(0));
+    }
+    
+    @Test
+    public void findSuccessorVersion() {
+        Version successor = finder.findSuccessorVersion(Release.fromString("XSS Protection API 1.0.2").get(0));
+        
+        assertThat("successor", successor, notNullValue());
+        assertThat("successor.name", successor.getName(), equalTo("XSS Protection API 1.0.4"));
+    }
+
+    @Test
+    public void noSuccessorVersion() {
+        Version successor = finder.findSuccessorVersion(Release.fromString("XSS Protection API 1.0.16").get(0));
+        
+        assertThat("successor", successor, nullValue());
+    }
+    
+    private static final class StubVersionFinder extends VersionFinder {
+        @Override
+        protected <T> T doWithJiraVersions(CloseableHttpClient client, Function<InputStreamReader, T> parserCallback)
+                throws IOException {
+            
+            try ( InputStreamReader reader = new InputStreamReader(getClass().getResourceAsStream("/jira/versions.json")) ) {
+                return parserCallback.apply(reader);
+            }
+        }
+        
+        @Override
+        protected <T> T doWithRelatedIssueCounts(CloseableHttpClient client, Version version,
+                Function<InputStreamReader, T> parserCallback) throws IOException {
+            
+            InputStream stream = getClass().getResourceAsStream("/jira/relatedIssueCounts/" + version.getId()+".json");
+            if ( stream == null )
+                throw new IllegalArgumentException("No related issues count for version " + version.getId() + " (" + version.getName() + ")");
+            
+            try ( InputStreamReader reader = new InputStreamReader(stream) ) {
+                return parserCallback.apply(reader);
+            }
+        }
+    }
+}
diff --git a/src/test/java/org/apache/sling/cli/impl/release/ReleaseTest.java b/src/test/java/org/apache/sling/cli/impl/release/ReleaseTest.java
index 8d16905..d6d9c51 100644
--- a/src/test/java/org/apache/sling/cli/impl/release/ReleaseTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/release/ReleaseTest.java
@@ -91,5 +91,20 @@ public class ReleaseTest {
         reader.close();
     }
 
+    @Test
+    public void nextVersion() {
+        Release release = Release.fromString("Apache Sling Foo 1.0.2").get(0);
+        Release next = release.next();
+        
+        assertEquals("Apache Sling Foo 1.0.4", next.getFullName());
+    }
+    
+    @Test
+    public void nextVersionWithSingleNumber() {
+        Release release = Release.fromString("Apache Sling Bar 2").get(0);
+        Release next = release.next();
+        
+        assertEquals("Apache Sling Bar 3", next.getFullName());
+    }
 
 }
diff --git a/src/test/resources/README.md b/src/test/resources/README.md
new file mode 100644
index 0000000..3158b2f
--- /dev/null
+++ b/src/test/resources/README.md
@@ -0,0 +1,11 @@
+# Test resources
+
+These resources are downloaded from remote servers and maybe slightly tweaked to make them usable for testing.
+
+## Jira
+
+```
+http https://issues.apache.org/jira/rest/api/2/project/SLING/versions | jq '.[0:199]' > src/test/resources/jira/versions.json
+http https://issues.apache.org/jira/rest/api/2/version/12329667/relatedIssueCounts | jq '.' > src/test/resources/jira/relatedIssueCounts/12329667.json
+http https://issues.apache.org/jira/rest/api/2/version/12329844/relatedIssueCounts | jq '.' > src/test/resources/jira/relatedIssueCounts/12329844.json
+```
\ No newline at end of file
diff --git a/src/test/resources/jira/relatedIssueCounts/12329667.json b/src/test/resources/jira/relatedIssueCounts/12329667.json
new file mode 100644
index 0000000..ac7b4e9
--- /dev/null
+++ b/src/test/resources/jira/relatedIssueCounts/12329667.json
@@ -0,0 +1,6 @@
+{
+  "self": "https://issues.apache.org/jira/rest/api/2/version/12329667",
+  "issuesFixedCount": 1,
+  "issuesAffectedCount": 4,
+  "issueCountWithCustomFieldsShowingVersion": 0
+}
diff --git a/src/test/resources/jira/relatedIssueCounts/12329844.json b/src/test/resources/jira/relatedIssueCounts/12329844.json
new file mode 100644
index 0000000..3f9c8aa
--- /dev/null
+++ b/src/test/resources/jira/relatedIssueCounts/12329844.json
@@ -0,0 +1,6 @@
+{
+  "self": "https://issues.apache.org/jira/rest/api/2/version/12329844",
+  "issuesFixedCount": 4,
+  "issuesAffectedCount": 2,
+  "issueCountWithCustomFieldsShowingVersion": 0
+}
diff --git a/src/test/resources/jira/versions.json b/src/test/resources/jira/versions.json
new file mode 100644
index 0000000..d7e5226
--- /dev/null
+++ b/src/test/resources/jira/versions.json
@@ -0,0 +1,2087 @@
+[
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12329024",
+    "id": "12329024",
+    "description": "Initial release",
+    "name": "XSS Protection API 1.0.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-03-20",
+    "userReleaseDate": "20/Mar/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12329667",
+    "id": "12329667",
+    "name": "XSS Protection API 1.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-03-30",
+    "userReleaseDate": "30/Mar/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12329844",
+    "id": "12329844",
+    "name": "XSS Protection API 1.0.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-08-03",
+    "userReleaseDate": "03/Aug/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333112",
+    "id": "12333112",
+    "name": "XSS Protection API 1.0.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-10-12",
+    "userReleaseDate": "12/Oct/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333775",
+    "id": "12333775",
+    "name": "XSS Protection API 1.0.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-02-02",
+    "userReleaseDate": "02/Feb/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338062",
+    "id": "12338062",
+    "name": "XSS Protection API 1.0.12",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-08-19",
+    "userReleaseDate": "19/Aug/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338105",
+    "id": "12338105",
+    "description": "Maintenance Release",
+    "name": "XSS Protection API 1.0.14",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-08-29",
+    "userReleaseDate": "29/Aug/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338187",
+    "id": "12338187",
+    "name": "XSS Protection API 1.0.16",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-10-31",
+    "userReleaseDate": "31/Oct/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12323492",
+    "id": "12323492",
+    "description": "First public release",
+    "name": "Tenant 1.0.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2013-04-26",
+    "userReleaseDate": "26/Apr/13",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12324350",
+    "id": "12324350",
+    "name": "Tenant 1.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-08-18",
+    "userReleaseDate": "18/Aug/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12327647",
+    "id": "12327647",
+    "name": "Tenant 1.1.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-01-16",
+    "userReleaseDate": "16/Jan/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12339163",
+    "id": "12339163",
+    "description": "Maintenance release",
+    "name": "Tenant 1.1.2",
+    "archived": false,
+    "released": true,
+    "startDate": "2017-01-17",
+    "releaseDate": "2018-09-02",
+    "userStartDate": "17/Jan/17",
+    "userReleaseDate": "02/Sep/18",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316002",
+    "id": "12316002",
+    "description": "First public release",
+    "name": "Scripting JST 2.0.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-12-20",
+    "userReleaseDate": "20/Dec/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316003",
+    "id": "12316003",
+    "description": "Maintenance Release",
+    "name": "Scripting JST 2.0.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-08-16",
+    "userReleaseDate": "16/Aug/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12322940",
+    "id": "12322940",
+    "description": "Maintenance Release",
+    "name": "Scripting JST 2.0.8",
+    "archived": false,
+    "released": false,
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12324674",
+    "id": "12324674",
+    "description": "First public release",
+    "name": "Service User Mapper 1.0.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-02-06",
+    "userReleaseDate": "06/Feb/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326146",
+    "id": "12326146",
+    "name": "Service User Mapper 1.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-06-02",
+    "userReleaseDate": "02/Jun/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12327057",
+    "id": "12327057",
+    "name": "Service User Mapper 1.0.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-07-14",
+    "userReleaseDate": "14/Jul/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12327372",
+    "id": "12327372",
+    "name": "Service User Mapper 1.1.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-03-02",
+    "userReleaseDate": "02/Mar/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12329544",
+    "id": "12329544",
+    "name": "Service User Mapper 1.2.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-03-16",
+    "userReleaseDate": "16/Mar/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12329687",
+    "id": "12329687",
+    "name": "Service User Mapper 1.2.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-11-11",
+    "userReleaseDate": "11/Nov/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12334454",
+    "id": "12334454",
+    "name": "Service User Mapper 1.2.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-12-22",
+    "userReleaseDate": "22/Dec/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338907",
+    "id": "12338907",
+    "name": "Service User Mapper 1.2.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-03-30",
+    "userReleaseDate": "30/Mar/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340275",
+    "id": "12340275",
+    "name": "Service User Mapper 1.3.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-05-01",
+    "userReleaseDate": "01/May/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340324",
+    "id": "12340324",
+    "name": "Service User Mapper 1.3.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-05-22",
+    "userReleaseDate": "22/May/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340608",
+    "id": "12340608",
+    "name": "Service User Mapper 1.3.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-07-21",
+    "userReleaseDate": "21/Jul/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313245",
+    "id": "12313245",
+    "description": "First public release",
+    "name": "Servlets Resolver 2.0.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313376",
+    "id": "12313376",
+    "description": "Maintenance Release",
+    "name": " Servlets Resolver 2.0.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-05-14",
+    "userReleaseDate": "14/May/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314051",
+    "id": "12314051",
+    "description": "Maintenance Release",
+    "name": "Servlets Resolver 2.0.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-10-10",
+    "userReleaseDate": "10/Oct/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314292",
+    "id": "12314292",
+    "description": "New Feature Release",
+    "name": "Servlets Resolver 2.1.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-10-08",
+    "userReleaseDate": "08/Oct/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315301",
+    "id": "12315301",
+    "description": "Maintenance Release",
+    "name": "Servlets Resolver 2.1.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-01-30",
+    "userReleaseDate": "30/Jan/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12319517",
+    "id": "12319517",
+    "description": "Maintenance Release",
+    "name": "Servlets Resolver 2.2.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-11-15",
+    "userReleaseDate": "15/Nov/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12323497",
+    "id": "12323497",
+    "name": "Servlets Resolver 2.2.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2013-04-18",
+    "userReleaseDate": "18/Apr/13",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12324330",
+    "id": "12324330",
+    "name": "Servlets Resolver 2.3.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-02-24",
+    "userReleaseDate": "24/Feb/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326267",
+    "id": "12326267",
+    "name": "Servlets Resolver 2.3.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-03-31",
+    "userReleaseDate": "31/Mar/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326701",
+    "id": "12326701",
+    "name": "Servlets Resolver 2.3.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-11-14",
+    "userReleaseDate": "14/Nov/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12328993",
+    "id": "12328993",
+    "name": "Servlets Resolver 2.3.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-11-18",
+    "userReleaseDate": "18/Nov/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12329016",
+    "id": "12329016",
+    "name": "Servlets Resolver 2.3.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-10-05",
+    "userReleaseDate": "05/Oct/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333753",
+    "id": "12333753",
+    "description": "New Resource Provider API (2.11.0)",
+    "name": "Servlets Resolver 2.4.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-02-08",
+    "userReleaseDate": "08/Feb/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12334794",
+    "id": "12334794",
+    "name": "Servlets Resolver 2.4.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-02-19",
+    "userReleaseDate": "19/Feb/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12334853",
+    "id": "12334853",
+    "name": "Servlets Resolver 2.4.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-07-13",
+    "userReleaseDate": "13/Jul/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12337881",
+    "id": "12337881",
+    "description": "Maintenance Release",
+    "name": "Servlets Resolver 2.4.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-10-22",
+    "userReleaseDate": "22/Oct/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338547",
+    "id": "12338547",
+    "name": "Servlets Resolver 2.4.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-12-06",
+    "userReleaseDate": "06/Dec/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338893",
+    "id": "12338893",
+    "name": "Servlets Resolver 2.4.10",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-12-24",
+    "userReleaseDate": "24/Dec/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338894",
+    "id": "12338894",
+    "name": "Servlets Resolver 2.4.12",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-05-09",
+    "userReleaseDate": "09/May/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340523",
+    "id": "12340523",
+    "name": "Servlets Resolver 2.4.14",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-08-28",
+    "userReleaseDate": "28/Aug/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313247",
+    "id": "12313247",
+    "description": "First public release",
+    "name": "Servlets Post 2.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313275",
+    "id": "12313275",
+    "description": "Maintenance Release",
+    "name": "Servlets Post 2.0.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-05-14",
+    "userReleaseDate": "14/May/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314180",
+    "id": "12314180",
+    "description": "New feature release",
+    "name": "Servlets Post 2.1.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-10-08",
+    "userReleaseDate": "08/Oct/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315287",
+    "id": "12315287",
+    "description": "Maintenance Release",
+    "name": "Servlets Post 2.1.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-06-28",
+    "userReleaseDate": "28/Jun/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12319641",
+    "id": "12319641",
+    "description": "Maintenance Release",
+    "name": "Servlets Post 2.2.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-11-15",
+    "userReleaseDate": "15/Nov/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12323498",
+    "id": "12323498",
+    "name": "Servlets Post 2.3.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2013-05-10",
+    "userReleaseDate": "10/May/13",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12324380",
+    "id": "12324380",
+    "name": "Servlets Post 2.3.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2013-07-18",
+    "userReleaseDate": "18/Jul/13",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12324747",
+    "id": "12324747",
+    "name": "Servlets Post 2.3.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-03-07",
+    "userReleaseDate": "07/Mar/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12328043",
+    "id": "12328043",
+    "name": "Servlets Post 2.3.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-06-15",
+    "userReleaseDate": "15/Jun/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326357",
+    "id": "12326357",
+    "name": "Servlets Post 2.3.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-08-28",
+    "userReleaseDate": "28/Aug/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12332788",
+    "id": "12332788",
+    "name": "Servlets Post 2.3.10",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-04-10",
+    "userReleaseDate": "10/Apr/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12335544",
+    "id": "12335544",
+    "name": "Servlets Post 2.3.12",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-06-01",
+    "userReleaseDate": "01/Jun/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12335856",
+    "id": "12335856",
+    "name": "Servlets Post 2.3.14",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-09-13",
+    "userReleaseDate": "13/Sep/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338346",
+    "id": "12338346",
+    "name": "Servlets Post 2.3.16",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-05-11",
+    "userReleaseDate": "11/May/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340585",
+    "id": "12340585",
+    "name": "Servlets Post 2.3.18",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-05-19",
+    "userReleaseDate": "19/May/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340584",
+    "id": "12340584",
+    "name": "Servlets Post 2.3.20",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-05-29",
+    "userReleaseDate": "29/May/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12341089",
+    "id": "12341089",
+    "name": "Servlets Post 2.3.22",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-08-14",
+    "userReleaseDate": "14/Aug/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12341348",
+    "id": "12341348",
+    "name": "Servlets Post 2.3.24",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2018-01-23",
+    "userReleaseDate": "23/Jan/18",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313246",
+    "id": "12313246",
+    "description": "First public release",
+    "name": "Servlets Get 2.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313374",
+    "id": "12313374",
+    "description": "Maintenance Release",
+    "name": "Servlets Get 2.0.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-05-14",
+    "userReleaseDate": "14/May/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313969",
+    "id": "12313969",
+    "description": "Maintenance Release",
+    "name": "Servlets Get 2.0.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-10-02",
+    "userReleaseDate": "02/Oct/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314257",
+    "id": "12314257",
+    "description": "Maintenance Release",
+    "name": "Servlets Get 2.0.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-12-21",
+    "userReleaseDate": "21/Dec/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314473",
+    "id": "12314473",
+    "description": "New Feature Release",
+    "name": "Servlets Get 2.1.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-10-08",
+    "userReleaseDate": "08/Oct/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315299",
+    "id": "12315299",
+    "description": "Maintenance Release",
+    "name": "Servlets Get 2.1.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2011-02-18",
+    "userReleaseDate": "18/Feb/11",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316181",
+    "id": "12316181",
+    "description": "Maintenance Release",
+    "name": "Servlets Get 2.1.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-11-15",
+    "userReleaseDate": "15/Nov/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12323496",
+    "id": "12323496",
+    "name": "Servlets Get 2.1.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-03-07",
+    "userReleaseDate": "07/Mar/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326356",
+    "id": "12326356",
+    "name": "Servlets Get 2.1.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-03-31",
+    "userReleaseDate": "31/Mar/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326700",
+    "id": "12326700",
+    "name": "Servlets Get 2.1.10",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-09-01",
+    "userReleaseDate": "01/Sep/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12328240",
+    "id": "12328240",
+    "name": "Servlets Get 2.1.12",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-07-17",
+    "userReleaseDate": "17/Jul/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333051",
+    "id": "12333051",
+    "name": "Servlets Get 2.1.14",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-12-21",
+    "userReleaseDate": "21/Dec/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12334386",
+    "id": "12334386",
+    "name": "Servlets Get 2.1.18",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-08-25",
+    "userReleaseDate": "25/Aug/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338170",
+    "id": "12338170",
+    "name": "Servlets Get 2.1.20",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-02-03",
+    "userReleaseDate": "03/Feb/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12339353",
+    "id": "12339353",
+    "name": "Servlets Get 2.1.22",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-02-09",
+    "userReleaseDate": "09/Feb/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12339558",
+    "id": "12339558",
+    "name": "Servlets Get 2.1.24",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-05-11",
+    "userReleaseDate": "11/May/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340578",
+    "id": "12340578",
+    "name": "Servlets Get 2.1.26",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-05-19",
+    "userReleaseDate": "19/May/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340579",
+    "id": "12340579",
+    "name": "Servlets Get 2.1.28",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-11-02",
+    "userReleaseDate": "02/Nov/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315438",
+    "id": "12315438",
+    "description": "Initial Version",
+    "name": "Servlet Archetype 1.0.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-10-19",
+    "userReleaseDate": "19/Oct/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315454",
+    "id": "12315454",
+    "description": "Maintenance Release",
+    "name": "Servlet Archetype 1.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-06-04",
+    "userReleaseDate": "04/Jun/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12317347",
+    "id": "12317347",
+    "description": "First Release",
+    "name": "Bundle Archetype 1.0.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2011-09-15",
+    "userReleaseDate": "15/Sep/11",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326805",
+    "id": "12326805",
+    "name": "Bundle Archetype 1.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-06-04",
+    "userReleaseDate": "04/Jun/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12317548",
+    "id": "12317548",
+    "name": "JCRInstall Bundle Archetype 1.0.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2011-09-15",
+    "userReleaseDate": "15/Sep/11",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326806",
+    "id": "12326806",
+    "name": "JCRInstall Bundle Archetype 1.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-06-04",
+    "userReleaseDate": "04/Jun/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315320",
+    "id": "12315320",
+    "description": "First public release",
+    "name": "Scripting Velocity 2.0.0",
+    "archived": false,
+    "released": false,
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315321",
+    "id": "12315321",
+    "description": "Maintenance Release",
+    "name": "Scripting Velocity 2.0.2",
+    "archived": false,
+    "released": false,
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315484",
+    "id": "12315484",
+    "description": "First public release",
+    "name": "Scripting Scala 1.0.0",
+    "archived": false,
+    "released": false,
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313252",
+    "id": "12313252",
+    "description": "First public release",
+    "name": "Scripting JSP-Taglib 2.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313375",
+    "id": "12313375",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP-Taglib 2.0.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-05-14",
+    "userReleaseDate": "14/May/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314125",
+    "id": "12314125",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP-Taglib 2.0.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-11-28",
+    "userReleaseDate": "28/Nov/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314408",
+    "id": "12314408",
+    "description": "Feature Release",
+    "name": "Scripting JSP-Taglib 2.1.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-10-19",
+    "userReleaseDate": "19/Oct/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315450",
+    "id": "12315450",
+    "description": "Maintenance release",
+    "name": "Scripting JSP-Taglib 2.1.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2011-05-03",
+    "userReleaseDate": "03/May/11",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316405",
+    "id": "12316405",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP-Taglib 2.1.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-01-30",
+    "userReleaseDate": "30/Jan/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12319471",
+    "id": "12319471",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP-Taglib 2.1.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-10-29",
+    "userReleaseDate": "29/Oct/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12323463",
+    "id": "12323463",
+    "description": "Maintenance/Enhancement Release",
+    "name": "Scripting JSP-Taglib 2.2.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2013-08-08",
+    "userReleaseDate": "08/Aug/13",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12324863",
+    "id": "12324863",
+    "description": "Maintenance release",
+    "name": "Scripting JSP-Taglib 2.2.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-09-12",
+    "userReleaseDate": "12/Sep/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12328648",
+    "id": "12328648",
+    "name": "Scripting JSP-Taglib 2.2.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-09-25",
+    "userReleaseDate": "25/Sep/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12328732",
+    "id": "12328732",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP-Taglib 2.2.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-04-21",
+    "userReleaseDate": "21/Apr/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314339",
+    "id": "12314339",
+    "description": "First public release",
+    "name": "Scripting JSP-Atom-Taglib 1.0.0",
+    "archived": false,
+    "released": false,
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313251",
+    "id": "12313251",
+    "description": "First public release",
+    "name": "Scripting JSP 2.0.2",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313356",
+    "id": "12313356",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.0.6",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2009-05-14",
+    "userReleaseDate": "14/May/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314069",
+    "id": "12314069",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.0.8",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2009-11-28",
+    "userReleaseDate": "28/Nov/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314407",
+    "id": "12314407",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.0.10",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2010-10-25",
+    "userReleaseDate": "25/Oct/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315449",
+    "id": "12315449",
+    "description": "Maintenance release",
+    "name": "Scripting JSP 2.0.12",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2010-12-20",
+    "userReleaseDate": "20/Dec/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316005",
+    "id": "12316005",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.0.14",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2011-01-24",
+    "userReleaseDate": "24/Jan/11",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316083",
+    "id": "12316083",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.0.16",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2011-05-03",
+    "userReleaseDate": "03/May/11",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316404",
+    "id": "12316404",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.0.18",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2011-08-15",
+    "userReleaseDate": "15/Aug/11",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12317602",
+    "id": "12317602",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.0.20",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2012-01-16",
+    "userReleaseDate": "16/Jan/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12319472",
+    "id": "12319472",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.0.22",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2012-05-18",
+    "userReleaseDate": "18/May/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12321295",
+    "id": "12321295",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.0.24",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2012-06-28",
+    "userReleaseDate": "28/Jun/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12321864",
+    "id": "12321864",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.0.26",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2012-11-30",
+    "userReleaseDate": "30/Nov/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12323580",
+    "id": "12323580",
+    "name": "Scripting JSP 2.0.28",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2013-05-16",
+    "userReleaseDate": "16/May/13",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12324445",
+    "id": "12324445",
+    "description": "Java 8 Support",
+    "name": "Scripting JSP 2.1.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-05-20",
+    "userReleaseDate": "20/May/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326855",
+    "id": "12326855",
+    "name": "Scripting JSP 2.1.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-07-12",
+    "userReleaseDate": "12/Jul/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12327194",
+    "id": "12327194",
+    "name": "Scripting JSP 2.1.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-11-06",
+    "userReleaseDate": "06/Nov/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12328955",
+    "id": "12328955",
+    "name": "Scripting JSP 2.1.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-01-03",
+    "userReleaseDate": "03/Jan/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12334593",
+    "id": "12334593",
+    "name": "Scripting JSP 2.2.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-10-20",
+    "userReleaseDate": "20/Oct/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338545",
+    "id": "12338545",
+    "name": "Scripting JSP 2.2.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-12-16",
+    "userReleaseDate": "16/Dec/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338860",
+    "id": "12338860",
+    "name": "Scripting JSP 2.2.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-01-10",
+    "userReleaseDate": "10/Jan/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338978",
+    "id": "12338978",
+    "name": "Scripting JSP 2.2.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-01-30",
+    "userReleaseDate": "30/Jan/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12339340",
+    "id": "12339340",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.3.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-03-20",
+    "userReleaseDate": "20/Mar/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340247",
+    "id": "12340247",
+    "description": "Maintenance Release",
+    "name": "Scripting JSP 2.3.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-08-24",
+    "userReleaseDate": "24/Aug/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12341395",
+    "id": "12341395",
+    "name": "Scripting JSP 2.3.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-12-04",
+    "userReleaseDate": "04/Dec/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313250",
+    "id": "12313250",
+    "description": "First public release",
+    "name": "Scripting JavaScript 2.0.2",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313390",
+    "id": "12313390",
+    "description": "Feature Release",
+    "name": " Scripting JavaScript 2.0.4",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2009-05-14",
+    "userReleaseDate": "14/May/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314110",
+    "id": "12314110",
+    "description": "Maintenance Release",
+    "name": "Scripting JavaScript 2.0.6",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2009-11-28",
+    "userReleaseDate": "28/Nov/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314406",
+    "id": "12314406",
+    "description": "Maintenance Release",
+    "name": "Scripting JavaScript 2.0.8",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2010-10-25",
+    "userReleaseDate": "25/Oct/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315448",
+    "id": "12315448",
+    "description": "Maintenance release",
+    "name": "Scripting JavaScript 2.0.10",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2010-12-20",
+    "userReleaseDate": "20/Dec/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316006",
+    "id": "12316006",
+    "description": "Maintenance Release",
+    "name": "Scripting JavaScript 2.0.12",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2011-02-26",
+    "userReleaseDate": "26/Feb/11",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316243",
+    "id": "12316243",
+    "description": "Maintenance Release",
+    "name": "Scripting JavaScript 2.0.14",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2014-06-23",
+    "userReleaseDate": "23/Jun/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12327183",
+    "id": "12327183",
+    "description": "Maintenance Release",
+    "name": "Scripting JavaScript 2.0.16",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2015-04-20",
+    "userReleaseDate": "20/Apr/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12332071",
+    "id": "12332071",
+    "description": "Maintenance Release",
+    "name": "Scripting JavaScript 2.0.18",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2015-07-02",
+    "userReleaseDate": "02/Jul/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12332966",
+    "id": "12332966",
+    "description": "Maintenance Release",
+    "name": "Scripting JavaScript 2.0.20",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2015-07-21",
+    "userReleaseDate": "21/Jul/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333080",
+    "id": "12333080",
+    "name": "Scripting JavaScript 2.0.22",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2015-08-13",
+    "userReleaseDate": "13/Aug/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333276",
+    "id": "12333276",
+    "name": "Scripting JavaScript 2.0.24",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2015-09-07",
+    "userReleaseDate": "07/Sep/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333370",
+    "id": "12333370",
+    "name": "Scripting JavaScript 2.0.26",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2015-10-12",
+    "userReleaseDate": "12/Oct/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333862",
+    "id": "12333862",
+    "name": "Scripting JavaScript 2.0.28",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-01-08",
+    "userReleaseDate": "08/Jan/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12334627",
+    "id": "12334627",
+    "description": "Maintenance Release",
+    "name": "Scripting JavaScript 2.0.30",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-06-22",
+    "userReleaseDate": "22/Jun/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12336745",
+    "id": "12336745",
+    "name": "Scripting JavaScript 3.0.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-05-11",
+    "userReleaseDate": "11/May/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340536",
+    "id": "12340536",
+    "name": "Scripting JavaScript 3.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-09-04",
+    "userReleaseDate": "04/Sep/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313605",
+    "id": "12313605",
+    "description": "First public release",
+    "name": "Scripting Java 1.0.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-12-02",
+    "userReleaseDate": "02/Dec/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314418",
+    "id": "12314418",
+    "description": "New feature release",
+    "name": "Scripting Java 2.0.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-12-20",
+    "userReleaseDate": "20/Dec/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316001",
+    "id": "12316001",
+    "description": "Maintenance Release",
+    "name": "Scripting Java 2.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-01-16",
+    "userReleaseDate": "16/Jan/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12319473",
+    "id": "12319473",
+    "description": "Maintenance Release",
+    "name": "Scripting Java 2.0.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-05-18",
+    "userReleaseDate": "18/May/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12321294",
+    "id": "12321294",
+    "description": "Maintenance Release",
+    "name": "Scripting Java 2.0.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-06-28",
+    "userReleaseDate": "28/Jun/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12321863",
+    "id": "12321863",
+    "description": "Maintenance Release",
+    "name": "Scripting Java 2.0.10",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-07-12",
+    "userReleaseDate": "12/Jul/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326856",
+    "id": "12326856",
+    "description": "Maintenance Release",
+    "name": "Scripting Java 2.0.12",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-09-30",
+    "userReleaseDate": "30/Sep/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12328674",
+    "id": "12328674",
+    "description": "Maintenance Release",
+    "name": "Scripting Java 2.0.14",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-12-20",
+    "userReleaseDate": "20/Dec/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12334385",
+    "id": "12334385",
+    "description": "Maintenance Release",
+    "name": "Scripting Java 2.1.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-10-20",
+    "userReleaseDate": "20/Oct/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338546",
+    "id": "12338546",
+    "name": "Scripting Java 2.1.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-12-16",
+    "userReleaseDate": "16/Dec/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338861",
+    "id": "12338861",
+    "name": "Scripting Java 2.1.4",
+    "archived": false,
+    "released": false,
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313249",
+    "id": "12313249",
+    "description": "First public release",
+    "name": "Scripting Core 2.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313366",
+    "id": "12313366",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-05-14",
+    "userReleaseDate": "14/May/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314072",
+    "id": "12314072",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-10-10",
+    "userReleaseDate": "10/Oct/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314291",
+    "id": "12314291",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2009-11-28",
+    "userReleaseDate": "28/Nov/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314403",
+    "id": "12314403",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.10",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-03-01",
+    "userReleaseDate": "01/Mar/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314797",
+    "id": "12314797",
+    "description": "Maintenance release",
+    "name": "Scripting Core 2.0.14",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-11-02",
+    "userReleaseDate": "02/Nov/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315447",
+    "id": "12315447",
+    "description": "Maintenance release",
+    "name": "Scripting Core 2.0.16",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2011-01-29",
+    "userReleaseDate": "29/Jan/11",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316110",
+    "id": "12316110",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.18",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2011-08-15",
+    "userReleaseDate": "15/Aug/11",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12317582",
+    "id": "12317582",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.20",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-01-16",
+    "userReleaseDate": "16/Jan/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12319469",
+    "id": "12319469",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.22",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-05-26",
+    "userReleaseDate": "26/May/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12321447",
+    "id": "12321447",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.24",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-06-28",
+    "userReleaseDate": "28/Jun/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12321862",
+    "id": "12321862",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.26",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-03-07",
+    "userReleaseDate": "07/Mar/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326347",
+    "id": "12326347",
+    "name": "Scripting Core 2.0.28",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-09-22",
+    "userReleaseDate": "22/Sep/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12328697",
+    "id": "12328697",
+    "name": "Scripting Core 2.0.30",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-07-21",
+    "userReleaseDate": "21/Jul/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333079",
+    "id": "12333079",
+    "name": "Scripting Core 2.0.32",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-07-26",
+    "userReleaseDate": "26/Jul/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333099",
+    "id": "12333099",
+    "name": "Scripting Core 2.0.34",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-08-13",
+    "userReleaseDate": "13/Aug/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12333275",
+    "id": "12333275",
+    "name": "Scripting Core 2.0.36",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-02-12",
+    "userReleaseDate": "12/Feb/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12334860",
+    "id": "12334860",
+    "name": "Scripting Core 2.0.38",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-07-13",
+    "userReleaseDate": "13/Jul/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12337945",
+    "id": "12337945",
+    "name": "Scripting Core 2.0.40",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-10-17",
+    "userReleaseDate": "17/Oct/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338776",
+    "id": "12338776",
+    "name": "Scripting Core 2.0.44",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-12-15",
+    "userReleaseDate": "15/Dec/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12339253",
+    "id": "12339253",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.46",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-03-08",
+    "userReleaseDate": "08/Mar/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12339953",
+    "id": "12339953",
+    "description": "Maintenance Release",
+    "name": "Scripting Core 2.0.48",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-09-29",
+    "userReleaseDate": "29/Sep/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12341679",
+    "id": "12341679",
+    "name": "Scripting Core 2.0.50",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-10-23",
+    "userReleaseDate": "23/Oct/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313248",
+    "id": "12313248",
+    "description": "First public release",
+    "name": "Scripting API 2.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314561",
+    "id": "12314561",
+    "description": "Feature Release",
+    "name": "Scripting API 2.1.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-02-19",
+    "userReleaseDate": "19/Feb/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314784",
+    "id": "12314784",
+    "description": "Maintenance release",
+    "name": "Scripting API 2.1.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2010-12-20",
+    "userReleaseDate": "20/Dec/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12316004",
+    "id": "12316004",
+    "description": "Maintenance Release",
+    "name": "Scripting API 2.1.4",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2012-01-16",
+    "userReleaseDate": "16/Jan/12",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12319470",
+    "id": "12319470",
+    "description": "Maintenance Release",
+    "name": "Scripting API 2.1.6",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2014-03-07",
+    "userReleaseDate": "07/Mar/14",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12326346",
+    "id": "12326346",
+    "name": "Scripting API 2.1.8",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2015-07-21",
+    "userReleaseDate": "21/Jul/15",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12338775",
+    "id": "12338775",
+    "name": "Scripting API 2.1.12",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2016-12-15",
+    "userReleaseDate": "15/Dec/16",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340474",
+    "id": "12340474",
+    "name": "Scripting API 2.2.0",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2017-05-01",
+    "userReleaseDate": "01/May/17",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12340480",
+    "id": "12340480",
+    "name": "Scripting API 2.2.2",
+    "archived": false,
+    "released": false,
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313260",
+    "id": "12313260",
+    "description": "First public release",
+    "name": "Samples Simple Demo 2.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313262",
+    "id": "12313262",
+    "description": "First public release",
+    "name": "Samples Webloader Service 2.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313263",
+    "id": "12313263",
+    "description": "First public release",
+    "name": "Samples Webloader UI 2.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12325043",
+    "id": "12325043",
+    "description": "First public release",
+    "name": "Request Analyzer 1.0.0",
+    "archived": false,
+    "released": false,
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313261",
+    "id": "12313261",
+    "description": "First public release",
+    "name": "Path Based RTP 2.0.2",
+    "archived": false,
+    "released": true,
+    "releaseDate": "2008-06-23",
+    "userReleaseDate": "23/Jun/08",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314787",
+    "id": "12314787",
+    "description": "Maintenance release",
+    "name": "Path based RTP 2.0.4",
+    "archived": false,
+    "released": false,
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313662",
+    "id": "12313662",
+    "description": "Maintenance Release",
+    "name": "Parent 5",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2009-05-14",
+    "userReleaseDate": "14/May/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12313945",
+    "id": "12313945",
+    "description": "Maintenance Release",
+    "name": "Parent 6",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2009-07-03",
+    "userReleaseDate": "03/Jul/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314079",
+    "id": "12314079",
+    "description": "Maintenance Release",
+    "name": "Parent 7",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2009-09-28",
+    "userReleaseDate": "28/Sep/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314251",
+    "id": "12314251",
+    "description": "Maintenance Release",
+    "name": "Parent 8",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2009-11-28",
+    "userReleaseDate": "28/Nov/09",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12314432",
+    "id": "12314432",
+    "description": "Maintenance Release",
+    "name": "Parent 9",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2010-05-11",
+    "userReleaseDate": "11/May/10",
+    "projectId": 12310710
+  },
+  {
+    "self": "https://issues.apache.org/jira/rest/api/2/version/12315011",
+    "id": "12315011",
+    "description": "Maintenance release",
+    "name": "Parent 10",
+    "archived": true,
+    "released": true,
+    "releaseDate": "2010-12-13",
+    "userReleaseDate": "13/Dec/10",
+    "projectId": 12310710
+  }
+]