TooTallNate/Java-WebSocket · error · LimitExceededException

Payload limit reached.

Error message

Payload limit reached.

What it means

translateSingleFrameCheckLengthLimit throws LimitExceededException("Payload limit reached.", maxFrameSize) when a frame's payload length exceeds the configured maxFrameSize of the Draft_6455 instance. This is the library's built-in defense against oversized frames.

Solutions

  1. Increase maxFrameSize on the draft: draft.setMaxFrameSize(desiredLimit) on both sides consistently
  2. Fragment large messages into multiple frames each within the limit
  3. Catch LimitExceededException and close with code 1009 (message too big) instead of crashing
  4. Align client and server frame/message size configuration

Example fix

// before
Draft_6455 draft = new Draft_6455(); // default maxFrameSize, big frames rejected
// after
Draft_6455 draft = new Draft_6455();
draft.setMaxFrameSize(8 * 1024 * 1024); // allow up to 8 MiB frames
Defensive patterns

Strategy: validation

Validate before calling

// ensure sender payload fits the receiver's configured limit
if (Charsetfunctions.utf8Bytes(message).length > maxFrameSize) {
  throw new IllegalArgumentException("Message exceeds maxFrameSize=" + maxFrameSize);
}

Try / catch

try {
  conn.send(message);
} catch (WebsocketNotConnectedException e) {
  // connection gone
} catch (IllegalArgumentException e) {
  log.error("Frame size limit: {}", e.getMessage());
}

Prevention

When it happens

Trigger: Incoming frame length (after decoding 126/127 length forms) exceeds maxFrameSize set via setMaxFrameSize() (default Integer.MAX_VALUE); called from translateSingleFrame and translateSingleFramePayloadLength.

Common situations: Server configured with a small maxFrameSize (e.g. 1 MiB) receiving larger frames from clients; a client raised its send size but the server limit was not updated; large message framing instead of fragmenting.

Understand the failure class

Background: payload too large / request exceeds maximum size: why libraries cap bytes and how to fix oversize payloads — this error's family across 50 libraries.

Related errors


AI-assisted analysis of TooTallNate/Java-WebSocket@afeacbf8c0 (2026-09-09). Data as JSON: /api/errors/7fe53570f2a9daa7. Report an issue: GitHub.

Appendix: source

Thrown at src/main/java/org/java_websocket/drafts/Draft_6455.java:655

      payloadlength = (int) length;
    }
    return new TranslatedPayloadMetaData(payloadlength, realpacketsize);
  }

  /**
   * Check if the frame size exceeds the allowed limit
   *
   * @param length the current payload length
   * @throws LimitExceededException if the payload length is to big
   */
  private void translateSingleFrameCheckLengthLimit(long length) throws LimitExceededException {
    if (length > Integer.MAX_VALUE) {
      log.trace("Limit exedeed: Payloadsize is to big...");
      throw new LimitExceededException("Payloadsize is to big...");
    }
    if (length > maxFrameSize) {
      log.trace("Payload limit reached. Allowed: {} Current: {}", maxFrameSize, length);
      throw new LimitExceededException("Payload limit reached.", maxFrameSize);
    }
    if (length < 0) {
      log.trace("Limit underflow: Payloadsize is to little...");
      throw new LimitExceededException("Payloadsize is to little...");
    }
  }

  /**
   * Check if the max packet size is smaller than the real packet size
   *
   * @param maxpacketsize  the max packet size
   * @param realpacketsize the real packet size
   * @throws IncompleteException if the maxpacketsize is smaller than the realpackagesize
   */
  private void translateSingleFrameCheckPacketSize(int maxpacketsize, int realpacketsize)
      throws IncompleteException {
    if (maxpacketsize < realpacketsize) {
      log.trace("Incomplete frame: maxpacketsize < realpacketsize");

View on GitHub (pinned to afeacbf8c0)