X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=catalog-be%2Fsrc%2Fmain%2Fjava%2Forg%2Fopenecomp%2Fsdc%2Fbe%2Fdistribution%2Fservlet%2FDistributionCatalogServlet.java;h=6b216a09051391a4cb46f49af669af381ddb0db4;hb=5f3e9912406897ee18c424b940881ce08d59bb44;hp=f0d329ec201b230504dfa0de79fac2deb96a1489;hpb=cdca700bbc71af59acfe340b54d464f28206bb79;p=sdc.git diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/distribution/servlet/DistributionCatalogServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/distribution/servlet/DistributionCatalogServlet.java index f0d329ec20..6b216a0905 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/distribution/servlet/DistributionCatalogServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/distribution/servlet/DistributionCatalogServlet.java @@ -7,9 +7,9 @@ * Licensed 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. @@ -19,7 +19,6 @@ * Modifications copyright (c) 2019 Nokia * ================================================================================ */ - package org.openecomp.sdc.be.distribution.servlet; import com.jcabi.aspects.Loggable; @@ -33,21 +32,10 @@ import io.swagger.v3.oas.annotations.servers.Server; import io.swagger.v3.oas.annotations.servers.Servers; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tags; -import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic; -import org.openecomp.sdc.be.components.impl.aaf.AafPermission; -import org.openecomp.sdc.be.components.impl.aaf.PermissionAllowed; -import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; -import org.openecomp.sdc.be.config.BeEcompErrorManager; -import org.openecomp.sdc.be.dao.api.ActionStatus; -import org.openecomp.sdc.be.impl.ComponentsUtils; -import org.openecomp.sdc.be.resources.data.auditing.model.DistributionData; -import org.openecomp.sdc.be.servlets.BeGenericServlet; -import org.openecomp.sdc.be.user.UserBusinessLogic; -import org.openecomp.sdc.common.api.Constants; -import org.openecomp.sdc.common.datastructure.Wrapper; -import org.openecomp.sdc.common.log.wrappers.Logger; -import org.openecomp.sdc.exception.ResponseFormat; - +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; import javax.inject.Inject; import javax.inject.Singleton; import javax.servlet.http.HttpServletRequest; @@ -60,46 +48,48 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; +import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic; +import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; +import org.openecomp.sdc.be.config.BeEcompErrorManager; +import org.openecomp.sdc.be.dao.api.ActionStatus; +import org.openecomp.sdc.be.impl.ComponentsUtils; +import org.openecomp.sdc.be.resources.data.auditing.model.DistributionData; +import org.openecomp.sdc.be.servlets.BeGenericServlet; +import org.openecomp.sdc.common.api.Constants; +import org.openecomp.sdc.common.datastructure.Wrapper; +import org.openecomp.sdc.common.log.wrappers.Logger; +import org.openecomp.sdc.exception.ResponseFormat; /** * This Servlet serves external users to download artifacts. - * - * @author tgitelman * + * @author tgitelman */ - @Loggable(prepend = true, value = Loggable.DEBUG, trim = false) @Path("/v1/catalog") -@Tags({@Tag(name = "SDC Distribution APIs")}) +@Tags({@Tag(name = "SDCE-7 APIs")}) @Servers({@Server(url = "/sdc")}) @Singleton public class DistributionCatalogServlet extends BeGenericServlet { private static final String DOWNLOAD_ARTIFACT_FAILED_WITH_EXCEPTION = "download artifact failed with exception"; - private static final String MISSING_X_ECOMP_INSTANCE_ID_HEADER = "Missing X-ECOMP-InstanceID header"; - private static final Logger log = Logger.getLogger(DistributionCatalogServlet.class); - private final ArtifactsBusinessLogic artifactsBusinessLogic; - - @Inject - public DistributionCatalogServlet(UserBusinessLogic userBusinessLogic, - ComponentsUtils componentsUtils, - ArtifactsBusinessLogic artifactsBusinessLogic) { - super(userBusinessLogic, componentsUtils); - this.artifactsBusinessLogic = artifactsBusinessLogic; - } - + private static final String MISSING_X_ECOMP_INSTANCE_ID_HEADER = "Missing X-ECOMP-InstanceID header"; + private static final Logger log = Logger.getLogger(DistributionCatalogServlet.class); + private final ArtifactsBusinessLogic artifactsBusinessLogic; @Context private HttpServletRequest request; + @Inject + public DistributionCatalogServlet(ComponentsUtils componentsUtils, + ArtifactsBusinessLogic artifactsBusinessLogic) { + super(componentsUtils); + this.artifactsBusinessLogic = artifactsBusinessLogic; + } // ******************************************************* // Download (GET) artifacts // **********************************************************/ + /** - * * @param requestId * @param instanceIdHeader * @param accept @@ -113,51 +103,38 @@ public class DistributionCatalogServlet extends BeGenericServlet { @Path("/services/{serviceName}/{serviceVersion}/artifacts/{artifactName}") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_OCTET_STREAM) - @Operation(description = "Download service artifact", method = "GET", summary = "Returns downloaded artifact", - responses = {@ApiResponse( - content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), - @ApiResponse(responseCode = "200", description = "The artifact is found and streamed.", - content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), - @ApiResponse(responseCode = "400", - description = "Missing 'X-ECOMP-InstanceID' HTTP header - POL5001"), - @ApiResponse(responseCode = "401", - description = "ECOMP component should authenticate itself and to re-send again HTTP request with its Basic Authentication credentials - POL5002"), - @ApiResponse(responseCode = "403", description = "ECOMP component is not authorized - POL5003"), - @ApiResponse(responseCode = "404", description = "Specified Service is not found - SVC4503"), - @ApiResponse(responseCode = "404", - description = "Specified Service Version is not found - SVC4504"), - @ApiResponse(responseCode = "404", description = "Specified artifact is not found - SVC4505"), - @ApiResponse(responseCode = "405", - description = "Method Not Allowed: Invalid HTTP method type used (PUT,DELETE,POST will be rejected) - POL4050"), - @ApiResponse(responseCode = "500", - description = "The GET request failed either due to internal SDC problem or Cambria Service failure. ECOMP Component should continue the attempts to get the needed information - POL5000")}) - @PermissionAllowed({AafPermission.PermNames.READ_VALUE}) + @Operation(description = "Download service artifact", method = "GET", summary = "Returns downloaded artifact", responses = { + @ApiResponse(description = "default response", content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), + @ApiResponse(responseCode = "200", description = "The artifact is found and streamed.", content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), + @ApiResponse(responseCode = "400", description = "Missing 'X-ECOMP-InstanceID' HTTP header - POL5001"), + @ApiResponse(responseCode = "401", description = "ECOMP component should authenticate itself and to re-send again HTTP request with its Basic Authentication credentials - POL5002"), + @ApiResponse(responseCode = "403", description = "ECOMP component is not authorized - POL5003"), + @ApiResponse(responseCode = "404", description = "Specified Service is not found - SVC4503"), + @ApiResponse(responseCode = "404", description = "Specified Service Version is not found - SVC4504"), + @ApiResponse(responseCode = "404", description = "Specified artifact is not found - SVC4505"), + @ApiResponse(responseCode = "405", description = "Method Not Allowed: Invalid HTTP method type used (PUT,DELETE,POST will be rejected) - POL4050"), + @ApiResponse(responseCode = "500", description = "The GET request failed either due to internal SDC problem or Cambria Service failure. ECOMP Component should continue the attempts to get the needed information - POL5000")}) public Response downloadServiceArtifact( - @Parameter(description = "X-ECOMP-RequestID header", required = false)@HeaderParam(value = Constants.X_ECOMP_REQUEST_ID_HEADER) String requestId, - @Parameter(description = "X-ECOMP-InstanceID header", required = true)@HeaderParam(value = Constants.X_ECOMP_INSTANCE_ID_HEADER) final String instanceIdHeader, - @Parameter(description = "Determines the format of the body of the response", required = false)@HeaderParam(value = Constants.ACCEPT_HEADER) String accept, - @Parameter(description = "The username and password", required = true)@HeaderParam(value = Constants.AUTHORIZATION_HEADER) String authorization, - @PathParam("serviceName") final String serviceName, - @PathParam("serviceVersion") final String serviceVersion, - @PathParam("artifactName") final String artifactName) { - + @Parameter(description = "X-ECOMP-RequestID header", required = false) @HeaderParam(value = Constants.X_ECOMP_REQUEST_ID_HEADER) String requestId, + @Parameter(description = "X-ECOMP-InstanceID header", required = true) @HeaderParam(value = Constants.X_ECOMP_INSTANCE_ID_HEADER) final String instanceIdHeader, + @Parameter(description = "Determines the format of the body of the response", required = false) @HeaderParam(value = Constants.ACCEPT_HEADER) String accept, + @Parameter(description = "The username and password", required = true) @HeaderParam(value = Constants.AUTHORIZATION_HEADER) String authorization, + @PathParam("serviceName") final String serviceName, @PathParam("serviceVersion") final String serviceVersion, + @PathParam("artifactName") final String artifactName) { String requestURI = request.getRequestURI(); Wrapper responseWrapper = validateInstanceIdHeader(new Wrapper<>(), instanceIdHeader, requestURI); - if(!responseWrapper.isEmpty()) { + if (!responseWrapper.isEmpty()) { return responseWrapper.getInnerElement(); } - try { byte[] downloadRsrcArtifactEither = artifactsBusinessLogic.downloadServiceArtifactByNames(serviceName, serviceVersion, artifactName); byte[] value = downloadRsrcArtifactEither; InputStream is = new ByteArrayInputStream(value); - Map headers = new HashMap<>(); headers.put(Constants.CONTENT_DISPOSITION_HEADER, getContentDispositionValue(artifactName)); ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.OK); getComponentsUtils().auditDistributionDownload(responseFormat, new DistributionData(instanceIdHeader, requestURI)); return buildOkResponse(responseFormat, is, headers); - } catch (ComponentException e) { getComponentsUtils().auditDistributionDownload(e.getResponseFormat(), new DistributionData(instanceIdHeader, requestURI)); BeEcompErrorManager.getInstance().logBeRestApiGeneralError("download Murano package artifact for service - external API"); @@ -177,7 +154,6 @@ public class DistributionCatalogServlet extends BeGenericServlet { } /** - * * @param requestId * @param instanceIdHeader * @param accept @@ -193,48 +169,35 @@ public class DistributionCatalogServlet extends BeGenericServlet { @Path("/services/{serviceName}/{serviceVersion}/resources/{resourceName}/{resourceVersion}/artifacts/{artifactName}") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_OCTET_STREAM) - @Operation(description = "Download resource artifact", method = "GET", summary = "Returns downloaded artifact", - responses = {@ApiResponse( - content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), - @ApiResponse(responseCode = "200", description = "The artifact is found and streamed.", - content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), - @ApiResponse(responseCode = "400", - description = "Missing 'X-ECOMP-InstanceID' HTTP header - POL5001"), - @ApiResponse(responseCode = "401", - description = "ECOMP component should authenticate itself and to re-send again HTTP request with its Basic Authentication credentials - POL5002"), - @ApiResponse(responseCode = "403", description = "ECOMP component is not authorized - POL5003"), - @ApiResponse(responseCode = "404", description = "Specified Service is not found - SVC4503"), - @ApiResponse(responseCode = "404", - description = "Specified Resource Instance is not found - SVC4526"), - @ApiResponse(responseCode = "404", - description = "Specified Service Version is not found - SVC4504"), - @ApiResponse(responseCode = "404", description = "Specified artifact is not found - SVC4505"), - @ApiResponse(responseCode = "405", - description = "Method Not Allowed: Invalid HTTP method type used (PUT,DELETE,POST will be rejected) - POL4050"), - @ApiResponse(responseCode = "500", - description = "The GET request failed either due to internal SDC problem or Cambria Service failure. ECOMP Component should continue the attempts to get the needed information - POL5000")}) - @PermissionAllowed({AafPermission.PermNames.READ_VALUE}) + @Operation(description = "Download resource artifact", method = "GET", summary = "Returns downloaded artifact", responses = { + @ApiResponse(description = "default response", content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), + @ApiResponse(responseCode = "200", description = "The artifact is found and streamed.", content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), + @ApiResponse(responseCode = "400", description = "Missing 'X-ECOMP-InstanceID' HTTP header - POL5001"), + @ApiResponse(responseCode = "401", description = "ECOMP component should authenticate itself and to re-send again HTTP request with its Basic Authentication credentials - POL5002"), + @ApiResponse(responseCode = "403", description = "ECOMP component is not authorized - POL5003"), + @ApiResponse(responseCode = "404", description = "Specified Service is not found - SVC4503"), + @ApiResponse(responseCode = "404", description = "Specified Resource Instance is not found - SVC4526"), + @ApiResponse(responseCode = "404", description = "Specified Service Version is not found - SVC4504"), + @ApiResponse(responseCode = "404", description = "Specified artifact is not found - SVC4505"), + @ApiResponse(responseCode = "405", description = "Method Not Allowed: Invalid HTTP method type used (PUT,DELETE,POST will be rejected) - POL4050"), + @ApiResponse(responseCode = "500", description = "The GET request failed either due to internal SDC problem or Cambria Service failure. ECOMP Component should continue the attempts to get the needed information - POL5000")}) public Response downloadResourceArtifact( - @Parameter(description = "X-ECOMP-RequestID header", required = false)@HeaderParam(value = Constants.X_ECOMP_REQUEST_ID_HEADER) String requestId, - @Parameter(description = "X-ECOMP-InstanceID header", required = true)@HeaderParam(value = Constants.X_ECOMP_INSTANCE_ID_HEADER) final String instanceIdHeader, - @Parameter(description = "Determines the format of the body of the response", required = false)@HeaderParam(value = Constants.ACCEPT_HEADER) String accept, - @Parameter(description = "The username and password", required = true)@HeaderParam(value = Constants.AUTHORIZATION_HEADER) String authorization, - @PathParam("serviceName") final String serviceName, - @PathParam("serviceVersion") final String serviceVersion, - @PathParam("resourceName") final String resourceName, - @PathParam("resourceVersion") final String resourceVersion, - @PathParam("artifactName") final String artifactName) { - + @Parameter(description = "X-ECOMP-RequestID header", required = false) @HeaderParam(value = Constants.X_ECOMP_REQUEST_ID_HEADER) String requestId, + @Parameter(description = "X-ECOMP-InstanceID header", required = true) @HeaderParam(value = Constants.X_ECOMP_INSTANCE_ID_HEADER) final String instanceIdHeader, + @Parameter(description = "Determines the format of the body of the response", required = false) @HeaderParam(value = Constants.ACCEPT_HEADER) String accept, + @Parameter(description = "The username and password", required = true) @HeaderParam(value = Constants.AUTHORIZATION_HEADER) String authorization, + @PathParam("serviceName") final String serviceName, @PathParam("serviceVersion") final String serviceVersion, + @PathParam("resourceName") final String resourceName, @PathParam("resourceVersion") final String resourceVersion, + @PathParam("artifactName") final String artifactName) { String requestURI = request.getRequestURI(); Wrapper responseWrapper = validateInstanceIdHeader(new Wrapper<>(), instanceIdHeader, requestURI); - - if(!responseWrapper.isEmpty()) { + if (!responseWrapper.isEmpty()) { return responseWrapper.getInnerElement(); } - try { ArtifactsBusinessLogic artifactsLogic = getArtifactBL(request.getSession().getServletContext()); - byte[] downloadRsrcArtifactEither = artifactsLogic.downloadRsrcArtifactByNames(serviceName, serviceVersion, resourceName, resourceVersion, artifactName); + byte[] downloadRsrcArtifactEither = artifactsLogic + .downloadRsrcArtifactByNames(serviceName, serviceVersion, resourceName, resourceVersion, artifactName); byte[] value = downloadRsrcArtifactEither; // Returning 64-encoded as it was received during upload InputStream is = new ByteArrayInputStream(value); @@ -243,7 +206,6 @@ public class DistributionCatalogServlet extends BeGenericServlet { ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.OK); getComponentsUtils().auditDistributionDownload(responseFormat, new DistributionData(instanceIdHeader, requestURI)); return buildOkResponse(responseFormat, is, headers); - } catch (ComponentException e) { getComponentsUtils().auditDistributionDownload(e.getResponseFormat(), new DistributionData(instanceIdHeader, requestURI)); BeEcompErrorManager.getInstance().logBeRestApiGeneralError("download interface artifact for resource - external API"); @@ -253,7 +215,6 @@ public class DistributionCatalogServlet extends BeGenericServlet { } /** - * * @param requestId * @param instanceIdHeader * @param accept @@ -268,43 +229,33 @@ public class DistributionCatalogServlet extends BeGenericServlet { @Path("/services/{serviceName}/{serviceVersion}/resourceInstances/{resourceInstanceName}/artifacts/{artifactName}") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_OCTET_STREAM) - @Operation(description = "Download resource instance artifact", method = "GET", - summary = "Returns downloaded artifact", responses = { - @ApiResponse(content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), - @ApiResponse(responseCode = "200", description = "The artifact is found and streamed.", - content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), - @ApiResponse(responseCode = "400", description = "Missing 'X-ECOMP-InstanceID' HTTP header - POL5001"), - @ApiResponse(responseCode = "401", - description = "ECOMP component should authenticate itself and to re-send again HTTP request with its Basic Authentication credentials - POL5002"), - @ApiResponse(responseCode = "403", description = "ECOMP component is not authorized - POL5003"), - @ApiResponse(responseCode = "404", description = "Specified Service is not found - SVC4503"), - @ApiResponse(responseCode = "404", description = "Specified Resource Instance is not found - SVC4526"), - @ApiResponse(responseCode = "404", description = "Specified Service Version is not found - SVC4504"), - @ApiResponse(responseCode = "404", description = "Specified artifact is not found - SVC4505"), - @ApiResponse(responseCode = "405", - description = "Method Not Allowed: Invalid HTTP method type used (PUT,DELETE,POST will be rejected) - POL4050"), - @ApiResponse(responseCode = "500", - description = "The GET request failed either due to internal SDC problem or Cambria Service failure. ECOMP Component should continue the attempts to get the needed information - POL5000")}) - @PermissionAllowed({AafPermission.PermNames.READ_VALUE}) + @Operation(description = "Download resource instance artifact", method = "GET", summary = "Returns downloaded artifact", responses = { + @ApiResponse(description = "default response", content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), + @ApiResponse(responseCode = "200", description = "The artifact is found and streamed.", content = @Content(array = @ArraySchema(schema = @Schema(implementation = String.class)))), + @ApiResponse(responseCode = "400", description = "Missing 'X-ECOMP-InstanceID' HTTP header - POL5001"), + @ApiResponse(responseCode = "401", description = "ECOMP component should authenticate itself and to re-send again HTTP request with its Basic Authentication credentials - POL5002"), + @ApiResponse(responseCode = "403", description = "ECOMP component is not authorized - POL5003"), + @ApiResponse(responseCode = "404", description = "Specified Service is not found - SVC4503"), + @ApiResponse(responseCode = "404", description = "Specified Resource Instance is not found - SVC4526"), + @ApiResponse(responseCode = "404", description = "Specified Service Version is not found - SVC4504"), + @ApiResponse(responseCode = "404", description = "Specified artifact is not found - SVC4505"), + @ApiResponse(responseCode = "405", description = "Method Not Allowed: Invalid HTTP method type used (PUT,DELETE,POST will be rejected) - POL4050"), + @ApiResponse(responseCode = "500", description = "The GET request failed either due to internal SDC problem or Cambria Service failure. ECOMP Component should continue the attempts to get the needed information - POL5000")}) public Response downloadResourceInstanceArtifactByName( - @Parameter(description = "X-ECOMP-RequestID header", required = false)@HeaderParam(value = Constants.X_ECOMP_REQUEST_ID_HEADER) String requestId, - @Parameter(description = "X-ECOMP-InstanceID header", required = true)@HeaderParam(value = Constants.X_ECOMP_INSTANCE_ID_HEADER) final String instanceIdHeader, - @Parameter(description = "Determines the format of the body of the response", required = false)@HeaderParam(value = Constants.ACCEPT_HEADER) String accept, - @Parameter(description = "The username and password", required = true)@HeaderParam(value = Constants.AUTHORIZATION_HEADER) String authorization, - @PathParam("serviceName") final String serviceName, - @PathParam("serviceVersion") final String serviceVersion, - @PathParam("resourceInstanceName") final String resourceInstanceName, - @PathParam("artifactName") final String artifactName) { - + @Parameter(description = "X-ECOMP-RequestID header", required = false) @HeaderParam(value = Constants.X_ECOMP_REQUEST_ID_HEADER) String requestId, + @Parameter(description = "X-ECOMP-InstanceID header", required = true) @HeaderParam(value = Constants.X_ECOMP_INSTANCE_ID_HEADER) final String instanceIdHeader, + @Parameter(description = "Determines the format of the body of the response", required = false) @HeaderParam(value = Constants.ACCEPT_HEADER) String accept, + @Parameter(description = "The username and password", required = true) @HeaderParam(value = Constants.AUTHORIZATION_HEADER) String authorization, + @PathParam("serviceName") final String serviceName, @PathParam("serviceVersion") final String serviceVersion, + @PathParam("resourceInstanceName") final String resourceInstanceName, @PathParam("artifactName") final String artifactName) { String requestURI = request.getRequestURI(); Wrapper responseWrapper = validateInstanceIdHeader(new Wrapper<>(), instanceIdHeader, requestURI); - - if(!responseWrapper.isEmpty()) { + if (!responseWrapper.isEmpty()) { return responseWrapper.getInnerElement(); } - try { - byte[] downloadRsrcArtifactEither = artifactsBusinessLogic.downloadRsrcInstArtifactByNames(serviceName, serviceVersion, resourceInstanceName, artifactName); + byte[] downloadRsrcArtifactEither = artifactsBusinessLogic + .downloadRsrcInstArtifactByNames(serviceName, serviceVersion, resourceInstanceName, artifactName); byte[] value = downloadRsrcArtifactEither; // Returning 64-encoded as it was received during upload InputStream is = new ByteArrayInputStream(value); @@ -313,7 +264,6 @@ public class DistributionCatalogServlet extends BeGenericServlet { ResponseFormat responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.OK); getComponentsUtils().auditDistributionDownload(responseFormat, new DistributionData(instanceIdHeader, requestURI)); return buildOkResponse(responseFormat, is, headers); - } catch (ComponentException e) { getComponentsUtils().auditDistributionDownload(e.getResponseFormat(), new DistributionData(instanceIdHeader, requestURI)); BeEcompErrorManager.getInstance().logBeRestApiGeneralError("download interface artifact for resource - external API");