You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2015/04/29 12:08:26 UTC

[09/10] stratos git commit: Update rest API with new exceptions, handling status codes better

Update rest API with new exceptions, handling status codes better


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b9d2e3e0
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b9d2e3e0
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b9d2e3e0

Branch: refs/heads/master
Commit: b9d2e3e047064edb2a89f0eabdc8aaf0fbaea80f
Parents: 2fb25df
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Wed Apr 29 15:16:00 2015 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Wed Apr 29 15:38:11 2015 +0530

----------------------------------------------------------------------
 .../rest/endpoint/api/StratosApiV40Utils.java   |   9 +-
 .../rest/endpoint/api/StratosApiV41.java        | 195 +++++++++++++------
 .../rest/endpoint/api/StratosApiV41Utils.java   | 192 +++++++++---------
 3 files changed, 226 insertions(+), 170 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/b9d2e3e0/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV40Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV40Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV40Utils.java
index 2cdea8c..061a988 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV40Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV40Utils.java
@@ -22,6 +22,7 @@ import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.stub.AutoscalerServiceAutoScalingPolicyAlreadyExistExceptionException;
 import org.apache.stratos.autoscaler.stub.AutoscalerServiceInvalidPolicyExceptionException;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceCartridgeAlreadyExistsExceptionException;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeDefinitionExceptionException;
@@ -164,11 +165,9 @@ public class StratosApiV40Utils {
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
-                String message = e.getFaultMessage()
-                        .getInvalidPolicyException().getMessage();
-                log.error(message, e);
-                throw new RestAPIException(message, e);
+            } catch (AutoscalerServiceAutoScalingPolicyAlreadyExistExceptionException e) {
+                log.error(e.getMessage(), e);
+                throw new RestAPIException(e.getMessage(), e);
             }
 
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/b9d2e3e0/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index c176b9f..1356187 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -20,6 +20,9 @@ package org.apache.stratos.rest.endpoint.api;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.stub.*;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceNetworkPartitionAlreadyExistsExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceNetworkPartitionNotExistsExceptionException;
 import org.apache.stratos.common.beans.*;
 import org.apache.stratos.common.beans.application.ApplicationBean;
 import org.apache.stratos.common.beans.application.ApplicationNetworkPartitionIdListBean;
@@ -38,13 +41,12 @@ import org.apache.stratos.common.beans.policy.deployment.ApplicationPolicyBean;
 import org.apache.stratos.common.beans.policy.deployment.DeploymentPolicyBean;
 import org.apache.stratos.common.beans.topology.ApplicationInfoBean;
 import org.apache.stratos.common.beans.topology.ClusterBean;
+import org.apache.stratos.common.exception.InvalidEmailException;
+import org.apache.stratos.manager.service.stub.StratosManagerServiceDomainMappingExceptionException;
 import org.apache.stratos.rest.endpoint.Utils;
 import org.apache.stratos.rest.endpoint.annotation.AuthorizationAction;
 import org.apache.stratos.rest.endpoint.annotation.SuperTenantService;
-import org.apache.stratos.rest.endpoint.exception.ApplicationAlreadyDeployedException;
-import org.apache.stratos.rest.endpoint.exception.ApplicationAlreadyExistException;
-import org.apache.stratos.rest.endpoint.exception.RestAPIException;
-import org.apache.stratos.rest.endpoint.exception.TenantNotFoundException;
+import org.apache.stratos.rest.endpoint.exception.*;
 import org.wso2.carbon.context.PrivilegedCarbonContext;
 
 import javax.servlet.http.HttpServletRequest;
