From 36569036139cc0ad80785189ad3eb40f1b642d5f Mon Sep 17 00:00:00 2001 From: brasseld Date: Sat, 8 Apr 2017 13:59:52 +0200 Subject: [PATCH] feat(policy): Send back the policy failure payload to the consumer and respect its content-type Closes gravitee-io/issues#531 --- .../gateway/handlers/api/ApiReactorHandler.java | 13 +++++++++---- .../gateway/policy/impl/SuccessPolicyResult.java | 5 +++++ pom.xml | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gravitee-gateway-handlers/gravitee-gateway-handlers-api/src/main/java/io/gravitee/gateway/handlers/api/ApiReactorHandler.java b/gravitee-gateway-handlers/gravitee-gateway-handlers-api/src/main/java/io/gravitee/gateway/handlers/api/ApiReactorHandler.java index 4c43878f8..09f135198 100644 --- a/gravitee-gateway-handlers/gravitee-gateway-handlers-api/src/main/java/io/gravitee/gateway/handlers/api/ApiReactorHandler.java +++ b/gravitee-gateway-handlers/gravitee-gateway-handlers-api/src/main/java/io/gravitee/gateway/handlers/api/ApiReactorHandler.java @@ -193,11 +193,16 @@ private void sendPolicyFailure(PolicyResult policyResult, Response response) { if (policyResult.message() != null) { try { - String contentAsJson = mapper.writeValueAsString(new PolicyResultAsJson(policyResult)); - Buffer buf = Buffer.buffer(contentAsJson); - response.headers().set(HttpHeaders.CONTENT_LENGTH, Integer.toString(buf.length())); + Buffer payload; + if (policyResult.contentType().equalsIgnoreCase(MediaType.APPLICATION_JSON)) { + payload = Buffer.buffer(policyResult.message()); + } else { + String contentAsJson = mapper.writeValueAsString(new PolicyResultAsJson(policyResult)); + payload = Buffer.buffer(contentAsJson); + } + response.headers().set(HttpHeaders.CONTENT_LENGTH, Integer.toString(payload.length())); response.headers().set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); - response.write(buf); + response.write(payload); } catch (JsonProcessingException jpe) { logger.error("Unable to transform a policy result into a json payload", jpe); } diff --git a/gravitee-gateway-policy/src/main/java/io/gravitee/gateway/policy/impl/SuccessPolicyResult.java b/gravitee-gateway-policy/src/main/java/io/gravitee/gateway/policy/impl/SuccessPolicyResult.java index 2063d7fbb..a93a0db36 100644 --- a/gravitee-gateway-policy/src/main/java/io/gravitee/gateway/policy/impl/SuccessPolicyResult.java +++ b/gravitee-gateway-policy/src/main/java/io/gravitee/gateway/policy/impl/SuccessPolicyResult.java @@ -36,4 +36,9 @@ public int httpStatusCode() { public String message() { return null; } + + @Override + public String contentType() { + return null; + } } diff --git a/pom.xml b/pom.xml index 629da473b..bf4f479c2 100644 --- a/pom.xml +++ b/pom.xml @@ -154,7 +154,7 @@ 1.0.0 1.0.0 1.0.0 - 1.0.0 + 1.1.0-SNAPSHOT 1.3.0 1.3.0 3.4.1