JSR 356 (Java API for WebSocket), part of Java EE 7 defines client API. There are multiple implementations: Tyrus (glassfish/WLS), Tomcat, ...; basically every container do provide the implementation or this api, even if not implementing other Java EE 7 specifications.
Simple example:
final WebSocketContainer client = ContainerProvider.getWebSocketContainer();
final Session session = client.connectToServer(new Endpoint() {
@Override
public void onOpen(Session session, EndpointConfig EndpointConfig) {
try {
session.addMessageHandler(new MessageHandler.Whole<String>() {
@Override
public void onMessage(String message) {
System.out.println("### Received: " + message);
}
});
session.getBasicRemote().sendText("Do or do not, there is no try.");
} catch (IOException e) {
// do nothing
}
}
@Override
public void onClose(Session session, CloseReason closeReason) {
System.out.println("### Client session closed: " + closeReason);
}
}, ClientEndpointConfig.Builder.create().build(), URI.create("ws://echo.websocket.org"));
You can check Client Endpoint chapter in Tyrus user guide for more details.