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);
   }
 }
