Fix Jira issue not found

After I9a0183b58, plugin was able to connect to a Jira server but failed
to find or annotate issues. The method URL(context,spec) in JiraRestApi
caused the issue: If the spec begins with a forward slash, it replaces
the path provided in the passed URL context as a first parameter.
This is fixed by appending the spec to the URL string and converting it
directly into the URL.

Bug: Issue 8263
Change-Id: I3ff701b25d9c69a4ebed88e3ff07f6390ea177a9
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApi.java b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApi.java
index 9d7589d..1282dae 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApi.java
@@ -14,12 +14,12 @@
 
 package com.googlesource.gerrit.plugins.its.jira.restapi;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.gson.Gson;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
 import java.net.Proxy;
 import java.net.ProxySelector;
 import java.net.URL;
@@ -30,7 +30,7 @@
 /** Jira Rest Client. */
 public class JiraRestApi<T> {
   private static final String BASE_PREFIX = "rest/api/2";
-  private final URL baseUrl;
+  private final String baseUrl;
   private final String auth;
   private final Gson gson;
 
@@ -45,10 +45,9 @@
    * @param user username of the jira user
    * @param pass password of the jira user
    */
-  JiraRestApi(URL url, String user, String pass, Class<T> classOfT, String classPrefix)
-      throws MalformedURLException {
+  JiraRestApi(URL url, String user, String pass, Class<T> classOfT, String classPrefix) {
     this.auth = Base64.getEncoder().encodeToString((user + ":" + pass).getBytes());
-    this.baseUrl = new URL(url, BASE_PREFIX + classPrefix);
+    this.baseUrl = url + BASE_PREFIX + classPrefix;
     this.gson = new Gson();
     this.classOfT = classOfT;
   }
@@ -80,7 +79,8 @@
     return doGet(spec, passCode, null);
   }
 
-  URL getBaseUrl() {
+  @VisibleForTesting
+  String getBaseUrl() {
     return baseUrl;
   }
 
@@ -97,7 +97,7 @@
 
   private HttpURLConnection prepHttpConnection(String spec, boolean isPostRequest)
       throws IOException {
-    URL url = new URL(baseUrl, spec);
+    URL url = new URL(baseUrl + spec);
     ProxySelector proxySelector = ProxySelector.getDefault();
     Proxy proxy = HttpSupport.proxyFor(proxySelector, url);
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java
index 3c4da25..c4c468d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java
@@ -14,20 +14,19 @@
     this.pass = pass;
   }
 
-  public <T> JiraRestApi<T> get(Class<T> classOfT, String classPrefix)
-      throws MalformedURLException {
+  public <T> JiraRestApi<T> get(Class<T> classOfT, String classPrefix) {
     return new JiraRestApi<>(url, user, pass, classOfT, classPrefix);
   }
 
-  public JiraRestApi<JiraIssue> getIssue() throws MalformedURLException {
+  public JiraRestApi<JiraIssue> getIssue() {
     return get(JiraIssue.class, "/issue");
   }
 
-  public JiraRestApi<JiraServerInfo> getServerInfo() throws MalformedURLException {
+  public JiraRestApi<JiraServerInfo> getServerInfo() {
     return get(JiraServerInfo.class, "/serverInfo");
   }
 
-  public JiraRestApi<JiraProject[]> getProjects() throws MalformedURLException {
+  public JiraRestApi<JiraProject[]> getProjects() {
     return get(JiraProject[].class, "/project");
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiTest.java
index 77fb4bf..a789353 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiTest.java
@@ -12,7 +12,7 @@
     JiraRestApi<JiraServerInfo> serverInfo =
         new JiraRestApiProvider(nonRootJiraUrl, "", "").getServerInfo();
 
-    String jiraApiUrl = serverInfo.getBaseUrl().toString();
+    String jiraApiUrl = serverInfo.getBaseUrl();
     assertThat(jiraApiUrl).startsWith(nonRootJiraUrl);
   }
 
@@ -22,7 +22,7 @@
     JiraRestApi<JiraServerInfo> serverInfo =
         new JiraRestApiProvider(nonRootJiraUrl, "", "").getServerInfo();
 
-    String jiraApiUrl = serverInfo.getBaseUrl().toString();
+    String jiraApiUrl = serverInfo.getBaseUrl();
     assertThat(jiraApiUrl).startsWith(nonRootJiraUrl);
   }
 
@@ -32,7 +32,7 @@
     JiraRestApi<JiraServerInfo> serverInfo =
         new JiraRestApiProvider(rootJiraUrl, "", "").getServerInfo();
 
-    String jiraApiUrl = serverInfo.getBaseUrl().toString();
+    String jiraApiUrl = serverInfo.getBaseUrl();
     assertThat(jiraApiUrl).startsWith(rootJiraUrl);
   }
 }