You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2019/05/06 09:39:29 UTC

[ambari] branch branch-2.6 updated: AMBARI-25204. Ambari returns stack trace in HTML doc when an error occurs retrieving details for an Ambari View resource that does not exist - backport for 2.6 (dlysnichenko) (#2959)

This is an automated email from the ASF dual-hosted git repository.

dmitriusan pushed a commit to branch branch-2.6
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/branch-2.6 by this push:
     new ab11712  AMBARI-25204. Ambari returns stack trace in HTML doc when an error occurs retrieving details for an Ambari View resource that does not exist - backport for 2.6 (dlysnichenko) (#2959)
ab11712 is described below

commit ab11712f3b47658083976be2ecadaa773dc02e55
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
AuthorDate: Mon May 6 12:39:23 2019 +0300

    AMBARI-25204. Ambari returns stack trace in HTML doc when an error occurs retrieving details for an Ambari View resource that does not exist - backport for 2.6 (dlysnichenko) (#2959)
---
 .../server/api/services/ViewInstanceService.java   | 131 ++++++++++++++++++++-
 1 file changed, 127 insertions(+), 4 deletions(-)

diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ViewInstanceService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ViewInstanceService.java
index fa0850e..4f894f4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ViewInstanceService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ViewInstanceService.java
@@ -19,6 +19,7 @@
 package org.apache.ambari.server.api.services;
 
 import org.apache.ambari.server.api.resources.ResourceInstance;
+import org.apache.ambari.server.api.services.serializers.JsonSerializer;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.orm.entities.ViewInstanceEntity;
 import org.apache.ambari.server.security.authorization.AuthorizationException;
@@ -34,6 +35,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 import java.util.HashMap;
@@ -215,20 +217,141 @@ public class ViewInstanceService extends BaseService {
         ViewRegistry.getInstance().getInstanceDefinition(viewName, version, instanceName);
 
     if (instanceDefinition == null) {
-      throw new IllegalArgumentException("A view instance " +
-          viewName + "/" + instanceName + " can not be found.");
+      String msg = "A view instance " +
+          viewName + "/" + instanceName + " can not be found.";
+
+      return new NotFoundResponse(msg);
     }
 
     Object service = instanceDefinition.getService(resources);
 
     if (service == null) {
-      throw new IllegalArgumentException("A resource type " + resources + " for view instance " +
-          viewName + "/" + instanceName + " can not be found.");
+      String msg = "A resource type " + resources + " for view instance " +
+          viewName + "/" + instanceName + " can not be found.";
+      return new NotFoundResponse(msg);
     }
     return service;
   }
 
   /**
+   * Stub class for 404 error response
+   *
+   */
+  @Path("/")
+  public class NotFoundResponse {
+
+    String msg;
+
+    NotFoundResponse(String msg){
+      this.msg=msg;
+    }
+
+    /**
+     * Handles: GET /{resourceName}
+     * Handle GET resource with 404 response
+     * @return 404 response with msg
+     */
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response get() {
+      return getResponse();
+    }
+
+    /**
+     * Handles: POST /{resourceName}
+     * Handle POST resource with 404 response
+     * @return 404 response with msg
+     */
+    @POST
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response post() {
+      return getResponse();
+    }
+
+    /**
+     * Handles: PUT /{resourceName}
+     * Handle PUT resource with 404 response
+     * @return 404 response with msg
+     */
+    @PUT
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response put() {
+      return getResponse();
+    }
+
+    /**
+     * Handles: DELETE /{resourceName}
+     * Handle DELETE resource with 404 response
+     * @return 404 response with msg
+     */
+    @DELETE
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response delete() {
+      return getResponse();
+    }
+
+    /**
+     * Handles: GET /{resourceName}/{.*}
+     * Handle GET sub-resource with 404 response
+     * @return 404 response with msg
+     */
+    @GET
+    @Path("{path: .*}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response getSub() {
+      return getResponse();
+    }
+
+    /**
+     * Handles: POST /{resourceName}/{.*}
+     * Handle POST sub-resource with 404 response
+     * @return 404 response with msg
+     */
+    @POST
+    @Path("{path: .*}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response postSub() {
+      return getResponse();
+    }
+
+    /**
+     * Handles: PUT /{resourceName}/{.*}
+     * Handle PUT sub-resource with 404 response
+     * @return 404 response with msg
+     */
+    @PUT
+    @Path("{path: .*}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response putSub() {
+      return getResponse();
+    }
+
+    /**
+     * Handles: DELETE /{resourceName}/{.*}
+     * Handle DELETE sub-resource with 404 response
+     * @return 404 response with msg
+     */
+    @DELETE
+    @Path("{path: .*}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response deleteSub() {
+      return getResponse();
+    }
+
+    /**
+     * Build 404 response with msg
+     * @return 404 response with msg
+     */
+    public Response getResponse() {
+      Result result = new ResultImpl(new ResultStatus(ResultStatus.STATUS.NOT_FOUND, msg));
+      Response.ResponseBuilder builder = Response.status(result.getStatus().getStatusCode()).entity(new JsonSerializer().serialize(result));
+      return builder.build();
+    }
+
+  }
+
+
+  /**
    * Gets the admin privilege service
    */
   @Path("{instanceName}/privileges")