[英]Websockets on tomcat 7 does not work
我嘗試使用Java 8在tomcat 7下運行websocket客戶端,但會引發異常
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/inter] threw exception [Handler processing failed; nested exception is java.util.ServiceConfigurationError: javax.websocket.ContainerProvider: Provider org.apache.tomcat.websocket.WsContainerProvider not a subtype] with root cause java.util.ServiceConfigurationError: javax.websocket.ContainerProvider: Provider org.apache.tomcat.websocket.WsContainerProvider not a subtype at java.util.ServiceLoader.fail(ServiceLoader.java:239) at java.util.ServiceLoader.access$300(ServiceLoader.java:185) at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404) at java.util.ServiceLoader$1.next(ServiceLoader.java:480) at javax.websocket.ContainerProvider.getWebSocketContainer(ContainerProvider.java:66) at com.shop.inter.service.WebsocketClientEndpoint.<init>(WebsocketClientEndpoint.java:29)
...
它適用於tomcat 8,但不適用於tomcat7。這是我的websocket類:
@ClientEndpoint public class WebsocketClientEndpoint { private static final Logger LOGGER = LoggerFactory.getLogger(WebsocketClientEndpoint.class); private Session userSession = null; private MessageHandler messageHandler; public WebsocketClientEndpoint(URI endpointURI) { try { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); container.connectToServer(this, endpointURI); } catch (Exception e) { throw new RuntimeException(e); } } /** * Callback hook for Connection open events. * * @param userSession * the userSession which is opened. */ @OnOpen public void onOpen(Session userSession) { LOGGER.info("opening websocket"); this.userSession = userSession; } /** * Callback hook for Connection close events. * * @param userSession * the userSession which is getting closed. * @param reason * the reason for connection close */ @OnClose public void onClose(Session userSession, CloseReason reason) { LOGGER.info("closing websocket"); this.userSession = null; } /** * Callback hook for Message Events. This method will be invoked when a client send a message. * * @param message * The text message */ @OnMessage public void onMessage(String message) { if (this.messageHandler != null) { this.messageHandler.handleMessage(message); } } /** * Register message handler */ public void addMessageHandler(MessageHandler msgHandler) { this.messageHandler = msgHandler; } /** * Send a message. */ public void sendMessage(String message) { this.userSession.getAsyncRemote().sendText(message); } public void closeUserSession() throws IOException { this.userSession.close(); } /** * Message handler. * * @author Jiji_Sasidharan */ public static interface MessageHandler { public void handleMessage(String message); } }
唯一的依賴關系是javax.websocket-api 1.1
您能幫我解決這個問題嗎?
作為建議在這里 ,嘗試添加的JavaEE的API給你的依賴:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.