You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2015/05/20 13:50:53 UTC

[3/3] stratos git commit: Handling backend exceptions for client side for the application addition and udpate

Handling backend exceptions for client side for the application addition and udpate


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

Branch: refs/heads/master
Commit: 65599e5fc6752367df85a8144b346c78b58e2c79
Parents: 764f7db
Author: reka <rt...@gmail.com>
Authored: Wed May 20 11:40:00 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed May 20 17:03:48 2015 +0530

----------------------------------------------------------------------
 .../applications/parser/ApplicationParser.java  |   4 +-
 .../parser/DefaultApplicationParser.java        |  33 +-
 .../CartridgeGroupNotFoundException.java        |  17 +-
 .../cartridge/CartridgeNotFoundException.java   |  37 ++
 .../autoscaler/services/AutoscalerService.java  |   5 +-
 .../services/impl/AutoscalerServiceImpl.java    |   7 +-
 .../common/client/AutoscalerServiceClient.java  |   8 +-
 .../rest/endpoint/api/StratosApiV41.java        |  39 +-
 .../rest/endpoint/api/StratosApiV41Utils.java   |   4 +-
 .../src/main/resources/AutoscalerService.wsdl   | 589 ++++++++++---------
 10 files changed, 446 insertions(+), 297 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/65599e5f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ApplicationParser.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ApplicationParser.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ApplicationParser.java
index 6119e0e..5ef391f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ApplicationParser.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/ApplicationParser.java
@@ -22,7 +22,9 @@ package org.apache.stratos.autoscaler.applications.parser;
 
 import org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
 import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
+import org.apache.stratos.autoscaler.exception.CartridgeGroupNotFoundException;
 import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
+import org.apache.stratos.autoscaler.exception.cartridge.CartridgeNotFoundException;
 import org.apache.stratos.common.Properties;
 import org.apache.stratos.messaging.domain.application.Application;
 
