public Response deleteGroup(@HeaderParam(REQUEST_ID_NAME) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
                     @ApiParam(value = "PDP Group Name", required = true) @PathParam("name") String groupName) {
 
-        try {
-            provider.deleteGroup(groupName);
-            return addLoggingHeaders(addVersionControlHeaders(Response.status(Status.OK)), requestId)
-                            .entity(new PdpGroupDeleteResponse()).build();
-
-        } catch (PfModelException | PfModelRuntimeException e) {
-            logger.warn("delete group failed", e);
-            PdpGroupDeleteResponse resp = new PdpGroupDeleteResponse();
-            resp.setErrorDetails(e.getErrorResponse().getErrorMessage());
-            return addLoggingHeaders(addVersionControlHeaders(Response.status(e.getErrorResponse().getResponseCode())),
-                            requestId).entity(resp).build();
-        }
+        return doOperation(requestId, "delete group failed", () -> provider.deleteGroup(groupName));
     }
 
     /**
     public Response deletePolicy(@HeaderParam(REQUEST_ID_NAME) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
                     @ApiParam(value = "PDP Policy Name", required = true) @PathParam("name") String policyName) {
 
-        try {
-            provider.undeploy(new ToscaPolicyIdentifierOptVersion(policyName, null));
-            return addLoggingHeaders(addVersionControlHeaders(Response.status(Status.OK)), requestId)
-                            .entity(new PdpGroupDeleteResponse()).build();
-
-        } catch (PfModelException | PfModelRuntimeException e) {
-            logger.warn("undeploy policy failed", e);
-            PdpGroupDeleteResponse resp = new PdpGroupDeleteResponse();
-            resp.setErrorDetails(e.getErrorResponse().getErrorMessage());
-            return addLoggingHeaders(addVersionControlHeaders(Response.status(e.getErrorResponse().getResponseCode())),
-                            requestId).entity(resp).build();
-        }
+        return doOperation(requestId, "undeploy policy failed",
+            () -> provider.undeploy(new ToscaPolicyIdentifierOptVersion(policyName, null)));
     }
 
     /**
                     @ApiParam(value = "PDP Policy Name", required = true) @PathParam("name") String policyName,
                     @ApiParam(value = "PDP Policy Version", required = true) @PathParam("version") String version) {
 
+        return doOperation(requestId, "undeploy policy failed",
+            () -> provider.undeploy(new ToscaPolicyIdentifierOptVersion(policyName, version)));
+    }
+
+    /**
+     * Invokes an operation.
+     *
+     * @param requestId request ID
+     * @param errmsg error message to log if the operation throws an exception
+     * @param runnable operation to invoke
+     * @return a {@link PdpGroupDeleteResponse} response entity
+     */
+    private Response doOperation(UUID requestId, String errmsg, RunnableWithPfEx runnable) {
         try {
-            provider.undeploy(new ToscaPolicyIdentifierOptVersion(policyName, version));
+            runnable.run();
             return addLoggingHeaders(addVersionControlHeaders(Response.status(Status.OK)), requestId)
                             .entity(new PdpGroupDeleteResponse()).build();
 
         } catch (PfModelException | PfModelRuntimeException e) {
-            logger.warn("undeploy policy failed", e);
+            logger.warn(errmsg, e);
             PdpGroupDeleteResponse resp = new PdpGroupDeleteResponse();
             resp.setErrorDetails(e.getErrorResponse().getErrorMessage());
             return addLoggingHeaders(addVersionControlHeaders(Response.status(e.getErrorResponse().getResponseCode())),
 
     public Response deployGroup(@HeaderParam(REQUEST_ID_NAME) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
                     @ApiParam(value = "List of PDP Group Configuration", required = true) PdpGroups groups) {
 
-        try {
-            provider.createOrUpdateGroups(groups);
-            return addLoggingHeaders(addVersionControlHeaders(Response.status(Status.OK)), requestId)
-                            .entity(new PdpGroupDeployResponse()).build();
-
-        } catch (PfModelException | PfModelRuntimeException e) {
-            logger.warn("create groups failed", e);
-            PdpGroupDeployResponse resp = new PdpGroupDeployResponse();
-            resp.setErrorDetails(e.getErrorResponse().getErrorMessage());
-            return addLoggingHeaders(addVersionControlHeaders(Response.status(e.getErrorResponse().getResponseCode())),
-                            requestId).entity(resp).build();
-        }
+        return doOperation(requestId, "create groups failed", () -> provider.createOrUpdateGroups(groups));
     }
 
     /**
                     @ApiParam(value = "PDP Policies; only the name is required",
                                     required = true) PdpDeployPolicies policies) {
 
+        return doOperation(requestId, "deploy policies failed", () -> provider.deployPolicies(policies));
+    }
+
+    /**
+     * Invokes an operation.
+     *
+     * @param requestId request ID
+     * @param errmsg error message to log if the operation throws an exception
+     * @param runnable operation to invoke
+     * @return a {@link PdpGroupDeployResponse} response entity
+     */
+    private Response doOperation(UUID requestId, String errmsg, RunnableWithPfEx runnable) {
         try {
-            provider.deployPolicies(policies);
+            runnable.run();
             return addLoggingHeaders(addVersionControlHeaders(Response.status(Status.OK)), requestId)
                             .entity(new PdpGroupDeployResponse()).build();
 
         } catch (PfModelException | PfModelRuntimeException e) {
-            logger.warn("deploy policies failed", e);
+            logger.warn(errmsg, e);
             PdpGroupDeployResponse resp = new PdpGroupDeployResponse();
             resp.setErrorDetails(e.getErrorResponse().getErrorMessage());
             return addLoggingHeaders(addVersionControlHeaders(Response.status(e.getErrorResponse().getResponseCode())),