From: Sébastien Lesaint Date: Tue, 3 Apr 2018 16:18:38 +0000 (+0200) Subject: add Request#getReader() X-Git-Tag: 7.5~1180 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b3ad74d2e5e4a35d0a20d91a7e84c6775eb510a8;p=sonarqube.git add Request#getReader() --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/ws/ServletRequest.java b/server/sonar-server/src/main/java/org/sonar/server/ws/ServletRequest.java index a73fcdc0fb3..4393dcc0e65 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ws/ServletRequest.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ws/ServletRequest.java @@ -22,6 +22,8 @@ package org.sonar.server.ws; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.net.HttpHeaders; +import java.io.BufferedReader; +import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Map; @@ -66,6 +68,15 @@ public class ServletRequest extends ValidatingRequest { MediaTypes.DEFAULT)); } + @Override + public BufferedReader getReader() { + try { + return source.getReader(); + } catch (IOException e) { + throw new IllegalStateException("Failed to read", e); + } + } + @Override public boolean hasParam(String key) { return source.getParameterMap().containsKey(key); diff --git a/server/sonar-server/src/test/java/org/sonar/server/ws/TestRequest.java b/server/sonar-server/src/test/java/org/sonar/server/ws/TestRequest.java index e859b1be113..ef7c5a73248 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ws/TestRequest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ws/TestRequest.java @@ -24,7 +24,9 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Maps; import com.google.protobuf.GeneratedMessageV3; +import java.io.BufferedReader; import java.io.InputStream; +import java.io.StringReader; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -34,6 +36,7 @@ import org.sonar.api.server.ws.internal.PartImpl; import org.sonar.api.server.ws.internal.ValidatingRequest; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; import static org.sonarqube.ws.MediaTypes.PROTOBUF; @@ -43,10 +46,31 @@ public class TestRequest extends ValidatingRequest { private final Map params = new HashMap<>(); private final Map headers = new HashMap<>(); private final Map parts = Maps.newHashMap(); + private String payload = ""; + private boolean payloadConsumed = false; private String method = "GET"; private String mimeType = "application/octet-stream"; private String path; + @Override + public BufferedReader getReader() { + checkState(!payloadConsumed, "Payload already consumed"); + if (payload == null) { + return super.getReader(); + } + + BufferedReader res = new BufferedReader(new StringReader(payload)); + payloadConsumed = true; + return res; + } + + public TestRequest setPayload(String payload) { + checkState(!payloadConsumed, "Payload already consumed"); + + this.payload = payload; + return this; + } + @Override protected String readParam(String key) { return params.get(key); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java index 8d659db949f..d8871047b06 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/Request.java @@ -20,6 +20,7 @@ package org.sonar.api.server.ws; import com.google.common.base.Splitter; +import java.io.BufferedReader; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; @@ -52,6 +53,10 @@ public abstract class Request { */ public abstract String method(); + public BufferedReader getReader() { + throw new UnsupportedOperationException("getReader not supported"); + } + /** * Returns the requested MIME type, or {@code "application/octet-stream"} if not specified. */