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 1282dae..9d7589d 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 String baseUrl;
+  private final URL baseUrl;
   private final String auth;
   private final Gson gson;
 
@@ -45,9 +45,10 @@
    * @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) {
+  JiraRestApi(URL url, String user, String pass, Class<T> classOfT, String classPrefix)
+      throws MalformedURLException {
     this.auth = Base64.getEncoder().encodeToString((user + ":" + pass).getBytes());
-    this.baseUrl = url + BASE_PREFIX + classPrefix;
+    this.baseUrl = new URL(url, BASE_PREFIX + classPrefix);
     this.gson = new Gson();
     this.classOfT = classOfT;
   }
@@ -79,8 +80,7 @@
     return doGet(spec, passCode, null);
   }
 
-  @VisibleForTesting
-  String getBaseUrl() {
+  URL 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 c4c468d..3c4da25 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,19 +14,20 @@
     this.pass = pass;
   }
 
-  public <T> JiraRestApi<T> get(Class<T> classOfT, String classPrefix) {
+  public <T> JiraRestApi<T> get(Class<T> classOfT, String classPrefix)
+      throws MalformedURLException {
     return new JiraRestApi<>(url, user, pass, classOfT, classPrefix);
   }
 
-  public JiraRestApi<JiraIssue> getIssue() {
+  public JiraRestApi<JiraIssue> getIssue() throws MalformedURLException {
     return get(JiraIssue.class, "/issue");
   }
 
-  public JiraRestApi<JiraServerInfo> getServerInfo() {
+  public JiraRestApi<JiraServerInfo> getServerInfo() throws MalformedURLException {
     return get(JiraServerInfo.class, "/serverInfo");
   }
 
-  public JiraRestApi<JiraProject[]> getProjects() {
+  public JiraRestApi<JiraProject[]> getProjects() throws MalformedURLException {
     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 a789353..77fb4bf 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();
+    String jiraApiUrl = serverInfo.getBaseUrl().toString();
     assertThat(jiraApiUrl).startsWith(nonRootJiraUrl);
   }
 
@@ -22,7 +22,7 @@
     JiraRestApi<JiraServerInfo> serverInfo =
         new JiraRestApiProvider(nonRootJiraUrl, "", "").getServerInfo();
 
-    String jiraApiUrl = serverInfo.getBaseUrl();
+    String jiraApiUrl = serverInfo.getBaseUrl().toString();
     assertThat(jiraApiUrl).startsWith(nonRootJiraUrl);
   }
 
@@ -32,7 +32,7 @@
     JiraRestApi<JiraServerInfo> serverInfo =
         new JiraRestApiProvider(rootJiraUrl, "", "").getServerInfo();
 
-    String jiraApiUrl = serverInfo.getBaseUrl();
+    String jiraApiUrl = serverInfo.getBaseUrl().toString();
     assertThat(jiraApiUrl).startsWith(rootJiraUrl);
   }
 }
