languagetool-org/languagetool · error · RuntimeException
Got error: ${error} - HTTP response code ${conn.getResponseC
Error message
Got error: ${error} - HTTP response code ${conn.getResponseCode()} What it means
RemoteLanguageTool.getMaxTextLength reads the server's /v2/maxtextlength endpoint; if the HTTP response is not the expected success code, it reads the error stream and throws a RuntimeException containing the server's error body and the HTTP status code. This means the request reached the server but the server rejected it.
Source
Thrown at languagetool-http-client/src/main/java/org/languagetool/remote/RemoteLanguageTool.java:226
checkUrl = new URL(serverBaseUrl + V2_MAXTEXTLENGTH);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
HttpURLConnection conn = getConnection(postData, checkUrl);
try {
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
try (InputStream inputStream = conn.getInputStream()) {
StringBuilder sb = new StringBuilder();
try (InputStreamReader isr = new InputStreamReader(inputStream, "utf-8");
BufferedReader br = new BufferedReader(isr)) {
String line = br.readLine();
return Integer.parseInt(line);
}
}
} else {
try (InputStream inputStream = conn.getErrorStream()) {
String error = readStream(inputStream, "utf-8");
throw new RuntimeException("Got error: " + error + " - HTTP response code " + conn.getResponseCode());
}
}
} catch (ConnectException e) {
throw new RuntimeException("Could not connect to server at " + serverBaseUrl, e);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
conn.disconnect();
}
}
HttpURLConnection getConnection(byte[] postData, URL url) {
try {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setInstanceFollowRedirects(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");View on GitHub (pinned to 2e990059ce)
Solutions
- Read the embedded error body and HTTP status in the message to identify the server-side problem
- Verify serverBaseUrl points at a running LanguageTool server (try /v2/languages in a browser or curl)
- Check server logs for the corresponding request failure
- If behind a proxy, fix proxy/rate-limiting/auth configuration
Example fix
// before
RemoteLanguageTool lt = new RemoteLanguageTool("http://localhost:8081"); // wrong port, another app
// after
RemoteLanguageTool lt = new RemoteLanguageTool("http://localhost:8081"); // with LT running:
// curl -s http://localhost:8081/v2/maxtextlength -> 200 with number Defensive patterns
Strategy: retry
Validate before calling
HttpURLConnection probe = (HttpURLConnection) new URL(serverBaseUrl + "/v2/languages").openConnection();
probe.setConnectTimeout(3000);
if (probe.getResponseCode() != 200) throw new IllegalStateException("server not healthy"); Type guard
static boolean isLanguageToolServerUp(String baseUrl) {
try {
HttpURLConnection c = (HttpURLConnection) new URL(baseUrl + "/v2/languages").openConnection();
c.setConnectTimeout(3000);
return c.getResponseCode() == 200;
} catch (IOException e) { return false; }
} Try / catch
try {
int max = lt.getMaxTextLength();
} catch (RuntimeException e) {
if (e.getMessage().contains("Got error:")) {
// parse embedded HTTP code and server body, retry with backoff or fail fast
} else throw e;
} Prevention
- Health-check /v2/languages before calling the API
- Check server logs whenever the error body/status appears
- Bypass or correctly configure proxies for the LT host
When it happens
Trigger: Calling getMaxTextLength() against a server that returns a non-2xx response: wrong API endpoint path, server-side authentication failure, an HTTP 4xx/5xx from a proxy, or a non-LanguageTool service listening on the URL.
Common situations: Reverse proxy returning 502/503; wrong port pointing at another app; premium API endpoint hit without valid credentials; server overloaded returning errors.
Understand the failure class
Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.
Related errors
- WrongParameterNumberException
- listUnknownWords is set to false, unknown words not stored
- Unknown mode: <mode>
- Text checking was stopped due to too many errors (more than
- '${langCode}' is not a language code known to LanguageTool.
AI-assisted analysis of languagetool-org/languagetool@2e990059ce (2026-09-06).
Data as JSON: /api/errors/aa323d18f43139c3.
Report an issue: GitHub.