@@ -155,21 +157,21 @@ public class StratosApiV41 extends AbstractApi {
     public Response addDeploymentPolicy(
             DeploymentPolicyBean deploymentPolicyDefinitionBean) throws RestAPIException {
 
+        String deploymentPolicyID = deploymentPolicyDefinitionBean.getId();
         try {
-            String deploymentPolicyID = deploymentPolicyDefinitionBean.getId();
             // TODO :: Deployment policy validation
             StratosApiV41Utils.addDeploymentPolicy(deploymentPolicyDefinitionBean);
-            URI url = uriInfo.getAbsolutePathBuilder().path(deploymentPolicyID).build();
-            return Response.created(url).entity(new SuccessResponseBean(Response.Status.CREATED.getStatusCode(),
-                    String.format("Deployment policy added successfully: " + "[deployment-policy-id] %s",
-                            deploymentPolicyID))).build();
         } catch (RestAPIException e) {
-            if (e.getCause().getMessage().contains("already exists")) {
-                return Response.status(Response.Status.CONFLICT).build();
-            } else {
-                throw e;
-            }
+            throw e;
+        } catch (AutoscalerServiceInvalidDeploymentPolicyExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        } catch (AutoscalerServiceDeploymentPolicyAlreadyExistsExceptionException e) {
+            return Response.status(Response.Status.CONFLICT).build();
         }
+        URI url = uriInfo.getAbsolutePathBuilder().path(deploymentPolicyID).build();
+        return Response.created(url).entity(new SuccessResponseBean(Response.Status.CREATED.getStatusCode(),
+                String.format("Deployment policy added successfully: " + "[deployment-policy-id] %s",
+                        deploymentPolicyID))).build();
     }
 
     /**
@@ -231,7 +233,15 @@ public class StratosApiV41 extends AbstractApi {
         String deploymentPolicyID = deploymentPolicyDefinitionBean.getId();
         // TODO :: Deployment policy validation
 
-        StratosApiV41Utils.updateDeploymentPolicy(deploymentPolicyDefinitionBean);
+        try {
+            StratosApiV41Utils.updateDeploymentPolicy(deploymentPolicyDefinitionBean);
+        } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        } catch (AutoscalerServiceInvalidDeploymentPolicyExceptionException e) {
+            return Response.status(Response.Status.NOT_FOUND).build();
+        } catch (AutoscalerServiceDeploymentPolicyNotExistsExceptionException e) {
+            return Response.status(Response.Status.NOT_FOUND).build();
+        }
         URI url = uriInfo.getAbsolutePathBuilder().path(deploymentPolicyID).build();
         return Response.ok(url).entity(new SuccessResponseBean(Response.Status.OK.getStatusCode(),
                 String.format("Deployment policy updated successfully: " + "[deployment-policy-id] %s",
@@ -253,7 +263,11 @@ public class StratosApiV41 extends AbstractApi {
     public Response removeDeploymentPolicy(
             @PathParam("depolymentPolicyID") String deploymentPolicyID) throws RestAPIException {
 
-        StratosApiV41Utils.removeDeploymentPolicy(deploymentPolicyID);
+        try {
+            StratosApiV41Utils.removeDeploymentPolicy(deploymentPolicyID);
+        } catch (AutoscalerServiceDeploymentPolicyNotExistsExceptionException e) {
+            return Response.status(Response.Status.NOT_FOUND).build();
+        }
         URI url = uriInfo.getAbsolutePathBuilder().path(deploymentPolicyID).build();
         return Response.ok(url).entity(new SuccessResponseBean(Response.Status.OK.getStatusCode(),
                 String.format("Deployment policy removed successfully: " + "[deployment-policy-id] %s",
@@ -517,15 +531,13 @@ public class StratosApiV41 extends AbstractApi {
     public Response addNetworkPartition(
             NetworkPartitionBean networkPartitionBean) throws RestAPIException {
         String networkPartitionId = networkPartitionBean.getId();
-        NetworkPartitionBean networkPartition = StratosApiV41Utils.getNetworkPartition(networkPartitionId);
-        if (networkPartition != null) {
-            String msg = String
-                    .format("Network partition already exists: [network-partition-id] %s", networkPartitionId);
-            log.warn(msg);
+        try {
+            StratosApiV41Utils.addNetworkPartition(networkPartitionBean);
+        } catch (CloudControllerServiceNetworkPartitionAlreadyExistsExceptionException e) {
             return Response.status(Response.Status.CONFLICT)
-                    .entity(new ErrorResponseBean(Response.Status.CONFLICT.getStatusCode(), msg)).build();
+                    .entity(new ErrorResponseBean(Response.Status.CONFLICT.getStatusCode(), e.getLocalizedMessage()))
+                    .build();
         }
-        StratosApiV41Utils.addNetworkPartition(networkPartitionBean);
         URI url = uriInfo.getAbsolutePathBuilder().path(networkPartitionId).build();
         return Response.created(url).entity(new SuccessResponseBean(Response.Status.CREATED.getStatusCode(),
                 String.format("Network partition added successfully: [network-partition] %s", networkPartitionId)))
@@ -586,11 +598,12 @@ public class StratosApiV41 extends AbstractApi {
     @AuthorizationAction("/permission/protected/manage/removeNetworkPartition")
     public Response removeNetworkPartition(
             @PathParam("networkPartitionId") String networkPartitionId) throws RestAPIException {
-        NetworkPartitionBean networkPartition = StratosApiV41Utils.getNetworkPartition(networkPartitionId);
-        if (networkPartition == null) {
+
+        try {
+            StratosApiV41Utils.removeNetworkPartition(networkPartitionId);
+        } catch (CloudControllerServiceNetworkPartitionNotExistsExceptionException e) {
             return Response.status(Response.Status.NOT_FOUND).build();
         }
-        StratosApiV41Utils.removeNetworkPartition(networkPartitionId);
         return Response.ok().entity(new SuccessResponseBean(Response.Status.OK.getStatusCode(),
                 String.format("Network Partition deleted successfully: [network-partition] %s",
                         networkPartitionId))).build();
@@ -746,11 +759,11 @@ public class StratosApiV41 extends AbstractApi {
                     String.format("Application policy added successfully: [application-policy] %s",
                             applicationPolicy.getId()))).build();
         } catch (RestAPIException e) {
-            if (e.getMessage().contains("already exists")) {
-                return Response.status(Response.Status.CONFLICT).build();
-            } else {
-                throw e;
-            }
+            throw e;
+        } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        } catch (AutoscalerServiceInvalidApplicationPolicyExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
         }
     }
 
@@ -768,12 +781,15 @@ public class StratosApiV41 extends AbstractApi {
     @AuthorizationAction("/permission/protected/manage/getApplicationPolicy")
     public Response getApplicationPolicy(
             @PathParam("applicationPolicyId") String applicationPolicyId) throws RestAPIException {
-        ApplicationPolicyBean applicationPolicyBean = StratosApiV41Utils.getApplicationPolicy(applicationPolicyId);
-        if (applicationPolicyBean == null) {
-            return Response.status(Response.Status.NOT_FOUND).build();
+        try {
+            ApplicationPolicyBean applicationPolicyBean = StratosApiV41Utils.getApplicationPolicy(applicationPolicyId);
+            if (applicationPolicyBean == null) {
+                return Response.status(Response.Status.NOT_FOUND).build();
+            }
+            return Response.ok(applicationPolicyBean).build();
+        } catch (ApplicationPolicyIdIsEmptyException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
         }
-
-        return Response.ok(applicationPolicyBean).build();
     }
 
     /**
@@ -811,11 +827,16 @@ public class StratosApiV41 extends AbstractApi {
     @AuthorizationAction("/permission/admin/manage/removeApplicationPolicy")
     public Response removeApplicationPolicy(
             @PathParam("applicationPolicyId") String applicationPolicyId) throws RestAPIException {
-
-        StratosApiV41Utils.removeApplicationPolicy(applicationPolicyId);
-        return Response.ok().entity(new SuccessResponseBean(Response.Status.OK.getStatusCode(),
-                String.format("Application policy deleted successfully: [application-policy] %s",
-                        applicationPolicyId))).build();
+        try {
+            StratosApiV41Utils.removeApplicationPolicy(applicationPolicyId);
+            return Response.ok().entity(new SuccessResponseBean(Response.Status.OK.getStatusCode(),
+                    String.format("Application policy deleted successfully: [application-policy] %s",
+                            applicationPolicyId))).build();
+        } catch (ApplicationPolicyIdIsEmptyException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        }
     }
 
     /**
@@ -833,7 +854,13 @@ public class StratosApiV41 extends AbstractApi {
     public Response updateApplicationPolicy(
             ApplicationPolicyBean applicationPolicy) throws RestAPIException {
 
-        StratosApiV41Utils.updateApplicationPolicy(applicationPolicy);
+        try {
+            StratosApiV41Utils.updateApplicationPolicy(applicationPolicy);
+        } catch (AutoscalerServiceInvalidApplicationPolicyExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        } catch (AutoscalerServiceApplicatioinPolicyNotExistsExceptionException e) {
+            return Response.status(Response.Status.NOT_FOUND).build();
+        }
         return Response.ok().entity(new SuccessResponseBean(Response.Status.OK.getStatusCode(),
                 String.format("Application policy updated successfully: [application-policy] %s",
                         applicationPolicy.getId()))).build();
@@ -946,7 +973,11 @@ public class StratosApiV41 extends AbstractApi {
     public Response addDomainMappings(
             @PathParam("applicationId") String applicationId, ApplicationDomainMappingsBean domainMappingsBean)
             throws RestAPIException {
-        StratosApiV41Utils.addApplicationDomainMappings(applicationId, domainMappingsBean);
+        try {
+            StratosApiV41Utils.addApplicationDomainMappings(applicationId, domainMappingsBean);
+        } catch (StratosManagerServiceDomainMappingExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        }
         List<DomainMappingBean> mappings = domainMappingsBean.getDomainMappings();
         List<String> domainMappingList = new ArrayList<String>();
         for (DomainMappingBean domainMappingBean : mappings) {
@@ -974,7 +1005,11 @@ public class StratosApiV41 extends AbstractApi {
     public Response removeDomainMappings(
             @PathParam("applicationId") String applicationId, ApplicationDomainMappingsBean domainMapppingsBean)
             throws RestAPIException {
-        StratosApiV41Utils.removeApplicationDomainMappings(applicationId, domainMapppingsBean);
+        try {
+            StratosApiV41Utils.removeApplicationDomainMappings(applicationId, domainMapppingsBean);
+        } catch (StratosManagerServiceDomainMappingExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        }
         List<DomainMappingBean> mappings = domainMapppingsBean.getDomainMappings();
         List<String> domainMappingList = new ArrayList<String>();
         for (DomainMappingBean domainMappingBean : mappings) {
@@ -999,9 +1034,14 @@ public class StratosApiV41 extends AbstractApi {
     @AuthorizationAction("/permission/protected/manage/getDomainMappings")
     public Response getDomainMappings(
             @PathParam("applicationId") String applicationId) throws RestAPIException {
-        List<DomainMappingBean> domainMappingsBeanList = StratosApiV41Utils.getApplicationDomainMappings(applicationId);
-        if (domainMappingsBeanList == null || domainMappingsBeanList.isEmpty()) {
-            return Response.status(Response.Status.NOT_FOUND).build();
+        List<DomainMappingBean> domainMappingsBeanList = null;
+        try {
+            domainMappingsBeanList = StratosApiV41Utils.getApplicationDomainMappings(applicationId);
+            if (domainMappingsBeanList == null || domainMappingsBeanList.isEmpty()) {
+                return Response.status(Response.Status.NOT_FOUND).build();
+            }
+        } catch (StratosManagerServiceDomainMappingExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
         }
 
         DomainMappingBean[] domainMappingsBeans = domainMappingsBeanList
@@ -1159,12 +1199,12 @@ public class StratosApiV41 extends AbstractApi {
             return Response.created(url).entity(new SuccessResponseBean(Response.Status.CREATED.getStatusCode(),
                     String.format("Autoscaling policy added successfully: [autoscale-policy] %s",
                             autoscalePolicy.getId()))).build();
+        } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        } catch (AutoscalerServiceAutoScalingPolicyAlreadyExistExceptionException e) {
+            return Response.status(Response.Status.CONFLICT).build();
         } catch (RestAPIException e) {
-            if (e.getMessage().contains("already exists")) {
-                return Response.status(Response.Status.CONFLICT).build();
-            } else {
-                throw e;
-            }
+            throw e;
         }
     }
 
@@ -1183,7 +1223,11 @@ public class StratosApiV41 extends AbstractApi {
     public Response updateAutoscalingPolicy(
             AutoscalePolicyBean autoscalePolicy) throws RestAPIException {
 
-        StratosApiV41Utils.updateAutoscalingPolicy(autoscalePolicy);
+        try {
+            StratosApiV41Utils.updateAutoscalingPolicy(autoscalePolicy);
+        } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
+        }
         return Response.ok().entity(new SuccessResponseBean(Response.Status.OK.getStatusCode(),
                 String.format("Autoscaling policy updated successfully: [autoscale-policy] %s",
                         autoscalePolicy.getId()))).build();
@@ -1204,7 +1248,11 @@ public class StratosApiV41 extends AbstractApi {
     public Response updateNetworkPartition(
             NetworkPartitionBean networkPartition) throws RestAPIException {
 
-        StratosApiV41Utils.updateNetworkPartition(networkPartition);
+        try {
+            StratosApiV41Utils.updateNetworkPartition(networkPartition);
+        } catch (CloudControllerServiceNetworkPartitionNotExistsExceptionException e) {
+            return Response.status(Response.Status.NOT_FOUND).build();
+        }
         return Response.ok().entity(new SuccessResponseBean(Response.Status.OK.getStatusCode(),
                 String.format("Network Partition updated successfully: [network-partition] %s",
                         networkPartition.getId()))).build();
@@ -1225,7 +1273,14 @@ public class StratosApiV41 extends AbstractApi {
     public Response removeAutoscalingPolicy(
             @PathParam("autoscalingPolicyId") String autoscalingPolicyId) throws RestAPIException {
 
-        StratosApiV41Utils.removeAutoscalingPolicy(autoscalingPolicyId);
+        try {
+            StratosApiV41Utils.removeAutoscalingPolicy(autoscalingPolicyId);
+        } catch (AutoscalerServiceUnremovablePolicyExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).entity(new ErrorResponseBean(
+                    Response.Status.NOT_ACCEPTABLE.getStatusCode(), e.getMessage())).build();
+        } catch (AutoscalerServicePolicyDoesNotExistExceptionException e) {
+            return Response.status(Response.Status.NOT_FOUND).build();
+        }
         return Response.ok().entity(new SuccessResponseBean(Response.Status.OK.getStatusCode(),
                 String.format("Autoscaling policy deleted successfully: [autoscale-policy] %s",
                         autoscalingPolicyId))).build();
@@ -1246,12 +1301,15 @@ public class StratosApiV41 extends AbstractApi {
     @AuthorizationAction("/permission/admin/manage/cluster")
     public Response getCluster(
             @PathParam("clusterId") String clusterId) throws RestAPIException {
-
-        ClusterBean clusterBean = StratosApiV41Utils.getClusterInfo(clusterId);
-        if (clusterBean == null) {
-            return Response.status(Response.Status.NOT_FOUND).build();
-        } else {
-            return Response.ok().entity(clusterBean).build();
+        try {
+            ClusterBean clusterBean = StratosApiV41Utils.getClusterInfo(clusterId);
+            if (clusterBean == null) {
+                return Response.status(Response.Status.NOT_FOUND).build();
+            } else {
+                return Response.ok().entity(clusterBean).build();
+            }
+        } catch (ClusterIdIsEmptyException e) {
+            return Response.status(Response.Status.BAD_REQUEST).build();
         }
     }
 
@@ -1274,11 +1332,18 @@ public class StratosApiV41 extends AbstractApi {
     public Response addTenant(
             org.apache.stratos.common.beans.TenantInfoBean tenantInfoBean) throws RestAPIException {
 
-        StratosApiV41Utils.addTenant(tenantInfoBean);
+        try {
+            StratosApiV41Utils.addTenant(tenantInfoBean);
+
+        } catch (InvalidEmailException e) {
+            Response.status(Response.Status.BAD_REQUEST).build();
+        } catch (InvalidDomainException e) {
+            Response.status(Response.Status.BAD_REQUEST).build();
+        }
         URI url = uriInfo.getAbsolutePathBuilder().path(tenantInfoBean.getTenantDomain()).build();
         return Response.created(url).entity(
-                new SuccessResponseBean(Response.Status.CREATED.getStatusCode(),
-                        String.format("Tenant added successfully: [tenant] %s", tenantInfoBean.getTenantDomain()))).build();
+                new SuccessResponseBean(Response.Status.CREATED.getStatusCode(), String.format(
+                        "Tenant added successfully: [tenant] %s", tenantInfoBean.getTenantDomain()))).build();
     }
 
     /**
@@ -1300,6 +1365,8 @@ public class StratosApiV41 extends AbstractApi {
             StratosApiV41Utils.updateExistingTenant(tenantInfoBean);
         } catch (TenantNotFoundException ex) {
             Response.status(Response.Status.NOT_FOUND).build();
+        } catch (InvalidEmailException e) {
+            Response.status(Response.Status.BAD_REQUEST).build();
         } catch (Exception e) {
             String msg = "Error in updating tenant " + tenantInfoBean.getTenantDomain();
             log.error(msg, e);

http://git-wip-us.apache.org/repos/asf/stratos/blob/b9d2e3e0/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index 87b628f..aafaf66 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -57,8 +57,10 @@ import org.apache.stratos.common.beans.topology.GroupInstanceBean;
 import org.apache.stratos.common.client.AutoscalerServiceClient;
 import org.apache.stratos.common.client.CloudControllerServiceClient;
 import org.apache.stratos.common.client.StratosManagerServiceClient;
+import org.apache.stratos.common.exception.InvalidEmailException;
 import org.apache.stratos.common.util.ClaimsMgtUtil;
 import org.apache.stratos.common.util.CommonUtil;
+import org.apache.stratos.manager.service.stub.StratosManagerServiceDomainMappingExceptionException;
 import org.apache.stratos.manager.service.stub.domain.application.signup.ApplicationSignUp;
 import org.apache.stratos.manager.service.stub.domain.application.signup.ArtifactRepository;
 import org.apache.stratos.manager.service.stub.domain.application.signup.DomainMapping;
@@ -73,10 +75,7 @@ import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.apache.stratos.messaging.message.receiver.application.ApplicationManager;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.apache.stratos.rest.endpoint.ServiceHolder;
-import org.apache.stratos.rest.endpoint.exception.ApplicationAlreadyDeployedException;
-import org.apache.stratos.rest.endpoint.exception.ApplicationAlreadyExistException;
-import org.apache.stratos.rest.endpoint.exception.RestAPIException;
-import org.apache.stratos.rest.endpoint.exception.TenantNotFoundException;
+import org.apache.stratos.rest.endpoint.exception.*;
 import org.apache.stratos.rest.endpoint.util.converter.ObjectConverter;
 import org.wso2.carbon.context.CarbonContext;
 import org.wso2.carbon.context.PrivilegedCarbonContext;
@@ -322,7 +321,8 @@ public class StratosApiV41Utils {
         List<CartridgeBean> cartridges = new ArrayList<CartridgeBean>();
 
         if (log.isDebugEnabled()) {
-            log.debug("Getting available cartridges. [Search String]: " + cartridgeSearchString + ", [Multi-Tenant]: " + multiTenant);
+            log.debug("Getting available cartridges. [Search String]: " + cartridgeSearchString + ", [Multi-Tenant]: "
+                    + multiTenant);
         }
 
 
@@ -551,7 +551,9 @@ public class StratosApiV41Utils {
 
     // Util methods for Autoscaling policies
 
-    public static void addAutoscalingPolicy(AutoscalePolicyBean autoscalePolicyBean) throws RestAPIException {
+    public static void addAutoscalingPolicy(AutoscalePolicyBean autoscalePolicyBean) throws RestAPIException,
+            AutoscalerServiceInvalidPolicyExceptionException,
+            AutoscalerServiceAutoScalingPolicyAlreadyExistExceptionException {
 
         log.info(String.format("Adding autoscaling policy: [id] %s", autoscalePolicyBean.getId()));
 
@@ -562,26 +564,22 @@ public class StratosApiV41Utils {
                     convertToCCAutoscalerPojo(autoscalePolicyBean);
 
             try {
-                autoscalerServiceClient
-                        .addAutoscalingPolicy(autoscalePolicy);
+                autoscalerServiceClient.addAutoscalingPolicy(autoscalePolicy);
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
-                String message = e.getFaultMessage()
-                        .getInvalidPolicyException().getMessage();
-                log.error(message, e);
-                throw new RestAPIException(message, e);
             }
         }
     }
 
-    public static void addApplicationPolicy(ApplicationPolicyBean applicationPolicyBean) throws RestAPIException {
+    public static void addApplicationPolicy(ApplicationPolicyBean applicationPolicyBean) throws RestAPIException,
+            AutoscalerServiceInvalidPolicyExceptionException,
+            AutoscalerServiceInvalidApplicationPolicyExceptionException {
 
         if (applicationPolicyBean == null) {
             String msg = "Application policy bean is null";
             log.error(msg);
-            throw new RestAPIException(msg);
+            throw new ApplicationPolicyIsEmptyException(msg);
         }
 
         AutoscalerServiceClient serviceClient = getAutoscalerServiceClient();
@@ -591,29 +589,23 @@ public class StratosApiV41Utils {
             if (applicationPolicy == null) {
                 String msg = "Application policy is null";
                 log.error(msg);
-                throw new RestAPIException(msg);
+                throw new ApplicationPolicyIsEmptyException(msg);
             }
             serviceClient.addApplicationPolicy(applicationPolicy);
         } catch (RemoteException e) {
             String msg = "Could not add application policy. " + e.getLocalizedMessage();
             log.error(msg, e);
             throw new RestAPIException(msg);
-        } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
-            String msg = "Could not add application policy. Invalid policy. " + e.getLocalizedMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg);
         } catch (AutoscalerServiceRemoteExceptionException e) {
             String msg = "Could not add application policy. " + e.getLocalizedMessage();
             log.error(msg, e);
             throw new RestAPIException(msg);
-        } catch (AutoscalerServiceInvalidApplicationPolicyExceptionException e) {
-            String msg = "Could not add application policy. Invalid application policy. " + e.getLocalizedMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg);
         }
     }
 
-    public static void updateApplicationPolicy(ApplicationPolicyBean applicationPolicyBean) throws RestAPIException {
+    public static void updateApplicationPolicy(ApplicationPolicyBean applicationPolicyBean) throws RestAPIException,
+            AutoscalerServiceInvalidApplicationPolicyExceptionException,
+            AutoscalerServiceApplicatioinPolicyNotExistsExceptionException {
 
         log.info(String.format("Updating application policy: [id] %s", applicationPolicyBean.getId()));
 
@@ -629,19 +621,10 @@ public class StratosApiV41Utils {
                 String msg = "Could not update application policy" + e.getLocalizedMessage();
                 log.error(msg, e);
                 throw new RestAPIException(msg);
-            } catch (AutoscalerServiceApplicatioinPolicyNotExistsExceptionException e) {
-                String msg = "Could not update application policy. Application policy not exists" +
-                        e.getLocalizedMessage();
-                log.error(msg, e);
-                throw new RestAPIException(msg);
             } catch (AutoscalerServiceRemoteExceptionException e) {
                 String msg = "Could not update application policy" + e.getLocalizedMessage();
                 log.error(msg, e);
                 throw new RestAPIException(msg);
-            } catch (AutoscalerServiceInvalidApplicationPolicyExceptionException e) {
-                String msg = "Could not update application policy. Invalid application policy" + e.getLocalizedMessage();
-                log.error(msg, e);
-                throw new RestAPIException(msg);
             }
         }
     }
@@ -667,39 +650,40 @@ public class StratosApiV41Utils {
         if (applicationPolicyId == null) {
             String msg = "Application policy bean id null";
             log.error(msg);
-            throw new RestAPIException(msg);
+            throw new ApplicationPolicyIdIsEmptyException(msg);
         }
 
         if (StringUtils.isBlank(applicationPolicyId)) {
             String msg = "Application policy id is empty";
             log.error(msg);
-            throw new RestAPIException(msg);
+            throw new ApplicationPolicyIdIsEmptyException(msg);
         }
 
         try {
             AutoscalerServiceClient serviceClient = AutoscalerServiceClient.getInstance();
             ApplicationPolicy applicationPolicy = serviceClient.getApplicationPolicy(applicationPolicyId);
             return ObjectConverter.convertASStubApplicationPolicyToApplicationPolicy(applicationPolicy);
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String message = String.format("Could not get application policy [application-policy-id] %s",
                     applicationPolicyId);
             log.error(message);
-            throw new RuntimeException(message, e);
+            throw new RestAPIException(message, e);
         }
     }
 
-    public static void removeApplicationPolicy(String applicationPolicyId) throws RestAPIException {
+    public static void removeApplicationPolicy(String applicationPolicyId) throws RestAPIException,
+            AutoscalerServiceInvalidPolicyExceptionException {
 
         if (applicationPolicyId == null) {
             String msg = "Application policy bean id null";
             log.error(msg);
-            throw new RestAPIException(msg);
+            throw new ApplicationPolicyIdIsEmptyException(msg);
         }
 
         if (StringUtils.isBlank(applicationPolicyId)) {
             String msg = "Application policy id is empty";
             log.error(msg);
-            throw new RestAPIException(msg);
+            throw new ApplicationPolicyIdIsEmptyException(msg);
         }
 
         AutoscalerServiceClient serviceClient = getAutoscalerServiceClient();
@@ -709,14 +693,11 @@ public class StratosApiV41Utils {
             String msg = "Could not remove application policy. " + e.getLocalizedMessage();
             log.error(msg, e);
             throw new RestAPIException(msg);
-        } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
-            String msg = "Could not remove application policy. " + e.getLocalizedMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg);
         }
     }
 
-    public static void updateAutoscalingPolicy(AutoscalePolicyBean autoscalePolicyBean) throws RestAPIException {
+    public static void updateAutoscalingPolicy(AutoscalePolicyBean autoscalePolicyBean) throws RestAPIException,
+            AutoscalerServiceInvalidPolicyExceptionException {
 
         log.info(String.format("Updating autoscaling policy: [id] %s", autoscalePolicyBean.getId()));
 
@@ -730,15 +711,13 @@ public class StratosApiV41Utils {
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
-                String message = e.getFaultMessage().getInvalidPolicyException().getMessage();
-                log.error(message, e);
-                throw new RestAPIException(message, e);
             }
         }
     }
 
-    public static void removeAutoscalingPolicy(String autoscalePolicyId) throws RestAPIException {
+    public static void removeAutoscalingPolicy(String autoscalePolicyId) throws RestAPIException,
+            AutoscalerServicePolicyDoesNotExistExceptionException,
+            AutoscalerServiceUnremovablePolicyExceptionException {
 
         log.info(String.format("Removing autoscaling policy: [id] %s", autoscalePolicyId));
 
@@ -750,10 +729,6 @@ public class StratosApiV41Utils {
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
-                String message = e.getFaultMessage().getInvalidPolicyException().getMessage();
-                log.error(message, e);
-                throw new RestAPIException(message, e);
             }
         }
     }
@@ -962,7 +937,8 @@ public class StratosApiV41Utils {
         try {
             AutoscalerServiceClient asServiceClient = AutoscalerServiceClient.getInstance();
             ServiceGroup[] serviceGroups = asServiceClient.getServiceGroups();
-            if (serviceGroups == null || serviceGroups.length == 0 || (serviceGroups.length == 1 && serviceGroups[0] == null)) {
+            if (serviceGroups == null || serviceGroups.length == 0 || (serviceGroups.length == 1 && serviceGroups[0]
+                    == null)) {
                 return null;
             }
 
@@ -2003,7 +1979,8 @@ public class StratosApiV41Utils {
     }
 
     public static void addApplicationDomainMappings(
-            String applicationId, ApplicationDomainMappingsBean domainMapppingsBean) throws RestAPIException {
+            String applicationId, ApplicationDomainMappingsBean domainMapppingsBean) throws RestAPIException,
+            StratosManagerServiceDomainMappingExceptionException {
 
         try {
             int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
@@ -2030,7 +2007,7 @@ public class StratosApiV41Utils {
                     }
                 }
             }
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String message = "Could not add domain mappings: [application-id] " + applicationId;
             log.error(message, e);
             throw new RestAPIException(message, e);
@@ -2053,7 +2030,7 @@ public class StratosApiV41Utils {
 
     public static void removeApplicationDomainMappings(String applicationId,
                                                        ApplicationDomainMappingsBean domainMapppingsBean)
-            throws RestAPIException {
+            throws RestAPIException, StratosManagerServiceDomainMappingExceptionException {
 
         try {
             int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
@@ -2070,14 +2047,15 @@ public class StratosApiV41Utils {
                     }
                 }
             }
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String message = "Could not remove domain mappings: [application-id] " + applicationId;
             log.error(message, e);
             throw new RestAPIException(message, e);
         }
     }
 
-    public static List<DomainMappingBean> getApplicationDomainMappings(String applicationId) throws RestAPIException {
+    public static List<DomainMappingBean> getApplicationDomainMappings(String applicationId) throws RestAPIException,
+            StratosManagerServiceDomainMappingExceptionException {
         try {
             int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
             List<DomainMappingBean> domainMappingsBeans = new ArrayList<DomainMappingBean>();
@@ -2093,76 +2071,79 @@ public class StratosApiV41Utils {
                 }
             }
             return domainMappingsBeans;
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String message = "Could not get domain mappings: [application-id] " + applicationId;
             log.error(message, e);
             throw new RestAPIException(message, e);
         }
     }
 
-    public static void addNetworkPartition(NetworkPartitionBean networkPartitionBean) {
+    public static void addNetworkPartition(NetworkPartitionBean networkPartitionBean) throws RestAPIException,
+            CloudControllerServiceNetworkPartitionAlreadyExistsExceptionException {
         try {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
             serviceClient.addNetworkPartition(
                     ObjectConverter.convertNetworkPartitionToCCStubNetworkPartition(networkPartitionBean));
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String message = "Could not add network partition";
             log.error(message);
-            throw new RuntimeException(message, e);
+            throw new RestAPIException(message, e);
         }
     }
 
-    public static NetworkPartitionBean[] getNetworkPartitions() {
+    public static NetworkPartitionBean[] getNetworkPartitions() throws RestAPIException {
         try {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
             org.apache.stratos.cloud.controller.stub.domain.NetworkPartition[] networkPartitions =
                     serviceClient.getNetworkPartitions();
             return ObjectConverter.convertCCStubNetworkPartitionsToNetworkPartitions(networkPartitions);
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String message = "Could not get network partitions";
             log.error(message);
-            throw new RuntimeException(message, e);
+            throw new RestAPIException(message, e);
         }
     }
 
-    public static void removeNetworkPartition(String networkPartitionId) {
+    public static void removeNetworkPartition(String networkPartitionId) throws RestAPIException,
+            CloudControllerServiceNetworkPartitionNotExistsExceptionException {
         try {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
             serviceClient.removeNetworkPartition(networkPartitionId);
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String message = String.format(
                     "Could not remove network partition: [network-partition-id] %s",
                     networkPartitionId);
             log.error(message);
-            throw new RuntimeException(message, e);
+            throw new RestAPIException(message, e);
         }
     }
 
-    public static NetworkPartitionBean getNetworkPartition(String networkPartitionId) {
+    public static NetworkPartitionBean getNetworkPartition(String networkPartitionId) throws RestAPIException {
         try {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
             org.apache.stratos.cloud.controller.stub.domain.NetworkPartition networkPartition =
                     serviceClient.getNetworkPartition(networkPartitionId);
             return ObjectConverter.convertCCStubNetworkPartitionToNetworkPartition(networkPartition);
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String message = String.format(
                     "Could not get network partition: [network-partition-id] %s",
                     networkPartitionId);
             log.error(message);
-            throw new RuntimeException(message, e);
+            throw new RestAPIException(message, e);
         }
     }
 
-    public static void updateNetworkPartition(NetworkPartitionBean networkPartition) {
+    public static void updateNetworkPartition(NetworkPartitionBean networkPartition) throws RestAPIException,
+            CloudControllerServiceNetworkPartitionNotExistsExceptionException {
         try {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
             serviceClient.updateNetworkPartition(ObjectConverter.
                     convertNetworkPartitionToCCStubNetworkPartition(networkPartition));
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String message = String.format("Could not update network partition: [network-partition-id] %s,",
                     networkPartition.getId());
             log.error(message);
-            throw new RuntimeException(message, e);
+            throw new RestAPIException(message, e);
         }
     }
 
@@ -2172,7 +2153,9 @@ public class StratosApiV41Utils {
      * @param deployementPolicyDefinitionBean DeploymentPolicyBean
      */
     public static void addDeploymentPolicy(DeploymentPolicyBean deployementPolicyDefinitionBean)
-            throws RestAPIException {
+            throws RestAPIException,
+            AutoscalerServiceDeploymentPolicyAlreadyExistsExceptionException,
+            AutoscalerServiceInvalidDeploymentPolicyExceptionException{
         try {
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Adding deployment policy: [deployment-policy-id] %s ",
@@ -2188,12 +2171,11 @@ public class StratosApiV41Utils {
                 log.debug(String.format("Successfully added deploymentPolicy: [deployment-policy-id] %s ",
                         deployementPolicyDefinitionBean.getId()));
             }
-        } catch (AutoscalerServiceDeploymentPolicyNotExistsExceptionException e) {
-            String msg =
-                    "Deployment policy already exists [Deployment-policy-id]" + deployementPolicyDefinitionBean.getId();
+        } catch (RemoteException e) {
+            String msg = "Could not add deployment policy.";
             log.error(msg, e);
-            throw new RestAPIException(msg);
-        } catch (Exception e) {
+            throw new RestAPIException(msg, e);
+        } catch (AutoscalerServiceRemoteExceptionException e) {
             String msg = "Could not add deployment policy.";
             log.error(msg, e);
             throw new RestAPIException(msg, e);
@@ -2217,7 +2199,7 @@ public class StratosApiV41Utils {
                 return null;
             }
             deploymentPolicyBean = ObjectConverter.convetCCStubDeploymentPolicytoDeploymentPolicy(deploymentPolicy);
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String msg = "Could not find deployment policy: [deployment-policy-id] " + deploymentPolicyID;
             log.error(msg, e);
             throw new RestAPIException(msg);
@@ -2231,15 +2213,15 @@ public class StratosApiV41Utils {
      *
      * @return array of {@link DeploymentPolicyBean}
      */
-    public static DeploymentPolicyBean[] getDeployementPolicies() {
+    public static DeploymentPolicyBean[] getDeployementPolicies() throws RestAPIException {
         try {
             org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy[] deploymentPolicies
                     = AutoscalerServiceClient.getInstance().getDeploymentPolicies();
             return ObjectConverter.convertASStubDeploymentPoliciesToDeploymentPolicies(deploymentPolicies);
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String message = "Could not get deployment policies";
             log.error(message);
-            throw new RuntimeException(message, e);
+            throw new RestAPIException(message, e);
         }
     }
 
@@ -2250,7 +2232,9 @@ public class StratosApiV41Utils {
      * @throws RestAPIException
      */
     public static void updateDeploymentPolicy(DeploymentPolicyBean deploymentPolicyDefinitionBean)
-            throws RestAPIException {
+            throws RestAPIException, AutoscalerServiceInvalidPolicyExceptionException,
+            AutoscalerServiceInvalidDeploymentPolicyExceptionException,
+            AutoscalerServiceDeploymentPolicyNotExistsExceptionException {
         try {
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Updating deployment policy: [deployment-policy-id] %s ",
@@ -2266,12 +2250,18 @@ public class StratosApiV41Utils {
                 log.debug(String.format("DeploymentPolicy updated successfully : [deployment-policy-id] %s ",
                         deploymentPolicyDefinitionBean.getId()));
             }
-        } catch (AutoscalerServiceDeploymentPolicyNotExistsExceptionException e) {
-            String msg =
-                    "Deployment policy does not exist [Deployment-policy-id]" + deploymentPolicyDefinitionBean.getId();
+        } catch (RemoteException e) {
+
+            String msg = "Could not update deployment policy " + e.getLocalizedMessage();
             log.error(msg, e);
             throw new RestAPIException(msg);
-        } catch (Exception e) {
+        } catch (AutoscalerServiceCloudControllerConnectionExceptionException e) {
+
+            String msg = "Could not update deployment policy " + e.getLocalizedMessage();
+            log.error(msg, e);
+            throw new RestAPIException(msg);
+        } catch (AutoscalerServiceRemoteExceptionException e) {
+
             String msg = "Could not update deployment policy " + e.getLocalizedMessage();
             log.error(msg, e);
             throw new RestAPIException(msg);
@@ -2285,10 +2275,10 @@ public class StratosApiV41Utils {
      * @throws RestAPIException
      */
     public static void removeDeploymentPolicy(String deploymentPolicyID)
-            throws RestAPIException {
+            throws RestAPIException, AutoscalerServiceDeploymentPolicyNotExistsExceptionException {
         try {
             AutoscalerServiceClient.getInstance().removeDeploymentPolicy(deploymentPolicyID);
-        } catch (Exception e) {
+        } catch (RemoteException e) {
             String msg = "Could not remove deployment policy " + e.getLocalizedMessage();
             log.error(msg, e);
             throw new RestAPIException(msg);
@@ -2298,7 +2288,7 @@ public class StratosApiV41Utils {
 
     public static ClusterBean getClusterInfo(String clusterId) throws RestAPIException {
         if (StringUtils.isEmpty(clusterId)) {
-            throw new RestAPIException("Cluster Id can not be empty");
+            throw new ClusterIdIsEmptyException("Cluster Id can not be empty");
         }
 
         Cluster cluster = TopologyManager.getTopology().getCluster(clusterId);
@@ -2317,14 +2307,13 @@ public class StratosApiV41Utils {
      * @param tenantInfoBean
      * @throws RestAPIException
      */
-    public static void addTenant(org.apache.stratos.common.beans.TenantInfoBean tenantInfoBean) throws RestAPIException {
+    public static void addTenant(org.apache.stratos.common.beans.TenantInfoBean tenantInfoBean) throws RestAPIException,
+            InvalidEmailException {
 
         try {
             CommonUtil.validateEmail(tenantInfoBean.getEmail());
         } catch (Exception e) {
-            String msg = "Invalid email is provided";
-            log.error(msg, e);
-            throw new RestAPIException(msg);
+            throw new InvalidEmailException(e.getMessage());
         }
 
         String tenantDomain = tenantInfoBean.getTenantDomain();
@@ -2333,7 +2322,7 @@ public class StratosApiV41Utils {
         } catch (Exception e) {
             String msg = "Tenant domain validation error for tenant " + tenantDomain;
             log.error(msg, e);
-            throw new RestAPIException(msg);
+            throw new InvalidDomainException(msg);
         }
 
         UserRegistry userRegistry = (UserRegistry) PrivilegedCarbonContext.getThreadLocalCarbonContext().
@@ -2407,7 +2396,8 @@ public class StratosApiV41Utils {
      * @param tenantInfoBean
      * @throws Exception
      */
-    public static void updateExistingTenant(org.apache.stratos.common.beans.TenantInfoBean tenantInfoBean) throws Exception {
+    public static void updateExistingTenant(org.apache.stratos.common.beans.TenantInfoBean tenantInfoBean) throws
+            Exception, InvalidEmailException {
 
         TenantManager tenantManager = ServiceHolder.getTenantManager();
         UserStoreManager userStoreManager;