2015-01-03 121 views
9

我將在此前面介紹一下,我沒有使用任何Maven依賴關係,但我知道我缺少一個jar文件wls-api.jar(至少這是我讀過的)。Websocket客戶端找不到實現類

要解決這個問題,我下載了oracle-weblogic-7.9.jar,但問題依然存在。

唯一的例外是在這條線拋出

WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 

誰能告訴我,爲什麼這條線連續失敗?

UPDATE:在進一步閱讀的例子,我看到用這種依賴性

<dependency> 
<groupId>javax.websocket</groupId> 
<artifactId>javax.websocket-api</artifactId> 
<version>1.0</version> 

javax.websocket-api.jar在服務器和客戶端的構建路徑,因爲它是必需的。我在這裏錯過了什麼?

其他更新:我忘了包括拋出的錯誤!

Exception in thread "main" java.lang.RuntimeException: Could not find an implementation class. 
at javax.websocket.ContainerProvider.getWebSocketContainer(ContainerProvider.java:73) 
at connect.<init>(connect.java:21) 
at test.main(test.java:11) 
+0

代碼拋出什麼異常?您錯過依賴關係的事實可能仍然是一個問題。 –

+0

對不起,我已更新我的問題,以包括一些更多的信息以及拋出的異常! –

回答

17

javax.websocket api只是規範沒有完整的實現你可能需要把jar文件tyrus-standalone-client-1.9.jar並嘗試應該解決你的問題的同一個例子。我測試了我的例子,它工作正常。

希望這會幫助你。

+0

不幸的是,你是對的,我最終做的是做一個使用JavaScript作爲客戶端的網頁。我也有一個使用Autobahn websockets API的手機應用程序,可以用作客戶端。 –

1

我認爲RuntimeException你遇到的是幸好不是由你自己的任何直接編碼錯誤產生。

方法getWebSocketContainer(),如here所述,只是試圖加載其他類並獲取服務器中的ContainerProvider的靜態實例。

的方法查找在META-INF/services/javax.websocket.ContainerProvider文件中列出的順序ContainerProvider實現類,返回從ContainerProvider實現,是不是nullWebSocketContainer實施。

不幸的是,這意味着您的項目配置不正確。仔細檢查以確保該文件包含在項目的構建路徑中。

如果您正在查看的其他項目正在使用您描述的Maven依賴關係,我會嘗試設置您的項目執行相同的操作。

希望這有助於!

+0

在構建路徑我有javax.websocket-api-1.1.jar我也必須把它放在lib文件夾中嗎?從我可以告訴這個jar包含ContainerProvider –

+0

我不認爲lib文件夾是標準的,但嘗試它,看看它是否工作。 –

+0

我已經設置了幾個項目,總是得到相同的異常 –