diff --git a/src/main/java/org/elasticsearch/rest/StringRestResponse.java b/src/main/java/org/elasticsearch/common/netty/ReleaseChannelFutureListener.java similarity index 58% rename from src/main/java/org/elasticsearch/rest/StringRestResponse.java rename to src/main/java/org/elasticsearch/common/netty/ReleaseChannelFutureListener.java index ef310baf64e..a31d0f6b96b 100644 --- a/src/main/java/org/elasticsearch/rest/StringRestResponse.java +++ b/src/main/java/org/elasticsearch/common/netty/ReleaseChannelFutureListener.java @@ -17,27 +17,26 @@ * under the License. */ -package org.elasticsearch.rest; +package org.elasticsearch.common.netty; -import org.apache.lucene.util.BytesRef; -import org.apache.lucene.util.UnicodeUtil; +import org.elasticsearch.common.lease.Releasable; +import org.jboss.netty.channel.ChannelFuture; +import org.jboss.netty.channel.ChannelFutureListener; /** - * + * A channel listener that releases a {@link org.elasticsearch.common.lease.Releasable} when + * the operation is complete. */ -public class StringRestResponse extends Utf8RestResponse { +public class ReleaseChannelFutureListener implements ChannelFutureListener { - public StringRestResponse(RestStatus status) { - super(status); + private final Releasable releasable; + + public ReleaseChannelFutureListener(Releasable releasable) { + this.releasable = releasable; } - public StringRestResponse(RestStatus status, String content) { - super(status, convert(content)); + @Override + public void operationComplete(ChannelFuture future) throws Exception { + releasable.release(); } - - private static BytesRef convert(String content) { - BytesRef result = new BytesRef(); - UnicodeUtil.UTF16toUTF8(content, 0, content.length(), result); - return result; - } -} \ No newline at end of file +} diff --git a/src/main/java/org/elasticsearch/http/HttpResponse.java b/src/main/java/org/elasticsearch/http/HttpResponse.java deleted file mode 100644 index 2b8dcdc6afb..00000000000 --- a/src/main/java/org/elasticsearch/http/HttpResponse.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you 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. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.http; - -import org.elasticsearch.rest.RestResponse; - -/** - * - */ -public interface HttpResponse extends RestResponse { - -} diff --git a/src/main/java/org/elasticsearch/http/HttpServer.java b/src/main/java/org/elasticsearch/http/HttpServer.java index 0430466e216..bc02306c3e7 100644 --- a/src/main/java/org/elasticsearch/http/HttpServer.java +++ b/src/main/java/org/elasticsearch/http/HttpServer.java @@ -132,17 +132,16 @@ public class HttpServer extends AbstractLifecycleComponent { void handlePluginSite(HttpRequest request, HttpChannel channel) { if (disableSites) { - channel.sendResponse(new StringRestResponse(FORBIDDEN)); + channel.sendResponse(new BytesRestResponse(FORBIDDEN)); return; } if (request.method() == RestRequest.Method.OPTIONS) { // when we have OPTIONS request, simply send OK by default (with the Access Control Origin header which gets automatically added) - StringRestResponse response = new StringRestResponse(OK); - channel.sendResponse(response); + channel.sendResponse(new BytesRestResponse(OK)); return; } if (request.method() != RestRequest.Method.GET) { - channel.sendResponse(new StringRestResponse(FORBIDDEN)); + channel.sendResponse(new BytesRestResponse(FORBIDDEN)); return; } // TODO for a "/_plugin" endpoint, we should have a page that lists all the plugins? @@ -155,7 +154,7 @@ public class HttpServer extends AbstractLifecycleComponent { pluginName = path; sitePath = null; // If a trailing / is missing, we redirect to the right page #2654 - channel.sendResponse(new HttpRedirectRestResponse(request.rawPath() + "/")); + channel.sendResponse(new BytesRestResponse(RestStatus.MOVED_PERMANENTLY, "text/html", "")); return; } else { pluginName = path.substring(0, i1); @@ -173,31 +172,31 @@ public class HttpServer extends AbstractLifecycleComponent { File siteFile = new File(new File(environment.pluginsFile(), pluginName), "_site"); File file = new File(siteFile, sitePath); if (!file.exists() || file.isHidden()) { - channel.sendResponse(new StringRestResponse(NOT_FOUND)); + channel.sendResponse(new BytesRestResponse(NOT_FOUND)); return; } if (!file.isFile()) { // If it's not a dir, we send a 403 if (!file.isDirectory()) { - channel.sendResponse(new StringRestResponse(FORBIDDEN)); + channel.sendResponse(new BytesRestResponse(FORBIDDEN)); return; } // We don't serve dir but if index.html exists in dir we should serve it file = new File(file, "index.html"); if (!file.exists() || file.isHidden() || !file.isFile()) { - channel.sendResponse(new StringRestResponse(FORBIDDEN)); + channel.sendResponse(new BytesRestResponse(FORBIDDEN)); return; } } if (!file.getAbsolutePath().startsWith(siteFile.getAbsolutePath())) { - channel.sendResponse(new StringRestResponse(FORBIDDEN)); + channel.sendResponse(new BytesRestResponse(FORBIDDEN)); return; } try { byte[] data = Streams.copyToByteArray(file); - channel.sendResponse(new BytesRestResponse(data, guessMimeType(sitePath))); + channel.sendResponse(new BytesRestResponse(OK, guessMimeType(sitePath), data)); } catch (IOException e) { - channel.sendResponse(new StringRestResponse(INTERNAL_SERVER_ERROR)); + channel.sendResponse(new BytesRestResponse(INTERNAL_SERVER_ERROR)); } } diff --git a/src/main/java/org/elasticsearch/http/netty/HttpRequestHandler.java b/src/main/java/org/elasticsearch/http/netty/HttpRequestHandler.java index 516bf1b7b6b..280df1184c9 100644 --- a/src/main/java/org/elasticsearch/http/netty/HttpRequestHandler.java +++ b/src/main/java/org/elasticsearch/http/netty/HttpRequestHandler.java @@ -40,7 +40,8 @@ public class HttpRequestHandler extends SimpleChannelUpstreamHandler { HttpRequest request = (HttpRequest) e.getMessage(); // the netty HTTP handling always copy over the buffer to its own buffer, either in NioWorker internally // when reading, or using a cumalation buffer - serverTransport.dispatchRequest(new NettyHttpRequest(request, e.getChannel()), new NettyHttpChannel(serverTransport, e.getChannel(), request)); + NettyHttpRequest httpRequest = new NettyHttpRequest(request, e.getChannel()); + serverTransport.dispatchRequest(httpRequest, new NettyHttpChannel(serverTransport, e.getChannel(), httpRequest)); super.messageReceived(ctx, e); } diff --git a/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java b/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java index eac07600c66..d940343f659 100644 --- a/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java +++ b/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java @@ -19,12 +19,14 @@ package org.elasticsearch.http.netty; -import org.elasticsearch.common.xcontent.XContentBuilder; +import org.apache.lucene.util.BytesRef; +import org.apache.lucene.util.UnicodeUtil; +import org.elasticsearch.common.bytes.BytesReference; +import org.elasticsearch.common.lease.Releasable; +import org.elasticsearch.common.netty.ReleaseChannelFutureListener; import org.elasticsearch.http.HttpChannel; -import org.elasticsearch.http.HttpException; import org.elasticsearch.rest.RestResponse; import org.elasticsearch.rest.RestStatus; -import org.elasticsearch.rest.XContentRestResponse; import org.elasticsearch.rest.support.RestUtils; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; @@ -33,7 +35,6 @@ import org.jboss.netty.channel.ChannelFuture; import org.jboss.netty.channel.ChannelFutureListener; import org.jboss.netty.handler.codec.http.*; -import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Set; @@ -42,24 +43,34 @@ import java.util.Set; * */ public class NettyHttpChannel implements HttpChannel { + + private static final ChannelBuffer END_JSONP; + + static { + BytesRef U_END_JSONP = new BytesRef(); + UnicodeUtil.UTF16toUTF8(");", 0, ");".length(), U_END_JSONP); + END_JSONP = ChannelBuffers.wrappedBuffer(U_END_JSONP.bytes, U_END_JSONP.offset, U_END_JSONP.length); + } + private final NettyHttpServerTransport transport; private final Channel channel; - private final org.jboss.netty.handler.codec.http.HttpRequest request; + private final NettyHttpRequest request; + private final org.jboss.netty.handler.codec.http.HttpRequest nettyRequest; - public NettyHttpChannel(NettyHttpServerTransport transport, Channel channel, org.jboss.netty.handler.codec.http.HttpRequest request) { + public NettyHttpChannel(NettyHttpServerTransport transport, Channel channel, NettyHttpRequest request) { this.transport = transport; this.channel = channel; this.request = request; + this.nettyRequest = request.request(); } @Override public void sendResponse(RestResponse response) { - // Decide whether to close the connection or not. - boolean http10 = request.getProtocolVersion().equals(HttpVersion.HTTP_1_0); + boolean http10 = nettyRequest.getProtocolVersion().equals(HttpVersion.HTTP_1_0); boolean close = - HttpHeaders.Values.CLOSE.equalsIgnoreCase(request.headers().get(HttpHeaders.Names.CONNECTION)) || - (http10 && !HttpHeaders.Values.KEEP_ALIVE.equalsIgnoreCase(request.headers().get(HttpHeaders.Names.CONNECTION))); + HttpHeaders.Values.CLOSE.equalsIgnoreCase(nettyRequest.headers().get(HttpHeaders.Names.CONNECTION)) || + (http10 && !HttpHeaders.Values.KEEP_ALIVE.equalsIgnoreCase(nettyRequest.headers().get(HttpHeaders.Names.CONNECTION))); // Build the response object. HttpResponseStatus status = getStatus(response.status()); @@ -72,11 +83,11 @@ public class NettyHttpChannel implements HttpChannel { } else { resp = new DefaultHttpResponse(HttpVersion.HTTP_1_1, status); } - if (RestUtils.isBrowser(request.headers().get(HttpHeaders.Names.USER_AGENT))) { + if (RestUtils.isBrowser(nettyRequest.headers().get(HttpHeaders.Names.USER_AGENT))) { if (transport.settings().getAsBoolean("http.cors.enabled", true)) { // Add support for cross-origin Ajax requests (CORS) resp.headers().add("Access-Control-Allow-Origin", transport.settings().get("http.cors.allow-origin", "*")); - if (request.getMethod() == HttpMethod.OPTIONS) { + if (nettyRequest.getMethod() == HttpMethod.OPTIONS) { // Allow Ajax requests based on the CORS "preflight" request resp.headers().add("Access-Control-Max-Age", transport.settings().getAsInt("http.cors.max-age", 1728000)); resp.headers().add("Access-Control-Allow-Methods", transport.settings().get("http.cors.allow-methods", "OPTIONS, HEAD, GET, POST, PUT, DELETE")); @@ -85,7 +96,7 @@ public class NettyHttpChannel implements HttpChannel { } } - String opaque = request.headers().get("X-Opaque-Id"); + String opaque = nettyRequest.headers().get("X-Opaque-Id"); if (opaque != null) { resp.headers().add("X-Opaque-Id", opaque); } @@ -100,65 +111,60 @@ public class NettyHttpChannel implements HttpChannel { } } - // Convert the response content to a ChannelBuffer. - ChannelBuffer buf; + BytesReference content = response.content(); + ChannelBuffer buffer; + boolean addedReleaseListener = false; try { - if (response instanceof XContentRestResponse) { - // if its a builder based response, and it was created with a CachedStreamOutput, we can release it - // after we write the response, and no need to do an extra copy because its not thread safe - XContentBuilder builder = ((XContentRestResponse) response).builder(); - if (response.contentThreadSafe()) { - buf = builder.bytes().toChannelBuffer(); - } else { - buf = builder.bytes().copyBytesArray().toChannelBuffer(); - } + if (response.contentThreadSafe()) { + buffer = content.toChannelBuffer(); } else { - if (response.contentThreadSafe()) { - buf = ChannelBuffers.wrappedBuffer(response.content(), response.contentOffset(), response.contentLength()); - } else { - buf = ChannelBuffers.copiedBuffer(response.content(), response.contentOffset(), response.contentLength()); - } + buffer = content.copyBytesArray().toChannelBuffer(); } - } catch (IOException e) { - throw new HttpException("Failed to convert response to bytes", e); - } - if (response.prefixContent() != null || response.suffixContent() != null) { - ChannelBuffer prefixBuf = ChannelBuffers.EMPTY_BUFFER; - if (response.prefixContent() != null) { - prefixBuf = ChannelBuffers.copiedBuffer(response.prefixContent(), response.prefixContentOffset(), response.prefixContentLength()); + // handle JSONP + String callback = request.param("callback"); + if (callback != null) { + final BytesRef callbackBytes = new BytesRef(callback.length() * 4 + 1); + UnicodeUtil.UTF16toUTF8(callback, 0, callback.length(), callbackBytes); + callbackBytes.bytes[callbackBytes.length] = '('; + callbackBytes.length++; + buffer = ChannelBuffers.wrappedBuffer( + ChannelBuffers.wrappedBuffer(callbackBytes.bytes, callbackBytes.offset, callbackBytes.length), + buffer, + ChannelBuffers.wrappedBuffer(END_JSONP) + ); } - ChannelBuffer suffixBuf = ChannelBuffers.EMPTY_BUFFER; - if (response.suffixContent() != null) { - suffixBuf = ChannelBuffers.copiedBuffer(response.suffixContent(), response.suffixContentOffset(), response.suffixContentLength()); - } - buf = ChannelBuffers.wrappedBuffer(prefixBuf, buf, suffixBuf); - } - resp.setContent(buf); - resp.headers().add(HttpHeaders.Names.CONTENT_TYPE, response.contentType()); + resp.setContent(buffer); + resp.headers().add(HttpHeaders.Names.CONTENT_TYPE, response.contentType()); + resp.headers().add(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(buffer.readableBytes())); - resp.headers().add(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(buf.readableBytes())); - - if (transport.resetCookies) { - String cookieString = request.headers().get(HttpHeaders.Names.COOKIE); - if (cookieString != null) { - CookieDecoder cookieDecoder = new CookieDecoder(); - Set cookies = cookieDecoder.decode(cookieString); - if (!cookies.isEmpty()) { - // Reset the cookies if necessary. - CookieEncoder cookieEncoder = new CookieEncoder(true); - for (Cookie cookie : cookies) { - cookieEncoder.addCookie(cookie); + if (transport.resetCookies) { + String cookieString = nettyRequest.headers().get(HttpHeaders.Names.COOKIE); + if (cookieString != null) { + CookieDecoder cookieDecoder = new CookieDecoder(); + Set cookies = cookieDecoder.decode(cookieString); + if (!cookies.isEmpty()) { + // Reset the cookies if necessary. + CookieEncoder cookieEncoder = new CookieEncoder(true); + for (Cookie cookie : cookies) { + cookieEncoder.addCookie(cookie); + } + resp.headers().add(HttpHeaders.Names.SET_COOKIE, cookieEncoder.encode()); } - resp.headers().add(HttpHeaders.Names.SET_COOKIE, cookieEncoder.encode()); } } - } - // Write the response. - ChannelFuture future = channel.write(resp); - // Close the connection after the write operation is done if necessary. - if (close) { - future.addListener(ChannelFutureListener.CLOSE); + ChannelFuture future = channel.write(resp); + if (response.contentThreadSafe() && content instanceof Releasable) { + future.addListener(new ReleaseChannelFutureListener((Releasable) content)); + addedReleaseListener = true; + } + if (close) { + future.addListener(ChannelFutureListener.CLOSE); + } + } finally { + if (!addedReleaseListener && content instanceof Releasable) { + ((Releasable) content).release(); + } } } diff --git a/src/main/java/org/elasticsearch/http/netty/NettyHttpRequest.java b/src/main/java/org/elasticsearch/http/netty/NettyHttpRequest.java index 3d85172b57a..d392f597cd2 100644 --- a/src/main/java/org/elasticsearch/http/netty/NettyHttpRequest.java +++ b/src/main/java/org/elasticsearch/http/netty/NettyHttpRequest.java @@ -62,6 +62,10 @@ public class NettyHttpRequest extends HttpRequest { } } + public org.jboss.netty.handler.codec.http.HttpRequest request() { + return this.request; + } + @Override public Method method() { HttpMethod httpMethod = request.getMethod(); diff --git a/src/main/java/org/elasticsearch/rest/AbstractRestResponse.java b/src/main/java/org/elasticsearch/rest/AbstractRestResponse.java deleted file mode 100644 index f661432d5cc..00000000000 --- a/src/main/java/org/elasticsearch/rest/AbstractRestResponse.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you 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. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.rest; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.HashMap; - -/** - * - */ -public abstract class AbstractRestResponse implements RestResponse { - - Map> customHeaders; - - @Override - public byte[] prefixContent() { - return null; - } - - @Override - public int prefixContentLength() { - return -1; - } - - @Override - public int prefixContentOffset() { - return 0; - } - - @Override - public byte[] suffixContent() { - return null; - } - - @Override - public int suffixContentLength() { - return -1; - } - - @Override - public int suffixContentOffset() { - return 0; - } - - @Override - public void addHeader(String name, String value) { - if (customHeaders == null) { - customHeaders = new HashMap<>(2); - } - List header = customHeaders.get(name); - if (header == null) { - header = new ArrayList<>(); - customHeaders.put(name, header); - } - header.add(value); - } - - @Override - public Map> getHeaders() { - return customHeaders; - } -} \ No newline at end of file diff --git a/src/main/java/org/elasticsearch/rest/AbstractRestResponseActionListener.java b/src/main/java/org/elasticsearch/rest/AbstractRestResponseActionListener.java index 4a9da123197..e74934a761f 100644 --- a/src/main/java/org/elasticsearch/rest/AbstractRestResponseActionListener.java +++ b/src/main/java/org/elasticsearch/rest/AbstractRestResponseActionListener.java @@ -44,7 +44,7 @@ public abstract class AbstractRestResponseActionListener 10) { + break; + } + if (!first) { + builder.startObject("cause"); + } + buildThrowable(t, builder); + if (!first) { + builder.endObject(); + } + t = t.getCause(); + first = false; + } + builder.endObject(); + } + builder.endObject(); + return builder; + } + + private static void buildThrowable(Throwable t, XContentBuilder builder) throws IOException { + builder.field("message", t.getMessage()); + for (StackTraceElement stElement : t.getStackTrace()) { + builder.startObject("at") + .field("class", stElement.getClassName()) + .field("method", stElement.getMethodName()); + if (stElement.getFileName() != null) { + builder.field("file", stElement.getFileName()); + } + if (stElement.getLineNumber() >= 0) { + builder.field("line", stElement.getLineNumber()); + } + builder.endObject(); + } } } \ No newline at end of file diff --git a/src/main/java/org/elasticsearch/rest/HttpRedirectRestResponse.java b/src/main/java/org/elasticsearch/rest/HttpRedirectRestResponse.java deleted file mode 100644 index 022944821f1..00000000000 --- a/src/main/java/org/elasticsearch/rest/HttpRedirectRestResponse.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you 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. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.rest; - -/** - * Redirect to another web page - */ -public class HttpRedirectRestResponse extends StringRestResponse { - - public HttpRedirectRestResponse(String url) { - super(RestStatus.MOVED_PERMANENTLY, ""); - } - - @Override - public String contentType() { - return "text/html"; - } -} diff --git a/src/main/java/org/elasticsearch/rest/RestController.java b/src/main/java/org/elasticsearch/rest/RestController.java index 74385208c17..e57528b4df5 100644 --- a/src/main/java/org/elasticsearch/rest/RestController.java +++ b/src/main/java/org/elasticsearch/rest/RestController.java @@ -142,7 +142,7 @@ public class RestController extends AbstractLifecycleComponent { executeHandler(request, channel); } catch (Exception e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response for uri [" + request.uri() + "]", e1); } @@ -160,10 +160,9 @@ public class RestController extends AbstractLifecycleComponent { } else { if (request.method() == RestRequest.Method.OPTIONS) { // when we have OPTIONS request, simply send OK by default (with the Access Control Origin header which gets automatically added) - StringRestResponse response = new StringRestResponse(OK); - channel.sendResponse(response); + channel.sendResponse(new BytesRestResponse(OK)); } else { - channel.sendResponse(new StringRestResponse(BAD_REQUEST, "No handler found for uri [" + request.uri() + "] and method [" + request.method() + "]")); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, "No handler found for uri [" + request.uri() + "] and method [" + request.method() + "]")); } } } @@ -220,7 +219,7 @@ public class RestController extends AbstractLifecycleComponent { } } catch (Exception e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response for uri [" + request.uri() + "]", e1); } diff --git a/src/main/java/org/elasticsearch/rest/RestResponse.java b/src/main/java/org/elasticsearch/rest/RestResponse.java index 4b3ca6ad3b2..1673b2c2190 100644 --- a/src/main/java/org/elasticsearch/rest/RestResponse.java +++ b/src/main/java/org/elasticsearch/rest/RestResponse.java @@ -19,53 +19,63 @@ package org.elasticsearch.rest; -import java.io.IOException; +import org.elasticsearch.common.Nullable; +import org.elasticsearch.common.bytes.BytesReference; + +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; /** * */ -public interface RestResponse { +public abstract class RestResponse { + + protected Map> customHeaders; + + + /** + * The response content type. + */ + public abstract String contentType(); /** * Can the content byte[] be used only with this thread (false), or by any thread (true). */ - boolean contentThreadSafe(); - - String contentType(); + public abstract boolean contentThreadSafe(); /** - * Returns the actual content. Note, use {@link #contentLength()} in order to know the - * content length of the byte array. + * The response content. Note, if the content is {@link org.elasticsearch.common.lease.Releasable} it + * should automatically be released when done by the channel sending it. */ - byte[] content() throws IOException; + public abstract BytesReference content(); /** - * The content length. + * The rest status code. */ - int contentLength() throws IOException; - - int contentOffset() throws IOException; - - byte[] prefixContent(); - - int prefixContentLength(); - - int prefixContentOffset(); - - byte[] suffixContent(); - - int suffixContentLength(); - - int suffixContentOffset(); - - RestStatus status(); - - void addHeader(String name, String value); + public abstract RestStatus status(); /** - * @return The custom headers or null if none have been set + * Add a custom header. */ - Map> getHeaders(); + public void addHeader(String name, String value) { + if (customHeaders == null) { + customHeaders = new HashMap<>(2); + } + List header = customHeaders.get(name); + if (header == null) { + header = new ArrayList<>(); + customHeaders.put(name, header); + } + header.add(value); + } + + /** + * Returns custom headers that have been added, or null if none have been set. + */ + @Nullable + public Map> getHeaders() { + return customHeaders; + } } diff --git a/src/main/java/org/elasticsearch/rest/Utf8RestResponse.java b/src/main/java/org/elasticsearch/rest/Utf8RestResponse.java deleted file mode 100644 index 6d9e8ad9944..00000000000 --- a/src/main/java/org/elasticsearch/rest/Utf8RestResponse.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you 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. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.rest; - -import org.apache.lucene.util.BytesRef; - -/** - * An http response that is built on top of {@link org.apache.lucene.util.BytesRef}. - *

- *

Note, this class assumes that the utf8 result is not thread safe. - */ -public class Utf8RestResponse extends AbstractRestResponse implements RestResponse { - - public static final BytesRef EMPTY = new BytesRef(); - - private final RestStatus status; - - private final BytesRef utf8Result; - - private final BytesRef prefixUtf8Result; - - private final BytesRef suffixUtf8Result; - - public Utf8RestResponse(RestStatus status) { - this(status, EMPTY); - } - - public Utf8RestResponse(RestStatus status, BytesRef utf8Result) { - this(status, utf8Result, null, null); - } - - public Utf8RestResponse(RestStatus status, BytesRef utf8Result, - BytesRef prefixUtf8Result, BytesRef suffixUtf8Result) { - this.status = status; - this.utf8Result = utf8Result; - this.prefixUtf8Result = prefixUtf8Result; - this.suffixUtf8Result = suffixUtf8Result; - } - - @Override - public boolean contentThreadSafe() { - return true; - } - - @Override - public String contentType() { - return "text/plain; charset=UTF-8"; - } - - @Override - public byte[] content() { - return utf8Result.bytes; - } - - @Override - public int contentLength() { - return utf8Result.length; - } - - @Override - public int contentOffset() { - return utf8Result.offset; - } - - @Override - public RestStatus status() { - return status; - } - - @Override - public byte[] prefixContent() { - return prefixUtf8Result != null ? prefixUtf8Result.bytes : null; - } - - @Override - public int prefixContentLength() { - return prefixUtf8Result != null ? prefixUtf8Result.length : 0; - } - - @Override - public int prefixContentOffset() { - return prefixUtf8Result != null ? prefixUtf8Result.offset : 0; - } - - @Override - public byte[] suffixContent() { - return suffixUtf8Result != null ? suffixUtf8Result.bytes : null; - } - - @Override - public int suffixContentLength() { - return suffixUtf8Result != null ? suffixUtf8Result.length : 0; - } - - @Override - public int suffixContentOffset() { - return suffixUtf8Result != null ? suffixUtf8Result.offset : 0; - } -} \ No newline at end of file diff --git a/src/main/java/org/elasticsearch/rest/XContentRestResponse.java b/src/main/java/org/elasticsearch/rest/XContentRestResponse.java deleted file mode 100644 index ce4cd553884..00000000000 --- a/src/main/java/org/elasticsearch/rest/XContentRestResponse.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you 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. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.rest; - -import org.apache.lucene.util.BytesRef; -import org.apache.lucene.util.UnicodeUtil; -import org.elasticsearch.ElasticsearchIllegalArgumentException; -import org.elasticsearch.common.xcontent.XContentBuilder; - -import java.io.IOException; - -/** - * - */ -public class XContentRestResponse extends AbstractRestResponse { - - private static final byte[] END_JSONP; - - static { - BytesRef U_END_JSONP = new BytesRef(); - UnicodeUtil.UTF16toUTF8(");", 0, ");".length(), U_END_JSONP); - END_JSONP = new byte[U_END_JSONP.length]; - System.arraycopy(U_END_JSONP.bytes, U_END_JSONP.offset, END_JSONP, 0, U_END_JSONP.length); - } - - private final BytesRef prefixUtf8Result; - - private final RestStatus status; - - private final XContentBuilder builder; - - public XContentRestResponse(RestRequest request, RestStatus status, XContentBuilder builder) throws IOException { - if (request == null) { - throw new ElasticsearchIllegalArgumentException("request must be set"); - } - this.builder = builder; - this.status = status; - this.prefixUtf8Result = startJsonp(request); - } - - public XContentBuilder builder() { - return this.builder; - } - - @Override - public String contentType() { - return builder.contentType().restContentType(); - } - - @Override - public boolean contentThreadSafe() { - return true; - } - - @Override - public byte[] content() throws IOException { - return builder.bytes().array(); - } - - @Override - public int contentLength() throws IOException { - return builder.bytes().length(); - } - - @Override - public int contentOffset() throws IOException { - return 0; - } - - @Override - public RestStatus status() { - return this.status; - } - - @Override - public byte[] prefixContent() { - if (prefixUtf8Result != null) { - return prefixUtf8Result.bytes; - } - return null; - } - - @Override - public int prefixContentLength() { - if (prefixUtf8Result != null) { - return prefixUtf8Result.length; - } - return 0; - } - - @Override - public int prefixContentOffset() { - if (prefixUtf8Result != null) { - return prefixUtf8Result.offset; - } - return 0; - } - - @Override - public byte[] suffixContent() { - if (prefixUtf8Result != null) { - return END_JSONP; - } - return null; - } - - @Override - public int suffixContentLength() { - if (prefixUtf8Result != null) { - return END_JSONP.length; - } - return 0; - } - - @Override - public int suffixContentOffset() { - return 0; - } - - private static BytesRef startJsonp(RestRequest request) { - String callback = request.param("callback"); - if (callback == null) { - return null; - } - final BytesRef result = new BytesRef(); - UnicodeUtil.UTF16toUTF8(callback, 0, callback.length(), result); - result.bytes[result.length] = '('; - result.length++; - return result; - } -} diff --git a/src/main/java/org/elasticsearch/rest/XContentThrowableRestResponse.java b/src/main/java/org/elasticsearch/rest/XContentThrowableRestResponse.java deleted file mode 100644 index 09a0c7af9ba..00000000000 --- a/src/main/java/org/elasticsearch/rest/XContentThrowableRestResponse.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you 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. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.rest; - -import org.elasticsearch.ElasticsearchException; -import org.elasticsearch.common.xcontent.XContentBuilder; - -import java.io.IOException; - -import static org.elasticsearch.ExceptionsHelper.detailedMessage; -import static org.elasticsearch.rest.action.support.RestXContentBuilder.restContentBuilder; - -/** - * - */ -public class XContentThrowableRestResponse extends XContentRestResponse { - - public XContentThrowableRestResponse(RestRequest request, Throwable t) throws IOException { - this(request, ((t instanceof ElasticsearchException) ? ((ElasticsearchException) t).status() : RestStatus.INTERNAL_SERVER_ERROR), t); - } - - public XContentThrowableRestResponse(RestRequest request, RestStatus status, Throwable t) throws IOException { - super(request, status, convert(request, status, t)); - } - - private static XContentBuilder convert(RestRequest request, RestStatus status, Throwable t) throws IOException { - XContentBuilder builder = restContentBuilder(request).startObject() - .field("error", detailedMessage(t)) - .field("status", status.getStatus()); - if (t != null && request.paramAsBoolean("error_trace", false)) { - builder.startObject("error_trace"); - boolean first = true; - while (t != null) { - if (!first) { - builder.startObject("cause"); - } - buildThrowable(t, builder); - if (!first) { - builder.endObject(); - } - t = t.getCause(); - first = false; - } - builder.endObject(); - } - builder.endObject(); - return builder; - } - - private static void buildThrowable(Throwable t, XContentBuilder builder) throws IOException { - builder.field("message", t.getMessage()); - for (StackTraceElement stElement : t.getStackTrace()) { - builder.startObject("at") - .field("class", stElement.getClassName()) - .field("method", stElement.getMethodName()); - if (stElement.getFileName() != null) { - builder.field("file", stElement.getFileName()); - } - if (stElement.getLineNumber() >= 0) { - builder.field("line", stElement.getLineNumber()); - } - builder.endObject(); - } - } -} \ No newline at end of file diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/health/RestClusterHealthAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/health/RestClusterHealthAction.java index 97cc2a4d13f..de961faea69 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/health/RestClusterHealthAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/health/RestClusterHealthAction.java @@ -68,7 +68,7 @@ public class RestClusterHealthAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, PRECONDITION_FAILED, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(PRECONDITION_FAILED, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -90,7 +90,7 @@ public class RestClusterHealthAction extends BaseRestHandler { response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, status, builder)); + channel.sendResponse(new BytesRestResponse(status, builder)); } catch (Throwable e) { onFailure(e); } @@ -99,7 +99,7 @@ public class RestClusterHealthAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/hotthreads/RestNodesHotThreadsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/hotthreads/RestNodesHotThreadsAction.java index a6873affabb..85f7a8a20e3 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/hotthreads/RestNodesHotThreadsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/hotthreads/RestNodesHotThreadsAction.java @@ -69,7 +69,7 @@ public class RestNodesHotThreadsAction extends BaseRestHandler { Strings.spaceify(3, node.getHotThreads(), sb); sb.append('\n'); } - channel.sendResponse(new StringRestResponse(RestStatus.OK, sb.toString())); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, sb.toString())); } catch (Throwable e) { onFailure(e); } @@ -78,7 +78,7 @@ public class RestNodesHotThreadsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/info/RestNodesInfoAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/info/RestNodesInfoAction.java index 35d2ff5fde1..38eed71fa68 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/info/RestNodesInfoAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/info/RestNodesInfoAction.java @@ -111,7 +111,7 @@ public class RestNodesInfoAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -120,7 +120,7 @@ public class RestNodesInfoAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/restart/RestNodesRestartAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/restart/RestNodesRestartAction.java index 1709880290b..ec37a1062cd 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/restart/RestNodesRestartAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/restart/RestNodesRestartAction.java @@ -69,7 +69,7 @@ public class RestNodesRestartAction extends BaseRestHandler { builder.endObject(); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -78,7 +78,7 @@ public class RestNodesRestartAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/shutdown/RestNodesShutdownAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/shutdown/RestNodesShutdownAction.java index a0d2a695f10..aafcfb37e24 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/shutdown/RestNodesShutdownAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/shutdown/RestNodesShutdownAction.java @@ -72,7 +72,7 @@ public class RestNodesShutdownAction extends BaseRestHandler { builder.endObject(); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -81,7 +81,7 @@ public class RestNodesShutdownAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/stats/RestNodesStatsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/stats/RestNodesStatsAction.java index 477b2bf95c6..8e851382327 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/stats/RestNodesStatsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/stats/RestNodesStatsAction.java @@ -119,7 +119,7 @@ public class RestNodesStatsAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -128,7 +128,7 @@ public class RestNodesStatsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/repositories/get/RestGetRepositoriesAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/repositories/get/RestGetRepositoriesAction.java index 7c94ffdf8a0..ed8824e5dca 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/repositories/get/RestGetRepositoriesAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/repositories/get/RestGetRepositoriesAction.java @@ -67,7 +67,7 @@ public class RestGetRepositoriesAction extends BaseRestHandler { } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -76,7 +76,7 @@ public class RestGetRepositoriesAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/reroute/RestClusterRerouteAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/reroute/RestClusterRerouteAction.java index 6bb7c5270c1..b6719f55bc1 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/reroute/RestClusterRerouteAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/reroute/RestClusterRerouteAction.java @@ -59,7 +59,7 @@ public class RestClusterRerouteAction extends BaseRestHandler { clusterRerouteRequest.source(request.content()); } catch (Exception e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.warn("Failed to send response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/settings/RestClusterGetSettingsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/settings/RestClusterGetSettingsAction.java index 0bcd4e17746..37eb82cc087 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/settings/RestClusterGetSettingsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/settings/RestClusterGetSettingsAction.java @@ -66,7 +66,7 @@ public class RestClusterGetSettingsAction extends BaseRestHandler { builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -75,7 +75,7 @@ public class RestClusterGetSettingsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/settings/RestClusterUpdateSettingsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/settings/RestClusterUpdateSettingsAction.java index 787bcf95351..126e50a1fb0 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/settings/RestClusterUpdateSettingsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/settings/RestClusterUpdateSettingsAction.java @@ -58,7 +58,7 @@ public class RestClusterUpdateSettingsAction extends BaseRestHandler { } } catch (Exception e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.warn("Failed to send response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/shards/RestClusterSearchShardsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/shards/RestClusterSearchShardsAction.java index 0fe341fc8cf..e21b5b690dc 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/shards/RestClusterSearchShardsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/shards/RestClusterSearchShardsAction.java @@ -72,7 +72,7 @@ public class RestClusterSearchShardsAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -81,7 +81,7 @@ public class RestClusterSearchShardsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/create/RestCreateSnapshotAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/create/RestCreateSnapshotAction.java index 8adfd390be8..c26a9307e82 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/create/RestCreateSnapshotAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/create/RestCreateSnapshotAction.java @@ -63,7 +63,7 @@ public class RestCreateSnapshotAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, response.status(), builder)); + channel.sendResponse(new BytesRestResponse(response.status(), builder)); } catch (IOException e) { onFailure(e); } @@ -72,7 +72,7 @@ public class RestCreateSnapshotAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/get/RestGetSnapshotsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/get/RestGetSnapshotsAction.java index 5f7374bcfb5..af9970dad4f 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/get/RestGetSnapshotsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/get/RestGetSnapshotsAction.java @@ -65,7 +65,7 @@ public class RestGetSnapshotsAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (IOException e) { onFailure(e); } @@ -74,7 +74,7 @@ public class RestGetSnapshotsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/restore/RestRestoreSnapshotAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/restore/RestRestoreSnapshotAction.java index e6a7366933a..3593242247c 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/restore/RestRestoreSnapshotAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/restore/RestRestoreSnapshotAction.java @@ -60,7 +60,7 @@ public class RestRestoreSnapshotAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (IOException e) { onFailure(e); } @@ -69,7 +69,7 @@ public class RestRestoreSnapshotAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/status/RestSnapshotsStatusAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/status/RestSnapshotsStatusAction.java index 3a89d1acc50..ac798f549cd 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/status/RestSnapshotsStatusAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/snapshots/status/RestSnapshotsStatusAction.java @@ -67,7 +67,7 @@ public class RestSnapshotsStatusAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (IOException e) { onFailure(e); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/state/RestClusterStateAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/state/RestClusterStateAction.java index db89585920d..2465fd4d3ad 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/state/RestClusterStateAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/state/RestClusterStateAction.java @@ -87,7 +87,7 @@ public class RestClusterStateAction extends BaseRestHandler { builder.field(Fields.CLUSTER_NAME, response.getClusterName().value()); response.getState().settingsFilter(settingsFilter).toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -99,7 +99,7 @@ public class RestClusterStateAction extends BaseRestHandler { logger.debug("failed to handle cluster state", e); } try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/stats/RestClusterStatsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/stats/RestClusterStatsAction.java index 2363070821b..b8058a275bf 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/stats/RestClusterStatsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/stats/RestClusterStatsAction.java @@ -56,7 +56,7 @@ public class RestClusterStatsAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -65,7 +65,7 @@ public class RestClusterStatsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/cluster/tasks/RestPendingClusterTasksAction.java b/src/main/java/org/elasticsearch/rest/action/admin/cluster/tasks/RestPendingClusterTasksAction.java index cfa010a5b8b..9f72daf9cbc 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/cluster/tasks/RestPendingClusterTasksAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/cluster/tasks/RestPendingClusterTasksAction.java @@ -55,7 +55,7 @@ public class RestPendingClusterTasksAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -67,7 +67,7 @@ public class RestPendingClusterTasksAction extends BaseRestHandler { logger.debug("failed to get pending cluster tasks", e); } try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/RestIndicesAliasesAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/RestIndicesAliasesAction.java index 99a26e59ed3..83a86d52738 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/RestIndicesAliasesAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/RestIndicesAliasesAction.java @@ -133,7 +133,7 @@ public class RestIndicesAliasesAction extends BaseRestHandler { } } catch (Exception e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.warn("Failed to send response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/get/RestGetAliasesAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/get/RestGetAliasesAction.java index 699de1a0e40..57db88f150b 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/get/RestGetAliasesAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/get/RestGetAliasesAction.java @@ -72,7 +72,7 @@ public class RestGetAliasesAction extends BaseRestHandler { XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); // empty body, if indices were specified but no aliases were if (indices.length > 0 && response.getAliases().isEmpty()) { - channel.sendResponse(new XContentRestResponse(request, OK, RestXContentBuilder.emptyBuilder(request))); + channel.sendResponse(new BytesRestResponse(OK, RestXContentBuilder.emptyBuilder(request))); return; } else if (response.getAliases().isEmpty()) { String message = String.format(Locale.ROOT, "alias [%s] missing", toNamesString(getAliasesRequest.aliases())); @@ -80,7 +80,7 @@ public class RestGetAliasesAction extends BaseRestHandler { .field("error", message) .field("status", RestStatus.NOT_FOUND.getStatus()) .endObject(); - channel.sendResponse(new XContentRestResponse(request, RestStatus.NOT_FOUND, builder)); + channel.sendResponse(new BytesRestResponse(RestStatus.NOT_FOUND, builder)); return; } @@ -95,7 +95,7 @@ public class RestGetAliasesAction extends BaseRestHandler { builder.endObject(); } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -104,7 +104,7 @@ public class RestGetAliasesAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/get/RestGetIndicesAliasesAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/get/RestGetIndicesAliasesAction.java index 39989cdd24d..d0bb8765e3e 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/get/RestGetIndicesAliasesAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/get/RestGetIndicesAliasesAction.java @@ -92,7 +92,7 @@ public class RestGetIndicesAliasesAction extends BaseRestHandler { } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -101,7 +101,7 @@ public class RestGetIndicesAliasesAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/head/RestAliasesExistAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/head/RestAliasesExistAction.java index 5b9da086eac..568a2bf4f58 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/head/RestAliasesExistAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/head/RestAliasesExistAction.java @@ -61,9 +61,9 @@ public class RestAliasesExistAction extends BaseRestHandler { public void onResponse(AliasesExistResponse response) { try { if (response.isExists()) { - channel.sendResponse(new StringRestResponse(OK)); + channel.sendResponse(new BytesRestResponse(OK)); } else { - channel.sendResponse(new StringRestResponse(NOT_FOUND)); + channel.sendResponse(new BytesRestResponse(NOT_FOUND)); } } catch (Throwable e) { onFailure(e); @@ -73,7 +73,7 @@ public class RestAliasesExistAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new StringRestResponse(ExceptionsHelper.status(e))); + channel.sendResponse(new BytesRestResponse(ExceptionsHelper.status(e))); } catch (Exception e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/put/RestIndexPutAliasAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/put/RestIndexPutAliasAction.java index c2e3b5d5492..0d6a7b9101c 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/put/RestIndexPutAliasAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/put/RestIndexPutAliasAction.java @@ -100,7 +100,7 @@ public class RestIndexPutAliasAction extends BaseRestHandler { } } catch (Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.warn("Failed to send response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/analyze/RestAnalyzeAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/analyze/RestAnalyzeAction.java index b97f81b6f26..1678c811a29 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/analyze/RestAnalyzeAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/analyze/RestAnalyzeAction.java @@ -57,7 +57,7 @@ public class RestAnalyzeAction extends BaseRestHandler { } if (text == null) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, new ElasticsearchIllegalArgumentException("text is missing"))); + channel.sendResponse(new BytesRestResponse(request, new ElasticsearchIllegalArgumentException("text is missing"))); } catch (IOException e1) { logger.warn("Failed to send response", e1); } @@ -80,7 +80,7 @@ public class RestAnalyzeAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -89,7 +89,7 @@ public class RestAnalyzeAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/cache/clear/RestClearIndicesCacheAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/cache/clear/RestClearIndicesCacheAction.java index f1c65846c27..5b4d8444cc5 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/cache/clear/RestClearIndicesCacheAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/cache/clear/RestClearIndicesCacheAction.java @@ -94,7 +94,7 @@ public class RestClearIndicesCacheAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -110,7 +110,7 @@ public class RestClearIndicesCacheAction extends BaseRestHandler { buildBroadcastShardsHeader(builder, response); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -119,7 +119,7 @@ public class RestClearIndicesCacheAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/create/RestCreateIndexAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/create/RestCreateIndexAction.java index 7d0205c6b28..03296493281 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/create/RestCreateIndexAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/create/RestCreateIndexAction.java @@ -50,7 +50,7 @@ public class RestCreateIndexAction extends BaseRestHandler { createIndexRequest.source(request.content()); } catch (Exception e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.warn("Failed to send response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/exists/indices/RestIndicesExistsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/exists/indices/RestIndicesExistsAction.java index 08ed131ed50..fc8cb2e1386 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/exists/indices/RestIndicesExistsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/exists/indices/RestIndicesExistsAction.java @@ -62,9 +62,9 @@ public class RestIndicesExistsAction extends BaseRestHandler { public void onResponse(IndicesExistsResponse response) { try { if (response.isExists()) { - channel.sendResponse(new StringRestResponse(OK)); + channel.sendResponse(new BytesRestResponse(OK)); } else { - channel.sendResponse(new StringRestResponse(NOT_FOUND)); + channel.sendResponse(new BytesRestResponse(NOT_FOUND)); } } catch (Throwable e) { onFailure(e); @@ -74,7 +74,7 @@ public class RestIndicesExistsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new StringRestResponse(ExceptionsHelper.status(e))); + channel.sendResponse(new BytesRestResponse(ExceptionsHelper.status(e))); } catch (Exception e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/exists/types/RestTypesExistsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/exists/types/RestTypesExistsAction.java index 7f4582f0039..e591e035be1 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/exists/types/RestTypesExistsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/exists/types/RestTypesExistsAction.java @@ -57,9 +57,9 @@ public class RestTypesExistsAction extends BaseRestHandler { public void onResponse(TypesExistsResponse response) { try { if (response.isExists()) { - channel.sendResponse(new StringRestResponse(OK)); + channel.sendResponse(new BytesRestResponse(OK)); } else { - channel.sendResponse(new StringRestResponse(NOT_FOUND)); + channel.sendResponse(new BytesRestResponse(NOT_FOUND)); } } catch (Throwable e) { onFailure(e); @@ -69,7 +69,7 @@ public class RestTypesExistsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new StringRestResponse(ExceptionsHelper.status(e))); + channel.sendResponse(new BytesRestResponse(ExceptionsHelper.status(e))); } catch (Exception e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/flush/RestFlushAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/flush/RestFlushAction.java index 152ffdfb9ab..7f73cce3936 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/flush/RestFlushAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/flush/RestFlushAction.java @@ -77,7 +77,7 @@ public class RestFlushAction extends BaseRestHandler { buildBroadcastShardsHeader(builder, response); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -86,7 +86,7 @@ public class RestFlushAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetFieldMappingAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetFieldMappingAction.java index 4ac48c0b855..87f72747b70 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetFieldMappingAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetFieldMappingAction.java @@ -76,7 +76,7 @@ public class RestGetFieldMappingAction extends BaseRestHandler { boolean isPossibleSingleFieldRequest = indices.length == 1 && types.length == 1 && fields.length == 1; if (isPossibleSingleFieldRequest && isFieldMappingMissingField(mappingsByIndex)) { - channel.sendResponse(new XContentRestResponse(request, OK, emptyBuilder(request))); + channel.sendResponse(new BytesRestResponse(OK, emptyBuilder(request))); return; } @@ -89,7 +89,7 @@ public class RestGetFieldMappingAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, ToXContent.EMPTY_PARAMS); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, status, builder)); + channel.sendResponse(new BytesRestResponse(status, builder)); } catch (Throwable e) { onFailure(e); } @@ -98,7 +98,7 @@ public class RestGetFieldMappingAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java index 446525f16e2..bb87b0b0061 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java @@ -78,14 +78,14 @@ public class RestGetMappingAction extends BaseRestHandler { ImmutableOpenMap> mappingsByIndex = response.getMappings(); if (mappingsByIndex.isEmpty()) { if (indices.length != 0 && types.length != 0) { - channel.sendResponse(new XContentRestResponse(request, OK, RestXContentBuilder.emptyBuilder(request))); + channel.sendResponse(new BytesRestResponse(OK, RestXContentBuilder.emptyBuilder(request))); } else if (indices.length != 0) { - channel.sendResponse(new XContentThrowableRestResponse(request, new IndexMissingException(new Index(indices[0])))); + channel.sendResponse(new BytesRestResponse(request, new IndexMissingException(new Index(indices[0])))); } else if (types.length != 0) { - channel.sendResponse(new XContentThrowableRestResponse(request, new TypeMissingException(new Index("_all"), types[0]))); + channel.sendResponse(new BytesRestResponse(request, new TypeMissingException(new Index("_all"), types[0]))); } else { builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } return; } @@ -105,7 +105,7 @@ public class RestGetMappingAction extends BaseRestHandler { } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -114,7 +114,7 @@ public class RestGetMappingAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/optimize/RestOptimizeAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/optimize/RestOptimizeAction.java index 44f044c2291..4abc3c5d76e 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/optimize/RestOptimizeAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/optimize/RestOptimizeAction.java @@ -76,7 +76,7 @@ public class RestOptimizeAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -92,7 +92,7 @@ public class RestOptimizeAction extends BaseRestHandler { buildBroadcastShardsHeader(builder, response); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -101,7 +101,7 @@ public class RestOptimizeAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/recovery/RestRecoveryAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/recovery/RestRecoveryAction.java index 35da42edf53..4ba2f1fc017 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/recovery/RestRecoveryAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/recovery/RestRecoveryAction.java @@ -71,7 +71,7 @@ public class RestRecoveryAction extends BaseRestHandler { response.toXContent(builder, request); builder.endObject(); } - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -80,7 +80,7 @@ public class RestRecoveryAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException ioe) { logger.error("Failed to send failure response", ioe); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/refresh/RestRefreshAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/refresh/RestRefreshAction.java index 95d9abc83d4..f9da4b33987 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/refresh/RestRefreshAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/refresh/RestRefreshAction.java @@ -76,7 +76,7 @@ public class RestRefreshAction extends BaseRestHandler { buildBroadcastShardsHeader(builder, response); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -85,7 +85,7 @@ public class RestRefreshAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/segments/RestIndicesSegmentsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/segments/RestIndicesSegmentsAction.java index 46bce191b85..87344325b84 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/segments/RestIndicesSegmentsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/segments/RestIndicesSegmentsAction.java @@ -69,7 +69,7 @@ public class RestIndicesSegmentsAction extends BaseRestHandler { buildBroadcastShardsHeader(builder, response); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -78,7 +78,7 @@ public class RestIndicesSegmentsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestGetSettingsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestGetSettingsAction.java index 14eab6303b3..3d0f4343f03 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestGetSettingsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestGetSettingsAction.java @@ -78,7 +78,7 @@ public class RestGetSettingsAction extends BaseRestHandler { builder.endObject(); } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (IOException e) { onFailure(e); } @@ -87,7 +87,7 @@ public class RestGetSettingsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestUpdateSettingsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestUpdateSettingsAction.java index e3fcfd102dc..5b325268898 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestUpdateSettingsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestUpdateSettingsAction.java @@ -72,7 +72,7 @@ public class RestUpdateSettingsAction extends BaseRestHandler { } } catch (Exception e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, BAD_REQUEST, new SettingsException("Failed to parse index settings", e))); + channel.sendResponse(new BytesRestResponse(request, BAD_REQUEST, new SettingsException("Failed to parse index settings", e))); } catch (IOException e1) { logger.warn("Failed to send response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/stats/RestIndicesStatsAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/stats/RestIndicesStatsAction.java index bdb3f398e0c..1d5bb756f5c 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/stats/RestIndicesStatsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/stats/RestIndicesStatsAction.java @@ -109,7 +109,7 @@ public class RestIndicesStatsAction extends BaseRestHandler { buildBroadcastShardsHeader(builder, response); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -118,7 +118,7 @@ public class RestIndicesStatsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/status/RestIndicesStatusAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/status/RestIndicesStatusAction.java index 173060710b3..5b1a34d456d 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/status/RestIndicesStatusAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/status/RestIndicesStatusAction.java @@ -78,7 +78,7 @@ public class RestIndicesStatusAction extends BaseRestHandler { buildBroadcastShardsHeader(builder, response); response.toXContent(builder, request, settingsFilter); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -87,7 +87,7 @@ public class RestIndicesStatusAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/template/get/RestGetIndexTemplateAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/template/get/RestGetIndexTemplateAction.java index 629e80dd4b1..5e31b2bbce7 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/template/get/RestGetIndexTemplateAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/template/get/RestGetIndexTemplateAction.java @@ -80,7 +80,7 @@ public class RestGetIndexTemplateAction extends BaseRestHandler { RestStatus restStatus = (templateExists || implicitAll) ? OK : NOT_FOUND; - channel.sendResponse(new XContentRestResponse(request, restStatus, builder)); + channel.sendResponse(new BytesRestResponse(restStatus, builder)); } catch (Throwable e) { onFailure(e); } @@ -89,7 +89,7 @@ public class RestGetIndexTemplateAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (Exception e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/template/head/RestHeadIndexTemplateAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/template/head/RestHeadIndexTemplateAction.java index 0b18217430f..d7cba1fd5c1 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/template/head/RestHeadIndexTemplateAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/template/head/RestHeadIndexTemplateAction.java @@ -54,9 +54,9 @@ public class RestHeadIndexTemplateAction extends BaseRestHandler { boolean templateExists = getIndexTemplatesResponse.getIndexTemplates().size() > 0; if (templateExists) { - channel.sendResponse(new StringRestResponse(OK)); + channel.sendResponse(new BytesRestResponse(OK)); } else { - channel.sendResponse(new StringRestResponse(NOT_FOUND)); + channel.sendResponse(new BytesRestResponse(NOT_FOUND)); } } catch (Throwable e) { onFailure(e); @@ -66,7 +66,7 @@ public class RestHeadIndexTemplateAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new StringRestResponse(ExceptionsHelper.status(e))); + channel.sendResponse(new BytesRestResponse(ExceptionsHelper.status(e))); } catch (Exception e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/template/put/RestPutIndexTemplateAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/template/put/RestPutIndexTemplateAction.java index d65fa123f83..29eeed0f009 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/template/put/RestPutIndexTemplateAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/template/put/RestPutIndexTemplateAction.java @@ -62,7 +62,7 @@ public class RestPutIndexTemplateAction extends BaseRestHandler { putRequest.source(request.content()); } catch (Exception e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.warn("Failed to send response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/validate/query/RestValidateQueryAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/validate/query/RestValidateQueryAction.java index a4cf05d49fb..d3493d34fd7 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/validate/query/RestValidateQueryAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/validate/query/RestValidateQueryAction.java @@ -93,7 +93,7 @@ public class RestValidateQueryAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -129,7 +129,7 @@ public class RestValidateQueryAction extends BaseRestHandler { builder.endArray(); } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -138,7 +138,7 @@ public class RestValidateQueryAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/get/RestGetWarmerAction.java b/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/get/RestGetWarmerAction.java index 3634424fd1f..f16b679932e 100644 --- a/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/get/RestGetWarmerAction.java +++ b/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/get/RestGetWarmerAction.java @@ -70,7 +70,7 @@ public class RestGetWarmerAction extends BaseRestHandler { public void onResponse(GetWarmersResponse response) { try { if (indices.length > 0 && response.warmers().isEmpty()) { - channel.sendResponse(new XContentRestResponse(request, OK, RestXContentBuilder.emptyBuilder(request))); + channel.sendResponse(new BytesRestResponse(OK, RestXContentBuilder.emptyBuilder(request))); return; } @@ -87,7 +87,7 @@ public class RestGetWarmerAction extends BaseRestHandler { } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -96,7 +96,7 @@ public class RestGetWarmerAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/bulk/RestBulkAction.java b/src/main/java/org/elasticsearch/rest/action/bulk/RestBulkAction.java index 011f0ca5544..212adcfecbe 100644 --- a/src/main/java/org/elasticsearch/rest/action/bulk/RestBulkAction.java +++ b/src/main/java/org/elasticsearch/rest/action/bulk/RestBulkAction.java @@ -95,7 +95,7 @@ public class RestBulkAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -155,7 +155,7 @@ public class RestBulkAction extends BaseRestHandler { builder.endArray(); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -164,7 +164,7 @@ public class RestBulkAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/AbstractCatAction.java b/src/main/java/org/elasticsearch/rest/action/cat/AbstractCatAction.java index 7d5f507b21f..8c5f634fbf3 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/AbstractCatAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/AbstractCatAction.java @@ -36,7 +36,9 @@ public abstract class AbstractCatAction extends BaseRestHandler { } abstract void doRequest(final RestRequest request, final RestChannel channel); + abstract void documentation(StringBuilder sb); + abstract Table getTableWithHeader(final RestRequest request); @Override @@ -55,7 +57,7 @@ public abstract class AbstractCatAction extends BaseRestHandler { pad(new Table.Cell(cell.attr.containsKey("desc") ? cell.attr.get("desc") : "not available"), width[2], request, out); out.append("\n"); } - channel.sendResponse(new StringRestResponse(RestStatus.OK, out.toString())); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, out.toString())); } else { doRequest(request, channel); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestAliasAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestAliasAction.java index c204d65081c..d8f180f2bd6 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestAliasAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestAliasAction.java @@ -28,10 +28,10 @@ import org.elasticsearch.common.Strings; import org.elasticsearch.common.Table; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.rest.BytesRestResponse; import org.elasticsearch.rest.RestChannel; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.XContentThrowableRestResponse; import org.elasticsearch.rest.action.support.RestTable; import java.io.IOException; @@ -73,7 +73,7 @@ public class RestAliasAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestAllocationAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestAllocationAction.java index 94642a5dec8..ec7bbc08cd4 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestAllocationAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestAllocationAction.java @@ -34,10 +34,10 @@ import org.elasticsearch.common.Table; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.unit.ByteSizeValue; +import org.elasticsearch.rest.BytesRestResponse; import org.elasticsearch.rest.RestChannel; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.XContentThrowableRestResponse; import org.elasticsearch.rest.action.support.RestTable; import java.io.IOException; @@ -87,7 +87,7 @@ public class RestAllocationAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -98,7 +98,7 @@ public class RestAllocationAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestCatAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestCatAction.java index 765b6fbc15b..2ff2fca1fa7 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestCatAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestCatAction.java @@ -50,10 +50,10 @@ public class RestCatAction extends BaseRestHandler { @Override public void handleRequest(final RestRequest request, final RestChannel channel) { try { - channel.sendResponse(new StringRestResponse(RestStatus.OK, HELP)); + channel.sendResponse(new BytesRestResponse(RestStatus.OK, HELP)); } catch (Throwable t) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, t)); + channel.sendResponse(new BytesRestResponse(request, t)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestCountAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestCountAction.java index 95f1322d7bb..10e80f1f311 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestCountAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestCountAction.java @@ -29,10 +29,10 @@ import org.elasticsearch.common.Strings; import org.elasticsearch.common.Table; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.rest.BytesRestResponse; import org.elasticsearch.rest.RestChannel; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.XContentThrowableRestResponse; import org.elasticsearch.rest.action.support.RestActions; import org.elasticsearch.rest.action.support.RestTable; import org.joda.time.format.DateTimeFormat; @@ -87,7 +87,7 @@ public class RestCountAction extends AbstractCatAction { @Override public void onFailure(Throwable t) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, t)); + channel.sendResponse(new BytesRestResponse(request, t)); } catch (IOException e) { logger.error("Failed to send failure response", e); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestHealthAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestHealthAction.java index 2d87686bcfe..b9a06cb3064 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestHealthAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestHealthAction.java @@ -26,10 +26,10 @@ import org.elasticsearch.client.Client; import org.elasticsearch.common.Table; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.rest.BytesRestResponse; import org.elasticsearch.rest.RestChannel; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.XContentThrowableRestResponse; import org.elasticsearch.rest.action.support.RestTable; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; @@ -70,7 +70,7 @@ public class RestHealthAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestIndicesAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestIndicesAction.java index 2051f0df464..c8567d1f688 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestIndicesAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestIndicesAction.java @@ -91,7 +91,7 @@ public class RestIndicesAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -103,7 +103,7 @@ public class RestIndicesAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -114,7 +114,7 @@ public class RestIndicesAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestMasterAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestMasterAction.java index b5d5f86788b..98c09305b72 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestMasterAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestMasterAction.java @@ -28,10 +28,10 @@ import org.elasticsearch.cluster.node.DiscoveryNodes; import org.elasticsearch.common.Table; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.rest.BytesRestResponse; import org.elasticsearch.rest.RestChannel; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.XContentThrowableRestResponse; import org.elasticsearch.rest.action.support.RestTable; import java.io.IOException; @@ -71,7 +71,7 @@ public class RestMasterAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestNodesAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestNodesAction.java index fc176657f78..7d825c74adb 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestNodesAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestNodesAction.java @@ -36,10 +36,10 @@ import org.elasticsearch.common.Table; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; +import org.elasticsearch.rest.BytesRestResponse; import org.elasticsearch.rest.RestChannel; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.XContentThrowableRestResponse; import org.elasticsearch.rest.action.support.RestTable; import java.io.IOException; @@ -90,7 +90,7 @@ public class RestNodesAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -101,7 +101,7 @@ public class RestNodesAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -112,7 +112,7 @@ public class RestNodesAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestPendingClusterTasksAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestPendingClusterTasksAction.java index 80e5f18bf52..8473aeccb3d 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestPendingClusterTasksAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestPendingClusterTasksAction.java @@ -65,7 +65,7 @@ public class RestPendingClusterTasksAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestRecoveryAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestRecoveryAction.java index 423d1787b2c..44905057795 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestRecoveryAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestRecoveryAction.java @@ -30,10 +30,10 @@ import org.elasticsearch.common.Strings; import org.elasticsearch.common.Table; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.rest.BytesRestResponse; import org.elasticsearch.rest.RestChannel; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.XContentThrowableRestResponse; import org.elasticsearch.rest.action.support.RestTable; import org.apache.lucene.util.CollectionUtil; @@ -79,7 +79,7 @@ public class RestRecoveryAction extends AbstractCatAction { channel.sendResponse(RestTable.buildResponse(buildRecoveryTable(request, response), request, channel)); } catch (Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e2) { logger.error("Unable to send recovery status response", e2); } @@ -89,7 +89,7 @@ public class RestRecoveryAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/cat/RestSegmentsAction.java b/src/main/java/org/elasticsearch/rest/action/cat/RestSegmentsAction.java index 761156b219a..0a95b3f516c 100644 --- a/src/main/java/org/elasticsearch/rest/action/cat/RestSegmentsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/cat/RestSegmentsAction.java @@ -78,7 +78,7 @@ public class RestSegmentsAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -90,7 +90,7 @@ public class RestSegmentsAction extends AbstractCatAction { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java b/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java index da6a7732c58..ca31643e199 100644 --- a/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java +++ b/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java @@ -90,7 +90,7 @@ public class RestCountAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -108,7 +108,7 @@ public class RestCountAction extends BaseRestHandler { buildBroadcastShardsHeader(builder, response); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, response.status(), builder)); + channel.sendResponse(new BytesRestResponse(response.status(), builder)); } catch (Throwable e) { onFailure(e); } @@ -117,7 +117,7 @@ public class RestCountAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/delete/RestDeleteAction.java b/src/main/java/org/elasticsearch/rest/action/delete/RestDeleteAction.java index 01d83e0d5b0..65f45731cdb 100644 --- a/src/main/java/org/elasticsearch/rest/action/delete/RestDeleteAction.java +++ b/src/main/java/org/elasticsearch/rest/action/delete/RestDeleteAction.java @@ -90,7 +90,7 @@ public class RestDeleteAction extends BaseRestHandler { if (!result.isFound()) { status = NOT_FOUND; } - channel.sendResponse(new XContentRestResponse(request, status, builder)); + channel.sendResponse(new BytesRestResponse(status, builder)); } catch (Throwable e) { onFailure(e); } @@ -99,7 +99,7 @@ public class RestDeleteAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java b/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java index 981bf55c837..aafad28e5a3 100644 --- a/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java +++ b/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java @@ -90,7 +90,7 @@ public class RestDeleteByQueryAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, PRECONDITION_FAILED, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(PRECONDITION_FAILED, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -129,7 +129,7 @@ public class RestDeleteByQueryAction extends BaseRestHandler { } builder.endObject(); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, restStatus, builder)); + channel.sendResponse(new BytesRestResponse(restStatus, builder)); } catch (Throwable e) { onFailure(e); } @@ -138,7 +138,7 @@ public class RestDeleteByQueryAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/explain/RestExplainAction.java b/src/main/java/org/elasticsearch/rest/action/explain/RestExplainAction.java index b6656ffdcd7..e1486d42664 100644 --- a/src/main/java/org/elasticsearch/rest/action/explain/RestExplainAction.java +++ b/src/main/java/org/elasticsearch/rest/action/explain/RestExplainAction.java @@ -127,7 +127,7 @@ public class RestExplainAction extends BaseRestHandler { builder.endObject(); } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, response.isExists() ? OK : NOT_FOUND, builder)); + channel.sendResponse(new BytesRestResponse(response.isExists() ? OK : NOT_FOUND, builder)); } catch (Throwable e) { onFailure(e); } @@ -151,7 +151,7 @@ public class RestExplainAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/get/RestGetAction.java b/src/main/java/org/elasticsearch/rest/action/get/RestGetAction.java index 046c76c77d2..31ef77c1ce3 100644 --- a/src/main/java/org/elasticsearch/rest/action/get/RestGetAction.java +++ b/src/main/java/org/elasticsearch/rest/action/get/RestGetAction.java @@ -82,9 +82,9 @@ public class RestGetAction extends BaseRestHandler { XContentBuilder builder = restContentBuilder(request); response.toXContent(builder, request); if (!response.isExists()) { - channel.sendResponse(new XContentRestResponse(request, NOT_FOUND, builder)); + channel.sendResponse(new BytesRestResponse(NOT_FOUND, builder)); } else { - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } } catch (Throwable e) { onFailure(e); @@ -94,7 +94,7 @@ public class RestGetAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/get/RestGetSourceAction.java b/src/main/java/org/elasticsearch/rest/action/get/RestGetSourceAction.java index bb9f0e7aec9..497f261ce5a 100644 --- a/src/main/java/org/elasticsearch/rest/action/get/RestGetSourceAction.java +++ b/src/main/java/org/elasticsearch/rest/action/get/RestGetSourceAction.java @@ -66,7 +66,7 @@ public class RestGetSourceAction extends BaseRestHandler { try { ActionRequestValidationException validationError = new ActionRequestValidationException(); validationError.addValidationError("fetching source can not be disabled"); - channel.sendResponse(new XContentThrowableRestResponse(request, validationError)); + channel.sendResponse(new BytesRestResponse(request, validationError)); } catch (IOException e) { logger.error("Failed to send failure response", e); } @@ -79,10 +79,10 @@ public class RestGetSourceAction extends BaseRestHandler { try { XContentBuilder builder = restContentBuilder(request, response.getSourceInternal()); if (!response.isExists()) { - channel.sendResponse(new XContentRestResponse(request, NOT_FOUND, builder)); + channel.sendResponse(new BytesRestResponse(NOT_FOUND, builder)); } else { RestXContentBuilder.directSource(response.getSourceInternal(), builder, request); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } } catch (Throwable e) { onFailure(e); @@ -92,7 +92,7 @@ public class RestGetSourceAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/get/RestHeadAction.java b/src/main/java/org/elasticsearch/rest/action/get/RestHeadAction.java index dfa74cbdaa4..54cb4e9f515 100644 --- a/src/main/java/org/elasticsearch/rest/action/get/RestHeadAction.java +++ b/src/main/java/org/elasticsearch/rest/action/get/RestHeadAction.java @@ -64,9 +64,9 @@ public class RestHeadAction extends BaseRestHandler { public void onResponse(GetResponse response) { try { if (!response.isExists()) { - channel.sendResponse(new StringRestResponse(NOT_FOUND)); + channel.sendResponse(new BytesRestResponse(NOT_FOUND)); } else { - channel.sendResponse(new StringRestResponse(OK)); + channel.sendResponse(new BytesRestResponse(OK)); } } catch (Throwable e) { onFailure(e); @@ -76,7 +76,7 @@ public class RestHeadAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new StringRestResponse(ExceptionsHelper.status(e))); + channel.sendResponse(new BytesRestResponse(ExceptionsHelper.status(e))); } catch (Exception e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/get/RestMultiGetAction.java b/src/main/java/org/elasticsearch/rest/action/get/RestMultiGetAction.java index a89385fbe03..ef928f37a91 100644 --- a/src/main/java/org/elasticsearch/rest/action/get/RestMultiGetAction.java +++ b/src/main/java/org/elasticsearch/rest/action/get/RestMultiGetAction.java @@ -77,7 +77,7 @@ public class RestMultiGetAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -90,7 +90,7 @@ public class RestMultiGetAction extends BaseRestHandler { try { XContentBuilder builder = restContentBuilder(request); response.toXContent(builder, request); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -99,7 +99,7 @@ public class RestMultiGetAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/index/RestIndexAction.java b/src/main/java/org/elasticsearch/rest/action/index/RestIndexAction.java index 29ba8686c0a..731795775d9 100644 --- a/src/main/java/org/elasticsearch/rest/action/index/RestIndexAction.java +++ b/src/main/java/org/elasticsearch/rest/action/index/RestIndexAction.java @@ -88,7 +88,7 @@ public class RestIndexAction extends BaseRestHandler { } else { try { XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", "opType [" + sOpType + "] not allowed, either [index] or [create] are allowed").endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", "opType [" + sOpType + "] not allowed, either [index] or [create] are allowed").endObject())); } catch (IOException e1) { logger.warn("Failed to send response", e1); return; @@ -119,7 +119,7 @@ public class RestIndexAction extends BaseRestHandler { if (response.isCreated()) { status = CREATED; } - channel.sendResponse(new XContentRestResponse(request, status, builder)); + channel.sendResponse(new BytesRestResponse(status, builder)); } catch (Throwable e) { onFailure(e); } @@ -128,7 +128,7 @@ public class RestIndexAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java b/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java index 8f26c9fbeac..2775af0a6fb 100644 --- a/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java +++ b/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java @@ -67,7 +67,7 @@ public class RestMainAction extends BaseRestHandler { status = RestStatus.SERVICE_UNAVAILABLE; } if (request.method() == RestRequest.Method.HEAD) { - channel.sendResponse(new StringRestResponse(status)); + channel.sendResponse(new BytesRestResponse(status)); return; } @@ -97,7 +97,7 @@ public class RestMainAction extends BaseRestHandler { .endObject(); builder.field("tagline", "You Know, for Search"); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, status, builder)); + channel.sendResponse(new BytesRestResponse(status, builder)); } catch (Throwable e) { onFailure(e); } @@ -107,9 +107,9 @@ public class RestMainAction extends BaseRestHandler { public void onFailure(Throwable e) { try { if (request.method() == HEAD) { - channel.sendResponse(new StringRestResponse(ExceptionsHelper.status(e))); + channel.sendResponse(new BytesRestResponse(ExceptionsHelper.status(e))); } else { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } } catch (Exception e1) { logger.warn("Failed to send response", e); diff --git a/src/main/java/org/elasticsearch/rest/action/mlt/RestMoreLikeThisAction.java b/src/main/java/org/elasticsearch/rest/action/mlt/RestMoreLikeThisAction.java index 4dacd0e8283..a87f8d58d7e 100644 --- a/src/main/java/org/elasticsearch/rest/action/mlt/RestMoreLikeThisAction.java +++ b/src/main/java/org/elasticsearch/rest/action/mlt/RestMoreLikeThisAction.java @@ -94,7 +94,7 @@ public class RestMoreLikeThisAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -109,7 +109,7 @@ public class RestMoreLikeThisAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -118,7 +118,7 @@ public class RestMoreLikeThisAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/percolate/RestMultiPercolateAction.java b/src/main/java/org/elasticsearch/rest/action/percolate/RestMultiPercolateAction.java index b8064594bff..fb3a9ae76b0 100644 --- a/src/main/java/org/elasticsearch/rest/action/percolate/RestMultiPercolateAction.java +++ b/src/main/java/org/elasticsearch/rest/action/percolate/RestMultiPercolateAction.java @@ -69,7 +69,7 @@ public class RestMultiPercolateAction extends BaseRestHandler { multiPercolateRequest.add(RestActions.getRestContent(restRequest), restRequest.contentUnsafe(), allowExplicitIndex); } catch (Exception e) { try { - restChannel.sendResponse(new XContentThrowableRestResponse(restRequest, e)); + restChannel.sendResponse(new BytesRestResponse(restRequest, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -83,7 +83,7 @@ public class RestMultiPercolateAction extends BaseRestHandler { try { XContentBuilder builder = restContentBuilder(restRequest); response.toXContent(builder, restRequest); - restChannel.sendResponse(new XContentRestResponse(restRequest, OK, builder)); + restChannel.sendResponse(new BytesRestResponse(OK, builder)); } catch (IOException e) { onFailure(e); } @@ -92,7 +92,7 @@ public class RestMultiPercolateAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - restChannel.sendResponse(new XContentThrowableRestResponse(restRequest, e)); + restChannel.sendResponse(new BytesRestResponse(restRequest, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/percolate/RestPercolateAction.java b/src/main/java/org/elasticsearch/rest/action/percolate/RestPercolateAction.java index 0b2f71a3bd8..54479af36b2 100644 --- a/src/main/java/org/elasticsearch/rest/action/percolate/RestPercolateAction.java +++ b/src/main/java/org/elasticsearch/rest/action/percolate/RestPercolateAction.java @@ -118,7 +118,7 @@ public class RestPercolateAction extends BaseRestHandler { try { XContentBuilder builder = RestXContentBuilder.restContentBuilder(restRequest); response.toXContent(builder, restRequest); - restChannel.sendResponse(new XContentRestResponse(restRequest, OK, builder)); + restChannel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -127,7 +127,7 @@ public class RestPercolateAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - restChannel.sendResponse(new XContentThrowableRestResponse(restRequest, e)); + restChannel.sendResponse(new BytesRestResponse(restRequest, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/search/RestClearScrollAction.java b/src/main/java/org/elasticsearch/rest/action/search/RestClearScrollAction.java index 21115c1928c..0781db8047c 100644 --- a/src/main/java/org/elasticsearch/rest/action/search/RestClearScrollAction.java +++ b/src/main/java/org/elasticsearch/rest/action/search/RestClearScrollAction.java @@ -62,7 +62,7 @@ public class RestClearScrollAction extends BaseRestHandler { XContentBuilder builder = restContentBuilder(request); builder.startObject(); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -71,7 +71,7 @@ public class RestClearScrollAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/search/RestMultiSearchAction.java b/src/main/java/org/elasticsearch/rest/action/search/RestMultiSearchAction.java index 10a1ec041ab..9e1752f0691 100644 --- a/src/main/java/org/elasticsearch/rest/action/search/RestMultiSearchAction.java +++ b/src/main/java/org/elasticsearch/rest/action/search/RestMultiSearchAction.java @@ -73,7 +73,7 @@ public class RestMultiSearchAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -88,7 +88,7 @@ public class RestMultiSearchAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -97,7 +97,7 @@ public class RestMultiSearchAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java b/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java index 600593d92ea..fed93140f66 100644 --- a/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java +++ b/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java @@ -89,7 +89,7 @@ public class RestSearchAction extends BaseRestHandler { } try { XContentBuilder builder = restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -103,7 +103,7 @@ public class RestSearchAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, response.status(), builder)); + channel.sendResponse(new BytesRestResponse(response.status(), builder)); } catch (Exception e) { if (logger.isDebugEnabled()) { logger.debug("failed to execute search (building response)", e); @@ -115,7 +115,7 @@ public class RestSearchAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/search/RestSearchScrollAction.java b/src/main/java/org/elasticsearch/rest/action/search/RestSearchScrollAction.java index 7de4470297a..b64c1734103 100644 --- a/src/main/java/org/elasticsearch/rest/action/search/RestSearchScrollAction.java +++ b/src/main/java/org/elasticsearch/rest/action/search/RestSearchScrollAction.java @@ -78,7 +78,7 @@ public class RestSearchScrollAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -93,7 +93,7 @@ public class RestSearchScrollAction extends BaseRestHandler { builder.startObject(); response.toXContent(builder, request); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, response.status(), builder)); + channel.sendResponse(new BytesRestResponse(response.status(), builder)); } catch (Throwable e) { onFailure(e); } @@ -102,7 +102,7 @@ public class RestSearchScrollAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/suggest/RestSuggestAction.java b/src/main/java/org/elasticsearch/rest/action/suggest/RestSuggestAction.java index 2f3d6530453..f443aa658c7 100644 --- a/src/main/java/org/elasticsearch/rest/action/suggest/RestSuggestAction.java +++ b/src/main/java/org/elasticsearch/rest/action/suggest/RestSuggestAction.java @@ -83,7 +83,7 @@ public class RestSuggestAction extends BaseRestHandler { } catch (Exception e) { try { XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } @@ -102,7 +102,7 @@ public class RestSuggestAction extends BaseRestHandler { suggest.toXContent(builder, request); } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -111,7 +111,7 @@ public class RestSuggestAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/support/RestTable.java b/src/main/java/org/elasticsearch/rest/action/support/RestTable.java index 59ebbb368c3..b6ba3ae4207 100644 --- a/src/main/java/org/elasticsearch/rest/action/support/RestTable.java +++ b/src/main/java/org/elasticsearch/rest/action/support/RestTable.java @@ -58,7 +58,7 @@ public class RestTable { } builder.endArray(); - return new XContentRestResponse(request, RestStatus.OK, builder); + return new BytesRestResponse(RestStatus.OK, builder); } public static RestResponse buildTextPlainResponse(Table table, RestRequest request, RestChannel channel) { @@ -86,7 +86,7 @@ public class RestTable { out.append("\n"); } - return new StringRestResponse(RestStatus.OK, out.toString()); + return new BytesRestResponse(RestStatus.OK, out.toString()); } private static List buildDisplayHeaders(Table table, RestRequest request) { diff --git a/src/main/java/org/elasticsearch/rest/action/termvector/RestMultiTermVectorsAction.java b/src/main/java/org/elasticsearch/rest/action/termvector/RestMultiTermVectorsAction.java index e1b0b6f184b..2938aa6f5a9 100644 --- a/src/main/java/org/elasticsearch/rest/action/termvector/RestMultiTermVectorsAction.java +++ b/src/main/java/org/elasticsearch/rest/action/termvector/RestMultiTermVectorsAction.java @@ -64,7 +64,7 @@ public class RestMultiTermVectorsAction extends BaseRestHandler { multiTermVectorsRequest.add(template, RestActions.getRestContent(request)); } catch (Throwable t) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, t)); + channel.sendResponse(new BytesRestResponse(request, t)); } catch (Throwable tIO) { logger.error("Failed to send failure response", tIO); } @@ -77,7 +77,7 @@ public class RestMultiTermVectorsAction extends BaseRestHandler { try { XContentBuilder builder = restContentBuilder(request); response.toXContent(builder, request); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable t) { onFailure(t); } @@ -86,7 +86,7 @@ public class RestMultiTermVectorsAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (Throwable t) { logger.error("Failed to send failure response", t); } diff --git a/src/main/java/org/elasticsearch/rest/action/termvector/RestTermVectorAction.java b/src/main/java/org/elasticsearch/rest/action/termvector/RestTermVectorAction.java index 47d0a2893a6..85ea2399c37 100644 --- a/src/main/java/org/elasticsearch/rest/action/termvector/RestTermVectorAction.java +++ b/src/main/java/org/elasticsearch/rest/action/termvector/RestTermVectorAction.java @@ -67,7 +67,7 @@ public class RestTermVectorAction extends BaseRestHandler { } catch (IOException e) { try { XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); + channel.sendResponse(new BytesRestResponse(BAD_REQUEST, builder.startObject().field("error", e.getMessage()).endObject())); } catch (IOException e1) { logger.warn("Failed to send response", e1); @@ -87,7 +87,7 @@ public class RestTermVectorAction extends BaseRestHandler { try { XContentBuilder builder = restContentBuilder(request); response.toXContent(builder, request); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + channel.sendResponse(new BytesRestResponse(OK, builder)); } catch (Throwable e) { onFailure(e); } @@ -96,7 +96,7 @@ public class RestTermVectorAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/main/java/org/elasticsearch/rest/action/update/RestUpdateAction.java b/src/main/java/org/elasticsearch/rest/action/update/RestUpdateAction.java index 98f414aee4c..7a8cf3bb307 100644 --- a/src/main/java/org/elasticsearch/rest/action/update/RestUpdateAction.java +++ b/src/main/java/org/elasticsearch/rest/action/update/RestUpdateAction.java @@ -117,7 +117,7 @@ public class RestUpdateAction extends BaseRestHandler { } } catch (Exception e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.warn("Failed to send response", e1); } @@ -147,7 +147,7 @@ public class RestUpdateAction extends BaseRestHandler { if (response.isCreated()) { status = CREATED; } - channel.sendResponse(new XContentRestResponse(request, status, builder)); + channel.sendResponse(new BytesRestResponse(status, builder)); } catch (Throwable e) { onFailure(e); } @@ -156,7 +156,7 @@ public class RestUpdateAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); + channel.sendResponse(new BytesRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/src/test/java/org/elasticsearch/plugin/responseheader/TestResponseHeaderRestAction.java b/src/test/java/org/elasticsearch/plugin/responseheader/TestResponseHeaderRestAction.java index 4d1c9eb80d0..28ef73f1c43 100644 --- a/src/test/java/org/elasticsearch/plugin/responseheader/TestResponseHeaderRestAction.java +++ b/src/test/java/org/elasticsearch/plugin/responseheader/TestResponseHeaderRestAction.java @@ -34,11 +34,11 @@ public class TestResponseHeaderRestAction extends BaseRestHandler { @Override public void handleRequest(RestRequest request, RestChannel channel) { if ("password".equals(request.header("Secret"))) { - RestResponse response = new StringRestResponse(RestStatus.OK, "Access granted"); + RestResponse response = new BytesRestResponse(RestStatus.OK, "Access granted"); response.addHeader("Secret", "granted"); channel.sendResponse(response); } else { - RestResponse response = new StringRestResponse(RestStatus.UNAUTHORIZED, "Access denied"); + RestResponse response = new BytesRestResponse(RestStatus.UNAUTHORIZED, "Access denied"); response.addHeader("Secret", "required"); channel.sendResponse(response); }