TooTallNate/Java-WebSocket · error · IllegalArgumentException

Supplied opcode cannot be null

Error message

Supplied opcode cannot be null

What it means

FramedataImpl1.get(Opcode) is a static factory that maps a WebSocket Opcode to a concrete frame class (PingFrame, PongFrame, etc.). It throws IllegalArgumentException when the supplied opcode is null because there is no frame type to map to.

Solutions

  1. Check the opcode for null before calling FramedataImpl1.get()
  2. Trace where the null opcode originates (usually failed header parsing) and handle it there
  3. Use Opcode.valueOf/lookup with a fallback default instead of passing through possibly-null values

Example fix

// before
FramedataImpl1 frame = FramedataImpl1.get(opcode);
// after
if (opcode == null) { opcode = Opcode.CONTINUOUS; }
FramedataImpl1 frame = FramedataImpl1.get(opcode);
Defensive patterns

Strategy: type-guard

Validate before calling

if (opcode == null) {
  throw new IllegalArgumentException("opcode required");
}

Type guard

boolean isKnownOpcode(Opcode o) {
  return o != null && java.util.EnumSet.allOf(Opcode.class).contains(o);
}

Try / catch

try {
  FramedataImpl1 frame = FramedataImpl1.get(opcode);
} catch (IllegalArgumentException e) {
  // fall back to a safe frame type or abort the send
}

Prevention

When it happens

Trigger: Calling FramedataImpl1.get(null), often when the opcode comes from an uninitialized field, an unparseable frame header, or a lookup that returned null.

Common situations: Custom protocol handling code building frames programmatically, or wrapping a parsing routine that can return null opcodes.

Related errors


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

Appendix: source

Thrown at src/main/java/org/java_websocket/framing/FramedataImpl1.java:230

  /**
   * Set the tranferemask of this frame to the provided boolean
   *
   * @param transferemasked true if transferemasked has to be set
   */
  public void setTransferemasked(boolean transferemasked) {
    this.transferemasked = transferemasked;
  }

  /**
   * Get a frame with a specific opcode
   *
   * @param opcode the opcode representing the frame
   * @return the frame with a specific opcode
   */
  public static FramedataImpl1 get(Opcode opcode) {
    if (opcode == null) {
      throw new IllegalArgumentException("Supplied opcode cannot be null");
    }
    switch (opcode) {
      case PING:
        return new PingFrame();
      case PONG:
        return new PongFrame();
      case TEXT:
        return new TextFrame();
      case BINARY:
        return new BinaryFrame();
      case CLOSING:
        return new CloseFrame();
      case CONTINUOUS:
        return new ContinuousFrame();
      default:
        throw new IllegalArgumentException("Supplied opcode is invalid");
    }
  }

View on GitHub (pinned to afeacbf8c0)