fix #1889 call flush()

This commit is contained in:
Shinsuke Sugaya 2018-11-01 10:01:13 +09:00
parent 41cffb81e1
commit 26e63e37ae
4 changed files with 44 additions and 6 deletions

View file

@ -55,11 +55,13 @@ import org.codelibs.fess.helper.UserInfoHelper;
import org.codelibs.fess.mylasta.direction.FessConfig;
import org.codelibs.fess.util.ComponentUtil;
import org.codelibs.fess.util.DocumentUtil;
import org.codelibs.fess.util.EsUtil;
import org.codelibs.fess.util.FacetResponse;
import org.codelibs.fess.util.FacetResponse.Field;
import org.dbflute.optional.OptionalThing;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.script.Script;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -381,8 +383,7 @@ public class JsonApiManager extends BaseJsonApiManager {
}
protected String toGeoRequestString(final GeoInfo geoInfo) {
try (OutputStream out =
geoInfo.toQueryBuilder().toXContent(XContentFactory.jsonBuilder(), ToXContent.EMPTY_PARAMS).getOutputStream()) {
try (OutputStream out = EsUtil.getXContentOutputStream(geoInfo.toQueryBuilder(), XContentType.JSON)) {
return ((ByteArrayOutputStream) out).toString(Constants.UTF_8);
} catch (final Exception e) {
return "{\"error\":\"" + detailedMessage(e) + "\"}";

View file

@ -19,12 +19,13 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.text.StringEscapeUtils;
import org.codelibs.core.lang.StringUtil;
import org.codelibs.fess.Constants;
import org.codelibs.fess.util.EsUtil;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
import org.elasticsearch.cluster.health.ClusterHealthStatus;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
public class PingResponse {
private final int status;
@ -39,10 +40,13 @@ public class PingResponse {
status = response.getStatus() == ClusterHealthStatus.RED ? 1 : 0;
clusterName = response.getClusterName();
clusterStatus = response.getStatus().toString();
try (OutputStream out = response.toXContent(XContentFactory.jsonBuilder(), ToXContent.EMPTY_PARAMS).getOutputStream()) {
try (OutputStream out = EsUtil.getXContentOutputStream(response, XContentType.JSON)) {
message = ((ByteArrayOutputStream) out).toString(Constants.UTF_8);
if (StringUtil.isBlank(message)) {
message = "{}";
}
} catch (final IOException e) {
message = "{ \"error\" : \"" + e.getMessage() + "\"}";
message = "{ \"error\" : \"" + StringEscapeUtils.escapeJson(e.getMessage()) + "\"}";
}
}

View file

@ -189,6 +189,7 @@ public class SystemMonitorTarget implements TimeoutTarget {
builder.startObject();
response.toXContent(XContentFactory.jsonBuilder(), ToXContent.EMPTY_PARAMS);
builder.endObject();
builder.flush();
try (OutputStream out = builder.getOutputStream()) {
stats = ((ByteArrayOutputStream) out).toString(Constants.UTF_8);
}

View file

@ -0,0 +1,32 @@
package org.codelibs.fess.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public final class EsUtil {
private static final Logger logger = LoggerFactory.getLogger(EsUtil.class);
private EsUtil() {
}
public static OutputStream getXContentOutputStream(final ToXContent xContent, final XContentType xContentType) {
try (final XContentBuilder builder = xContent.toXContent(XContentFactory.contentBuilder(xContentType), ToXContent.EMPTY_PARAMS)) {
builder.flush();
return builder.getOutputStream();
} catch (IOException e) {
if (logger.isDebugEnabled()) {
logger.debug("Failed to print the output.", e);
}
return new ByteArrayOutputStream();
}
}
}