注釈を使用せずに、プログラムでエンドポイントを登録する WebSocket アプリケーションがあります。
関連するコードは次のとおりです。
ServerEndpointConfig.Configurator configurator =
(ServerEndpointConfig.Configurator)configuratorClass.newInstance();
ServerEndpointConfig serverEndpointConfig = ServerEndpointConfig.Builder
.create(endpointClass, endpointPath)
.configurator(configurator)
.build();
ServerContainer serverContainer = (ServerContainer)app
.getServletContext()
.getAttribute("javax.websocket.server.ServerContainer");
serverContainer.addEndpoint(serverEndpointConfig);
依存関係が Maven を介して tomcat-websocket および tomcat-websocket-api ライブラリにある、組み込みの Jetty コンテナーを使用して IDE 内で実行すると、すべて正常に動作しますが、Tomcat (8.5.5) にデプロイしてから試してください。 WebSocket 接続を確立するために、ブラウザーのコンソールに次のエラーが表示されます。
'ws://127.0.0.1:8080/echo' への WebSocket 接続に失敗しました: WebSocket ハンドシェイク中のエラー: 予期しない応答コード: 500
Catalina の出力にエラーやその他の情報が記録されず、この問題をデバッグする方法がわかりません。
コンパイル時には多くの情報がわからないため、エンドポイントをプログラムで構成する必要があります。そのため、アノテーション ソリューションを紹介しないでください。
ログ レベルを FINE に設定しました。これは関連するスニペットです。
T.550 FINE [http-nio-IP-Acceptor-0] o.a.tomcat.util.threads.LimitLatch.countUpOrAwait Counting up[http-nio-IP-Acceptor-0] latch=2
T.551 FINE [http-nio-IP-exec-3] o.a.coyote.AbstractProtocol$ConnectionHandler.process Processing socket [o.a.tomcat.util.net.NioChannel@1e87b268:java.nio.channels.SocketChannel[connected local=/192.168.1.17:8080 remote=/192.168.1.17:51259]] with status [OPEN_READ]
T.551 FINE [http-nio-IP-exec-3] o.a.coyote.http11.Http11InputBuffer.parseRequestLine Received [GET /echo HTTP/1.1
Host: 192.168.1.17:8080
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://192.168.1.17:8080
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: LUCEE_ADMIN_LANG=en; cfid=de1b0016-ad0c-4601-b8ce-ecb47771b9c8; cftoken=0; LUCEE_ADMIN_LASTPAGE=debugging.logs
Sec-WebSocket-Key: Ogg0VPp9O3XZlR8rrgz4Gg==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
]
T.553 FINE [http-nio-IP-exec-3] o.a.tomcat.util.http.Rfc6265CookieProcessor.parseCookieHeader Cookies: Parsing b[]: LUCEE_ADMIN_LANG=en; cfid=de1b0016-ad0c-4601-b8ce-ecb47771b9c8; cftoken=0; LUCEE_ADMIN_LASTPAGE=debugging.logs
T.554 FINE [http-nio-IP-exec-3] o.a.catalina.authenticator.AuthenticatorBase.invoke Security checking request GET /echo
T.554 FINE [http-nio-IP-exec-3] o.a.catalina.realm.RealmBase.findSecurityConstraints No applicable constraints defined
T.554 FINE [http-nio-IP-exec-3] o.a.catalina.authenticator.AuthenticatorBase.invoke Not subject to any constraint
T.561 FINE [http-nio-IP-exec-3] o.a.tomcat.util.http.Parameters.setEncoding Set encoding to ISO-8859-1
T.563 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.loadClass loadClass(o.a.tomcat.util.collections.LocalStrings, false)
T.563 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.loadClass Delegating to parent classloader1 java.net.URLClassLoader@31befd9f
T.563 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.loadClass Searching local repositories
T.563 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.findClass findClass(o.a.tomcat.util.collections.LocalStrings)
T.564 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.findClass --> Returning ClassNotFoundException
T.564 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream getResourceAsStream(org/apache/tomcat/util/collections/LocalStrings.properties)
T.564 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream Delegating to parent classloader java.net.URLClassLoader@31befd9f
T.565 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream Searching local repositories
T.565 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream --> Resource not found, returning null
T.566 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.loadClass loadClass(o.a.tomcat.util.collections.LocalStrings_en, false)
T.566 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.loadClass Delegating to parent classloader1 java.net.URLClassLoader@31befd9f
T.567 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.loadClass Searching local repositories
T.567 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.findClass findClass(o.a.tomcat.util.collections.LocalStrings_en)
T.568 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.findClass --> Returning ClassNotFoundException
T.569 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream getResourceAsStream(org/apache/tomcat/util/collections/LocalStrings_en.properties)
T.569 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream Delegating to parent classloader java.net.URLClassLoader@31befd9f
T.570 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream Searching local repositories
T.571 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream --> Resource not found, returning null
T.571 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.loadClass loadClass(o.a.tomcat.util.collections.LocalStrings_en_US, false)
T.571 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.loadClass Delegating to parent classloader1 java.net.URLClassLoader@31befd9f
T.572 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.loadClass Searching local repositories
T.572 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.findClass findClass(o.a.tomcat.util.collections.LocalStrings_en_US)
T.573 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.findClass --> Returning ClassNotFoundException
T.573 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream getResourceAsStream(org/apache/tomcat/util/collections/LocalStrings_en_US.properties)
T.573 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream Delegating to parent classloader java.net.URLClassLoader@31befd9f
T.574 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream Searching local repositories
T.574 FINE [http-nio-IP-exec-3] o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream --> Resource not found, returning null
T.581 FINE [http-nio-IP-exec-3] o.a.coyote.AbstractProcessorLight.process Socket: [o.a.tomcat.util.net.NioEndpoint$NioSocketWrapper@6689cfeb:o.a.tomcat.util.net.NioChannel@1e87b268:java.nio.channels.SocketChannel[connected local=/192.168.1.17:8080 remote=/192.168.1.17:51259]], Status in: [OPEN_READ], State out: [CLOSED]
T.582 FINE [http-nio-IP-exec-3] o.a.tomcat.util.threads.LimitLatch.countDown Counting down[http-nio-IP-exec-3] latch=2
T.114 FINE [http-nio-IP-exec-4] o.a.coyote.AbstractProtocol$ConnectionHandler.process Processing socket [o.a.tomcat.util.net.NioChannel@406eaa39:java.nio.channels.SocketChannel[connected local=/192.168.1.17:8080 remote=/192.168.1.17:51254]] with status [ERROR]
T.115 FINE [http-nio-IP-exec-4] o.a.tomcat.util.threads.LimitLatch.countDown Counting down[http-nio-IP-exec-4] latch=1