address (some) review comments
diff --git a/server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java b/server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java
index 69b202d..83c9bb3 100644
--- a/server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/dns/DnsProviderManagerImpl.java
@@ -164,23 +164,30 @@
     }
 
     /**
-     * Rejects a DNS provider URL that resolves to an illegal address before any provider client is given
-     * the chance to connect to it. See {@link UriUtils#validateUrl(String)} for the exact rules enforced
-     * (including the requirement that the URL declares an {@code http}/{@code https} scheme).
-     * Expects {@code url} to already be trimmed.
+     * Trims and rejects a DNS provider URL that resolves to an illegal address before any provider client
+     * is given the chance to connect to it. See {@link UriUtils#validateUrl(String)} for the exact rules
+     * enforced (including the requirement that the URL declares an {@code http}/{@code https} scheme).
+     *
+     * @return the trimmed URL.
+     * @throws InvalidParameterValueException if the URL is blank or fails validation.
      */
-    private void validateDnsServerUrl(String url) {
-        if (StringUtils.isBlank(url)) {
-            throw new IllegalArgumentException("URL cannot be blank.");
+    private String validateDnsServerUrl(String url) {
+        String trimmedUrl = StringUtils.trim(url);
+        if (StringUtils.isBlank(trimmedUrl)) {
+            throw new InvalidParameterValueException("URL cannot be blank.");
         }
-        UriUtils.validateUrl(url);
+        try {
+            UriUtils.validateUrl(trimmedUrl);
+        } catch (IllegalArgumentException e) {
+            throw new InvalidParameterValueException(e.getMessage());
+        }
+        return trimmedUrl;
     }
 
     @Override
     @ActionEvent(eventType = EventTypes.EVENT_DNS_SERVER_ADD, eventDescription = "Adding a DNS Server")
     public DnsServer addDnsServer(AddDnsServerCmd cmd) {
-        String url = StringUtils.trim(cmd.getUrl());
-        validateDnsServerUrl(url);
+        String url = validateDnsServerUrl(cmd.getUrl());
         Account caller = CallContext.current().getCallingAccount();
         DnsServer existing = dnsServerDao.findByUrlAndAccount(url, caller.getId());
         if (existing != null) {
@@ -269,7 +276,7 @@
         if (cmd.getUrl() != null) {
             String url = StringUtils.trim(cmd.getUrl());
             if (!url.equals(originalUrl)) {
-                validateDnsServerUrl(url);
+                url = validateDnsServerUrl(url);
                 DnsServer duplicate = dnsServerDao.findByUrlAndAccount(url, dnsServer.getAccountId());
                 if (duplicate != null && duplicate.getId() != dnsServer.getId()) {
                     throw new InvalidParameterValueException("Another DNS server with this URL already exists.");
diff --git a/server/src/test/java/org/apache/cloudstack/dns/DnsProviderManagerImplTest.java b/server/src/test/java/org/apache/cloudstack/dns/DnsProviderManagerImplTest.java
index 94efaca..7008edf 100644
--- a/server/src/test/java/org/apache/cloudstack/dns/DnsProviderManagerImplTest.java
+++ b/server/src/test/java/org/apache/cloudstack/dns/DnsProviderManagerImplTest.java
@@ -803,7 +803,7 @@
         verify(dnsServerDao).persist(Mockito.argThat(s -> "http://192.0.2.1:8081".equals(((DnsServerVO) s).getUrl())));
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test(expected = InvalidParameterValueException.class)
     public void testAddDnsServerRejectsLoopbackUrl() {
         org.apache.cloudstack.api.command.user.dns.AddDnsServerCmd cmd = mock(
                 org.apache.cloudstack.api.command.user.dns.AddDnsServerCmd.class);
@@ -811,7 +811,7 @@
         manager.addDnsServer(cmd);
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test(expected = InvalidParameterValueException.class)
     public void testAddDnsServerRejectsUrlWithoutScheme() {
         org.apache.cloudstack.api.command.user.dns.AddDnsServerCmd cmd = mock(
                 org.apache.cloudstack.api.command.user.dns.AddDnsServerCmd.class);
@@ -868,7 +868,7 @@
         manager.updateDnsServer(cmd);
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test(expected = InvalidParameterValueException.class)
     public void testUpdateDnsServerRejectsLoopbackUrl() {
         org.apache.cloudstack.api.command.user.dns.UpdateDnsServerCmd cmd = mock(
                 org.apache.cloudstack.api.command.user.dns.UpdateDnsServerCmd.class);