Jetty WebSocketException 无法调用方法
Posted
技术标签:
【中文标题】Jetty WebSocketException 无法调用方法【英文标题】:Jetty WebSocketException can not call method 【发布时间】:2015-01-07 21:53:41 【问题描述】:我正在尝试在 java 中使用 websockets,但遇到了这个问题:
Cannot call method public final void package.ClientWebSocket#jettyOnMessage(byte[], int, int) with args: [[B, java.lang.Integer, java.lang.Integer]
这里是实际调用的代码 sn-p
@OnWebSocketMessage
public final void jettyOnMessage(final byte[] data, final int offset, final int length)
onMessage(ByteBuffer.wrap(data, offset, length));
这里有描述方法签名应该是什么的文档:
* <u>Binary Message Versions</u>
* <ol>
* <li><code>public void methodName(byte buf[], int offset, int length)</code></li>
* <li><code>public void methodName(@link Session session, byte buf[], int offset, int length)</code></li>
* <li><code>public void methodName(InputStream stream)</code></li>
* <li><code>public void methodName(@link Session session, InputStream stream)</code></li>
* </ol>
*/
如您所知,我使用的是第一个版本的通话。 我做错了什么?
编辑1:
我将方法设为非最终方法,但这并没有改变任何东西。
【问题讨论】:
【参考方案1】:如果有人遇到类似的异常,我会发现问题。
问题是我的一个方法在内部抛出了一个未捕获的异常。
如果您将整个代码包装在一个 try 中,您可以完全避免这个异常并找到它被抛出的真正原因。
解决问题的代码:
@OnWebSocketMessage
public final void jettyOnMessage(final byte[] data, final int offset, final int length)
try
onMessage(ByteBuffer.wrap(data, offset, length));
catch (Exception e)
e.printStackTrace();
onMessage 可能抛出异常的地方
在我的情况下,它最终成为 ArrayOutOfBoundsException,因为我愚蠢地做 list.get(list.size());
这些小事让你着迷。
【讨论】:
你有这方面的例子吗?我希望在 Jetty 的未来版本中更清楚地显示该错误消息。 我编辑了答案以显示我的实际解决方案代码,但我认为这取决于您如何调用该方法。如果您正在使用反射,那么我认为这将解决它:***.com/questions/9049749/… 这个来自另一个人的帖子似乎找到了一种方法来显示原因***.com/questions/25549072/… 我也在使用jetty-all(来自maven)版本9.2.2.v20140723 创建了 Jetty 错误来跟踪这个...bugs.eclipse.org/bugs/show_bug.cgi?id=457017以上是关于Jetty WebSocketException 无法调用方法的主要内容,如果未能解决你的问题,请参考以下文章
WebSocketException上的Flutter Socket io错误:连接未升级到websocket