alibaba/DataX · error · Exception
Response Entity Is Null
Error message
Response Entity Is Null
What it means
HttpClientUtil.executeAndGet throws this when the server returns status 200 but the response entity is null, so there is no body to convert to a String. It is the companion check to the status-code check: the request 'succeeded' but carried no payload, which this utility treats as an error because callers expect a body.
Solutions
- Confirm with curl -i whether the endpoint really returns an empty body on success.
- If an empty 200 is valid for your flow, stop using executeAndGet for that call and use a path that tolerates a null entity.
- Check for proxies/gateways between DataX and the service that may drop response bodies.
- Verify the endpoint path and Accept headers match the API version the server implements.
Example fix
// before String body = httpClientUtil.executeAndGet(get); // throws on empty 200 // after HttpResponse resp = httpClient.execute(get); HttpEntity e = resp.getEntity(); String body = (e == null) ? "" : EntityUtils.toString(e, Consts.UTF_8);
Defensive patterns
Strategy: try-catch
Try / catch
try { body = httpClientUtil.executeAndGet(req); } catch (Exception e) { if ("Response Entity Is Null".equals(e.getMessage())) { body = ""; /* 200 with no body: acceptable for ack endpoints */ } else throw e; } Prevention
- Know which endpoints return empty 200s and do not route them through executeAndGet.
- Regression-test integrations against the actual server version, not stubs, to catch body-less responses early.
When it happens
Trigger: A HEAD-like or empty 200 response from the endpoint, a server that acknowledges with no body, or a connection reset after headers are received so the entity stream is absent. Only occurs when status == 200 and response.getEntity() returns null.
Common situations: Health-check or ack endpoints that return bare 200s, intermediate proxies that strip bodies, or version drift where an endpoint stopped returning content. Rare compared to the status-code error but hits the same call sites.
Related errors
- Response Status Code :
- 切分份数不能小于1. 此处:expectSliceNumber=
- 根据字符串进行切分时仅支持 ASCII 字符串,而字符串
- 参数 bigInteger 不能为空.
- 对 BigInteger 进行切分时,其左右区间不能为 null. 此处:left=
AI-assisted analysis of alibaba/DataX@80ec23d5c5 (2026-08-14).
Data as JSON: /api/errors/0508465a80438872.
Report an issue: GitHub.
Appendix: source
Thrown at core/src/main/java/com/alibaba/datax/core/util/HttpClientUtil.java:131
public String executeAndGet(HttpRequestBase httpRequestBase) throws Exception {
HttpResponse response;
String entiStr = "";
try {
response = httpClient.execute(httpRequestBase);
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
System.err.println("请求地址:" + httpRequestBase.getURI() + ", 请求方法:" + httpRequestBase.getMethod()
+ ",STATUS CODE = " + response.getStatusLine().getStatusCode());
if (httpRequestBase != null) {
httpRequestBase.abort();
}
throw new Exception("Response Status Code : " + response.getStatusLine().getStatusCode());
} else {
HttpEntity entity = response.getEntity();
if (entity != null) {
entiStr = EntityUtils.toString(entity, Consts.UTF_8);
} else {
throw new Exception("Response Entity Is Null");
}
}
} catch (Exception e) {
throw e;
}
return entiStr;
}
public String executeAndGetWithRetry(final HttpRequestBase httpRequestBase, final int retryTimes, final long retryInterval) {
try {
return RetryUtil.asyncExecuteWithRetry(new Callable<String>() {
@Override
public String call() throws Exception {
return executeAndGet(httpRequestBase);
}
}, retryTimes, retryInterval, true, HTTP_TIMEOUT_INMILLIONSECONDS + 1000, asyncExecutor);
} catch (Exception e) {View on GitHub (pinned to 80ec23d5c5)