@@ -41,7 +43,7 @@ public interface ApplicationParser {
      * @return Application structure denoting the parsed Application
      * @throws ApplicationDefinitionException If the Application Definition is invalid
      */
-    public Application parse(ApplicationContext applicationContext) throws ApplicationDefinitionException;
+    public Application parse(ApplicationContext applicationContext) throws ApplicationDefinitionException, CartridgeGroupNotFoundException, CartridgeNotFoundException;
 
     /**
      * Returns a set of ApplicationClusterContext which will comprise of cluster related information

http://git-wip-us.apache.org/repos/asf/stratos/blob/65599e5f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
index fd88d06..87dc0fc 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
@@ -33,7 +33,9 @@ import org.apache.stratos.autoscaler.applications.pojo.*;
 import org.apache.stratos.autoscaler.client.IdentityApplicationManagementServiceClient;
 import org.apache.stratos.autoscaler.client.OAuthAdminServiceClient;
 import org.apache.stratos.autoscaler.exception.AutoScalerException;
+import org.apache.stratos.autoscaler.exception.CartridgeGroupNotFoundException;
 import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
+import org.apache.stratos.autoscaler.exception.cartridge.CartridgeNotFoundException;
 import org.apache.stratos.autoscaler.pojo.ServiceGroup;
 import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
@@ -72,7 +74,9 @@ public class DefaultApplicationParser implements ApplicationParser {
     }
 
     @Override
-    public Application parse(ApplicationContext applicationContext) throws ApplicationDefinitionException {
+    public Application parse(ApplicationContext applicationContext)
+            throws ApplicationDefinitionException, CartridgeGroupNotFoundException,
+            CartridgeNotFoundException {
 
         if (applicationContext == null) {
             handleError("Invalid application definition, application context is null");
@@ -241,7 +245,7 @@ public class DefaultApplicationParser implements ApplicationParser {
      */
     private Application buildCompositeAppStructure(ApplicationContext applicationContext,
                                                    Map<String, SubscribableInfoContext> subscribableInfoCtxts)
-            throws ApplicationDefinitionException {
+            throws ApplicationDefinitionException, CartridgeGroupNotFoundException, CartridgeNotFoundException {
 
         Application application = new Application(applicationContext.getApplicationId());
 
@@ -343,7 +347,7 @@ public class DefaultApplicationParser implements ApplicationParser {
      */
     private Map<String, Map<String, ClusterDataHolder>> parseLeafLevelSubscriptions(
             String appId, int tenantId, String key, String groupName,
-            List<CartridgeContext> cartridgeContextList, Set<StartupOrder> dependencyOrder) throws ApplicationDefinitionException {
+            List<CartridgeContext> cartridgeContextList, Set<StartupOrder> dependencyOrder) throws ApplicationDefinitionException, CartridgeNotFoundException {
 
         Map<String, Map<String, ClusterDataHolder>> completeDataHolder = new HashMap<String, Map<String, ClusterDataHolder>>();
         Map<String, ClusterDataHolder> clusterDataMap = new HashMap<String, ClusterDataHolder>();
@@ -361,7 +365,7 @@ public class DefaultApplicationParser implements ApplicationParser {
 
             Cartridge cartridge = getCartridge(cartridgeType);
             if (cartridge == null) {
-                throw new RuntimeException("Cartridge not found: " + cartridgeType);
+                throw new CartridgeNotFoundException("Cartridge not found " + cartridgeType);
             }
 
             // Add metadata keys defined in cartridges as export metadata keys
@@ -398,10 +402,12 @@ public class DefaultApplicationParser implements ApplicationParser {
                         String[] arrStartUp = startupOrderComponent.split("\\.");
                         if (arrStartUp[0].equals("cartridge")) {
                             String cartridgeAlias = arrStartUp[1];
-                            String dependentCartridgeType = findCartridgeTypeFromAlias(cartridgeContextList, cartridgeAlias);
+                            String dependentCartridgeType =
+                                    findCartridgeTypeFromAlias(cartridgeContextList, cartridgeAlias);
                             if (StringUtils.isBlank(dependentCartridgeType)) {
-                                throw new RuntimeException(String.format("Could not find dependent cartridge for " +
-                                        "cartridge alias: [application] %s [cartridge-alias] %s", appId, cartridgeAlias));
+                                throw new CartridgeNotFoundException(
+                                        String.format("Could not find dependent cartridge for " +
+                                        "application: %s cartridge-alias: %s", appId, cartridgeAlias));
                             }
                             Cartridge dependencyCartridge = getCartridge(dependentCartridgeType);
                             ClusterDataHolder dataHolder = clusterDataMapByType.get(dependentCartridgeType);
@@ -557,14 +563,15 @@ public class DefaultApplicationParser implements ApplicationParser {
      */
     private Map<String, Group> parseGroups(String appId, int tenantId, String key, List<GroupContext> groupCtxts,
                                            Map<String, SubscribableInfoContext> subscribableInformation)
-            throws ApplicationDefinitionException {
+            throws ApplicationDefinitionException, CartridgeGroupNotFoundException, CartridgeNotFoundException {
 
         Map<String, Group> groupAliasToGroup = new HashMap<String, Group>();
 
         for (GroupContext groupCtxt : groupCtxts) {
             ServiceGroup serviceGroup = getServiceGroup(groupCtxt.getName());
             if (serviceGroup == null) {
-                throw new RuntimeException("Cartridge group not found: [group-name] " + groupCtxt.getName());
+                throw new CartridgeGroupNotFoundException("Cartridge group not found group-name: "
+                        + groupCtxt.getName());
             }
             Group group = parseGroup(appId, tenantId, key, groupCtxt, subscribableInformation, serviceGroup);
             validateCartridgeGroupReference(appId, serviceGroup, group);
@@ -584,11 +591,13 @@ public class DefaultApplicationParser implements ApplicationParser {
      * @param serviceGroup
      * @param group
      */
-    private void validateCartridgeGroupReference(String applicationId, ServiceGroup serviceGroup, Group group) {
+    private void validateCartridgeGroupReference(String applicationId,
+                                                 ServiceGroup serviceGroup, Group group)
+            throws CartridgeNotFoundException {
         List<String> cartridgeTypes = findCartridgeTypesInServiceGroup(serviceGroup);
         for (String cartridgeType : cartridgeTypes) {
             if (findClusterDataInGroup(group, cartridgeType) == null) {
-                throw new RuntimeException(String.format("Cartridge %s not defined in cartridge group: " +
+                throw new CartridgeNotFoundException(String.format("Cartridge %s not defined in cartridge group: " +
                                 "[application] %s [cartridge-group-name] %s [cartridge-group-alias] %s",
                         cartridgeType, applicationId, group.getName(), group.getAlias()));
             }
@@ -704,7 +713,7 @@ public class DefaultApplicationParser implements ApplicationParser {
     private Group parseGroup(String appId, int tenantId, String key, GroupContext groupCtxt,
                              Map<String, SubscribableInfoContext> subscribableInfoCtxts,
                              ServiceGroup serviceGroup)
-            throws ApplicationDefinitionException {
+            throws ApplicationDefinitionException, CartridgeNotFoundException {
 
         Group group = new Group(appId, groupCtxt.getName(), groupCtxt.getAlias());
         group.setGroupScalingEnabled(groupCtxt.getGroupMaxInstances() > 1);

http://git-wip-us.apache.org/repos/asf/stratos/blob/65599e5f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/CartridgeGroupNotFoundException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/CartridgeGroupNotFoundException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/CartridgeGroupNotFoundException.java
index 8b1587e..ae80b4a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/CartridgeGroupNotFoundException.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/CartridgeGroupNotFoundException.java
@@ -18,8 +18,21 @@
  */
 package org.apache.stratos.autoscaler.exception;
 
+/**
+ * This will get thrown when create/deploy the application, the relevant
+ * cartridge group is not found
+ */
 public class CartridgeGroupNotFoundException extends Exception {
-    public CartridgeGroupNotFoundException(String msg) {
-        super(msg);
+    private String message;
+
+    public CartridgeGroupNotFoundException(String message) {
+        super(message);
+        this.message = message;
+    }
+
+
+    @Override
+    public String getMessage() {
+        return message;
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/65599e5f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/cartridge/CartridgeNotFoundException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/cartridge/CartridgeNotFoundException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/cartridge/CartridgeNotFoundException.java
new file mode 100644
index 0000000..6ff72ad
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/cartridge/CartridgeNotFoundException.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler.exception.cartridge;
+
+/**
+ * When cartridge is not there, this particular exception needs to be thrown
+ */
+public class CartridgeNotFoundException extends Exception {
+    private String message;
+
+    public CartridgeNotFoundException(String message) {
+        super(message);
+        this.message = message;
+    }
+
+
+    @Override
+    public String getMessage() {
+        return message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/65599e5f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
index cf53668..8af3b56 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/AutoscalerService.java
@@ -26,6 +26,7 @@ import org.apache.stratos.autoscaler.exception.*;
 import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
 import org.apache.stratos.autoscaler.exception.application.InvalidApplicationPolicyException;
 import org.apache.stratos.autoscaler.exception.application.InvalidServiceGroupException;
+import org.apache.stratos.autoscaler.exception.cartridge.CartridgeNotFoundException;
 import org.apache.stratos.autoscaler.exception.policy.*;
 import org.apache.stratos.autoscaler.pojo.ServiceGroup;
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
@@ -85,7 +86,7 @@ public interface AutoscalerService {
      * @param applicationContext {@link ApplicationContext}
      * @throws ApplicationDefinitionException if an error occurs
      */
-    public boolean addApplication(ApplicationContext applicationContext) throws ApplicationDefinitionException;
+    public boolean addApplication(ApplicationContext applicationContext) throws ApplicationDefinitionException, CartridgeGroupNotFoundException, CartridgeNotFoundException;
 
     /**
      * update an application
@@ -93,7 +94,7 @@ public interface AutoscalerService {
      * @param applicationContext {@link org.apache.stratos.autoscaler.applications.pojo.ApplicationContext}
      * @throws ApplicationDefinitionException if an error occurs
      */
-    public boolean updateApplication(ApplicationContext applicationContext) throws ApplicationDefinitionException;
+    public boolean updateApplication(ApplicationContext applicationContext) throws ApplicationDefinitionException, CartridgeGroupNotFoundException, CartridgeNotFoundException;
 
 
     /**

http://git-wip-us.apache.org/repos/asf/stratos/blob/65599e5f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index 6f5ff51..4a09de4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -36,6 +36,7 @@ import org.apache.stratos.autoscaler.exception.*;
 import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
 import org.apache.stratos.autoscaler.exception.application.InvalidApplicationPolicyException;
 import org.apache.stratos.autoscaler.exception.application.InvalidServiceGroupException;
+import org.apache.stratos.autoscaler.exception.cartridge.CartridgeNotFoundException;
 import org.apache.stratos.autoscaler.exception.policy.*;
 import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
@@ -153,7 +154,8 @@ public class AutoscalerServiceImpl implements AutoscalerService {
 
     @Override
     public boolean addApplication(ApplicationContext applicationContext)
-            throws ApplicationDefinitionException {
+            throws ApplicationDefinitionException, CartridgeGroupNotFoundException,
+            CartridgeNotFoundException {
 
         if (log.isInfoEnabled()) {
             log.info(String.format("Adding application: [application-id] %s",
@@ -181,7 +183,8 @@ public class AutoscalerServiceImpl implements AutoscalerService {
 
     @Override
     public boolean updateApplication(ApplicationContext applicationContext)
-            throws ApplicationDefinitionException {
+            throws ApplicationDefinitionException, CartridgeGroupNotFoundException,
+            CartridgeNotFoundException {
 
         String applicationId = applicationContext.getApplicationId();
         if (log.isInfoEnabled()) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/65599e5f/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
index 720d264..5d6bf16 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
@@ -91,12 +91,16 @@ public class AutoscalerServiceClient {
     }
 
     public void addApplication(ApplicationContext applicationContext)
-            throws AutoscalerServiceApplicationDefinitionExceptionException, RemoteException {
+            throws AutoscalerServiceApplicationDefinitionExceptionException,
+            RemoteException, AutoscalerServiceCartridgeNotFoundExceptionException,
+            AutoscalerServiceCartridgeGroupNotFoundExceptionException {
         stub.addApplication(applicationContext);
     }
 
     public void updateApplication(ApplicationContext applicationContext)
-            throws AutoscalerServiceApplicationDefinitionExceptionException, RemoteException {
+            throws AutoscalerServiceApplicationDefinitionExceptionException,
+            RemoteException, AutoscalerServiceCartridgeNotFoundExceptionException,
+            AutoscalerServiceCartridgeGroupNotFoundExceptionException {
         stub.updateApplication(applicationContext);
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/65599e5f/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 7e25e8e..7b50e40 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
@@ -699,16 +699,27 @@ public class StratosApiV41 extends AbstractApi {
     @AuthorizationAction("/permission/protected/manage/addApplication")
     public Response addApplication(ApplicationBean applicationDefinition) throws RestAPIException {
         try {
-            StratosApiV41Utils.addApplication(applicationDefinition, getConfigContext(), getUsername(), getTenantDomain());
+            StratosApiV41Utils.addApplication(applicationDefinition, getConfigContext(),
+                        getUsername(), getTenantDomain());
+
 
             URI url = uriInfo.getAbsolutePathBuilder().path(applicationDefinition.getApplicationId()).build();
             return Response.created(url).entity(new ResponseMessageBean(ResponseMessageBean.SUCCESS,
                     String.format("Application added successfully: [application] %s",
                             applicationDefinition.getApplicationId()))).build();
         } catch (ApplicationAlreadyExistException e) {
-
             return Response.status(Response.Status.CONFLICT).entity(new ResponseMessageBean(
                     ResponseMessageBean.ERROR, "Application already exists")).build();
+        }  catch (AutoscalerServiceCartridgeNotFoundExceptionException e) {
+            String backendErrorMessage = e.getFaultMessage().getCartridgeNotFoundException().
+                    getMessage();
+            return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean(
+                    ResponseMessageBean.ERROR, backendErrorMessage)).build();
+        } catch (AutoscalerServiceCartridgeGroupNotFoundExceptionException e) {
+            String backendErrorMessage = e.getFaultMessage().getCartridgeGroupNotFoundException().
+                    getMessage();
+            return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean(
+                    ResponseMessageBean.ERROR, backendErrorMessage)).build();
         } catch (RestAPIException e) {
             throw e;
         }
@@ -728,11 +739,25 @@ public class StratosApiV41 extends AbstractApi {
     @AuthorizationAction("/permission/protected/manage/addApplication")
     public Response updateApplication(ApplicationBean applicationDefinition) throws RestAPIException {
 
-        StratosApiV41Utils.updateApplication(applicationDefinition, getConfigContext(), getUsername(), getTenantDomain());
-        URI url = uriInfo.getAbsolutePathBuilder().path(applicationDefinition.getApplicationId()).build();
-        return Response.created(url).entity(new ResponseMessageBean(ResponseMessageBean.SUCCESS,
-                String.format("Application updated successfully: [application] %s",
-                        applicationDefinition.getApplicationId()))).build();
+        try {
+            StratosApiV41Utils.updateApplication(applicationDefinition, getConfigContext(),
+                    getUsername(), getTenantDomain());
+            URI url = uriInfo.getAbsolutePathBuilder().path(applicationDefinition.getApplicationId()).build();
+            return Response.created(url).entity(new ResponseMessageBean(ResponseMessageBean.SUCCESS,
+                    String.format("Application updated successfully: [application] %s",
+                            applicationDefinition.getApplicationId()))).build();
+        }  catch (AutoscalerServiceCartridgeNotFoundExceptionException e) {
+            String backendErrorMessage = e.getFaultMessage().getCartridgeNotFoundException().
+                    getMessage();
+            return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean(
+                    ResponseMessageBean.ERROR, backendErrorMessage)).build();
+        } catch (AutoscalerServiceCartridgeGroupNotFoundExceptionException e) {
+            String backendErrorMessage = e.getFaultMessage().getCartridgeGroupNotFoundException().
+                    getMessage();
+            return Response.status(Response.Status.BAD_REQUEST).entity(new ResponseMessageBean(
+                    ResponseMessageBean.ERROR, backendErrorMessage)).build();
+        }
+
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/stratos/blob/65599e5f/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 42612a7..9fd3413 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
@@ -1335,7 +1335,7 @@ public class StratosApiV41Utils {
      */
     public static void addApplication(ApplicationBean appDefinition, ConfigurationContext ctxt,
                                       String userName, String tenantDomain)
-            throws RestAPIException {
+            throws RestAPIException, AutoscalerServiceCartridgeNotFoundExceptionException, AutoscalerServiceCartridgeGroupNotFoundExceptionException {
 
         if (StringUtils.isBlank(appDefinition.getApplicationId())) {
             String message = "Please specify the application name";
@@ -1408,7 +1408,7 @@ public class StratosApiV41Utils {
      */
     public static void updateApplication(ApplicationBean appDefinition, ConfigurationContext ctxt,
                                          String userName, String tenantDomain)
-            throws RestAPIException {
+            throws RestAPIException, AutoscalerServiceCartridgeNotFoundExceptionException, AutoscalerServiceCartridgeGroupNotFoundExceptionException {
 
         if (StringUtils.isBlank(appDefinition.getApplicationId())) {
             String message = "Please specify the application name";