44
55import java .util .Map ;
66
7+ import okhttp3 .OkHttpClient ;
78import ua .naiksoftware .stomp .client .StompClient ;
89
910/**
1920public class Stomp {
2021
2122 public static StompClient over (Class clazz , String uri ) {
22- return over (clazz , uri , null );
23+ return over (clazz , uri , null , null );
2324 }
2425
2526 /**
@@ -30,10 +31,34 @@ public static StompClient over(Class clazz, String uri) {
3031 * @return StompClient for receiving and sending messages. Call #StompClient.connect
3132 */
3233 public static StompClient over (Class clazz , String uri , Map <String , String > connectHttpHeaders ) {
34+ return over (clazz , uri , connectHttpHeaders , null );
35+ }
36+
37+ /**
38+ * {@code webSocketClient} can accept the following type of clients:
39+ * <ul>
40+ * <li>{@code org.java_websocket.WebSocket}: cannot accept an existing client</li>
41+ * <li>{@code okhttp3.WebSocket}: can accept a non-null instance of {@code okhttp3.OkHttpClient}</li>
42+ * </ul>
43+ * @param clazz class for using as transport
44+ * @param uri URI to connect
45+ * @param connectHttpHeaders HTTP headers, will be passed with handshake query, may be null
46+ * @param webSocketClient Existing client that will be used to open the WebSocket connection, may be null to use default client
47+ * @return StompClient for receiving and sending messages. Call #StompClient.connect
48+ */
49+ public static StompClient over (Class clazz , String uri , Map <String , String > connectHttpHeaders , Object webSocketClient ) {
3350 if (clazz == WebSocket .class ) {
51+
52+ if (webSocketClient != null ) {
53+ throw new IllegalArgumentException ("You cannot pass a webSocketClient with 'org.java_websocket.WebSocket'. use null instead." );
54+ }
55+
3456 return createStompClient (new WebSocketsConnectionProvider (uri , connectHttpHeaders ));
3557 } else if (clazz == okhttp3 .WebSocket .class ) {
36- return createStompClient (new OkHttpConnectionProvider (uri , connectHttpHeaders ));
58+
59+ OkHttpClient okHttpClient = getOkHttpClient (webSocketClient );
60+
61+ return createStompClient (new OkHttpConnectionProvider (uri , connectHttpHeaders , okHttpClient ));
3762 }
3863
3964 throw new RuntimeException ("Not supported overlay transport: " + clazz .getName ());
@@ -42,4 +67,17 @@ public static StompClient over(Class clazz, String uri, Map<String, String> conn
4267 private static StompClient createStompClient (ConnectionProvider connectionProvider ) {
4368 return new StompClient (connectionProvider );
4469 }
70+
71+ private static OkHttpClient getOkHttpClient (Object webSocketClient ) {
72+ if (webSocketClient != null ) {
73+ if (webSocketClient instanceof OkHttpClient ) {
74+ return (OkHttpClient ) webSocketClient ;
75+ } else {
76+ throw new IllegalArgumentException ("You must pass a non-null instance of an 'okhttp3.OkHttpClient'. Or pass null to use a default websocket client." );
77+ }
78+ } else {
79+ // default http client
80+ return new OkHttpClient ();
81+ }
82+ }
4583}
0 commit comments