@PUT
  @Path("{clusterName}/artifacts/{artifactName}")
  @Produces(MediaType.TEXT_PLAIN)
  @ApiOperation(value = "Updates a single artifact")
  @ApiImplicitParams({
    @ApiImplicitParam(dataType = ARTIFACT_REQUEST_TYPE, paramType = PARAM_TYPE_BODY)
  })
  @ApiResponses({
    @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
    @ApiResponse(code = HttpStatus.SC_ACCEPTED, message = MSG_REQUEST_ACCEPTED),
    @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = MSG_INVALID_ARGUMENTS),
    @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_RESOURCE_NOT_FOUND),
    @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
    @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
    @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
  })
  public Response updateClusterArtifact(String body, @Context HttpHeaders headers, @Context UriInfo ui,
    @ApiParam(required = true) @PathParam("clusterName") String clusterName,
    @ApiParam(required = true) @PathParam("artifactName") String artifactName
  ) throws BodyParseException {
    if ("kerberos_descriptor".equals(artifactName)) {
      LOG.info("Validating body For kerberos_descriptor");
      if (parseBody(body)) {
        throw new BodyParseException("Bad request received");
      }
    }
    ResourceInstance resource = createArtifactResource(clusterName, artifactName);
    return handleRequest(headers, body, ui, Request.Type.PUT, resource);
  }
Handles: PUT /clusters/{clusterID}/artifacts/{artifactName}
Update a specific artifact.

@param headers       http headers
@param ui            uri info
@param clusterName   cluster name
@param artifactName  artifactName

@return information regarding the updated artifact
ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java