# amiv1/java-stomp-ws architecture

> Architecture diagram of the GitHub repository amiv1/java-stomp-ws, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/amiv1/java-stomp-ws
- Repository: https://github.com/amiv1/java-stomp-ws

## Overview

This repository is a Java STOMP 1.2 client over WebSocket, not a broker or server implementation. A caller creates the client, connects to a STOMP endpoint, then sends to destinations or subscribes for messages; incoming frames are parsed and dispatched to registered listeners. The protocol module supplies frame encoding/parsing and command/header vocabulary. The README documents send, subscribe, connection waiting, and listener use; the graph focuses on those runtime responsibilities. Source excerpts show client-to-protocol and callback dispatch; the underlying WebSocket library is external.

Main entry points: [`stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java`](https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java) (STOMP client), [`stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompSubscription.java`](https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompSubscription.java) (Subscription state), [`stomp/src/main/java/eu/mivrenik/stomp/StompFrame.java`](https://github.com/amiv1/java-stomp-ws/blob/master/stomp/src/main/java/eu/mivrenik/stomp/StompFrame.java) (Frame codec), [`stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/listener/StompMessageListener.java`](https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/listener/StompMessageListener.java) (Message callback)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["WebSocket client"]
  node_stomp_client["STOMP client<br/>[StompClient.java]"]
  node_subscription["Subscription state"]
  node_connection_listener["Connection callbacks"]
  node_message_listener["Message callback"]
end

subgraph group_protocol["STOMP protocol"]
  node_frame["Frame codec<br/>[StompFrame.java]"]
  node_command["Command vocabulary<br/>[StompCommand.java]"]
  node_header["Header vocabulary<br/>[StompHeader.java]"]
end

node_caller(("Application caller"))
node_websocket{{"WebSocket transport"}}
node_broker{{"STOMP server"}}

node_caller -->|"connects / uses"| node_stomp_client
node_stomp_client -->|"opens transport"| node_websocket
node_stomp_client -->|"encodes / parses"| node_frame
node_frame -->|"resolves command"| node_command
node_stomp_client -->|"uses headers"| node_header
node_stomp_client -->|"creates / tracks"| node_subscription
node_subscription -->|"stores listener"| node_message_listener
node_stomp_client -->|"dispatches messages"| node_message_listener
node_stomp_client -->|"notifies status"| node_connection_listener
node_stomp_client -.->|"exchanges STOMP frames"| node_broker

click node_stomp_client "https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java"
click node_subscription "https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompSubscription.java"
click node_connection_listener "https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/listener/StompConnectionListener.java"
click node_message_listener "https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/listener/StompMessageListener.java"
click node_frame "https://github.com/amiv1/java-stomp-ws/blob/master/stomp/src/main/java/eu/mivrenik/stomp/StompFrame.java"
click node_command "https://github.com/amiv1/java-stomp-ws/blob/master/stomp/src/main/java/eu/mivrenik/stomp/StompCommand.java"
click node_header "https://github.com/amiv1/java-stomp-ws/blob/master/stomp/src/main/java/eu/mivrenik/stomp/StompHeader.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_stomp_client,node_subscription,node_connection_listener,node_message_listener toneBlue
class node_frame,node_command,node_header toneAmber
class node_caller,node_websocket toneIndigo
class node_broker toneMint
```

## Components

### WebSocket client

- [STOMP client](https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java): `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java`
- [Subscription state](https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompSubscription.java): `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompSubscription.java`
- [Connection callbacks](https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/listener/StompConnectionListener.java): `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/listener/StompConnectionListener.java`
- [Message callback](https://github.com/amiv1/java-stomp-ws/blob/master/stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/listener/StompMessageListener.java): `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/listener/StompMessageListener.java`

### STOMP protocol

- [Frame codec](https://github.com/amiv1/java-stomp-ws/blob/master/stomp/src/main/java/eu/mivrenik/stomp/StompFrame.java): `stomp/src/main/java/eu/mivrenik/stomp/StompFrame.java`
- [Command vocabulary](https://github.com/amiv1/java-stomp-ws/blob/master/stomp/src/main/java/eu/mivrenik/stomp/StompCommand.java): `stomp/src/main/java/eu/mivrenik/stomp/StompCommand.java`
- [Header vocabulary](https://github.com/amiv1/java-stomp-ws/blob/master/stomp/src/main/java/eu/mivrenik/stomp/StompHeader.java): `stomp/src/main/java/eu/mivrenik/stomp/StompHeader.java`

### Other components

- **Application caller**
- **WebSocket transport**
- **STOMP server**

## Connections

- Application caller → STOMP client: connects / uses (evidence: `README.md`)
- STOMP client → WebSocket transport: opens transport (evidence: `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java`)
- STOMP client → Frame codec: encodes / parses (evidence: `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java`)
- Frame codec → Command vocabulary: resolves command (evidence: `stomp/src/main/java/eu/mivrenik/stomp/StompFrame.java`)
- STOMP client → Header vocabulary: uses headers (evidence: `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java`)
- STOMP client → Subscription state: creates / tracks (evidence: `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java`)
- Subscription state → Message callback: stores listener (evidence: `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompSubscription.java`)
- STOMP client → Message callback: dispatches messages (evidence: `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java`)
- STOMP client → Connection callbacks: notifies status (evidence: `stomp-client-ws/src/main/java/eu/mivrenik/stomp/client/StompClient.java`)
- STOMP client → STOMP server: exchanges STOMP frames (evidence: `README.md`)
