我有Websocket服务器类,当用户连接时我想打印。它可以没有问题的工作,但是,如果我想在此WebSocket服务器之外执行一种方法,它不会打印并关闭客户端的连接并打印出Java RuntimeException错误。
package com.rupla.myapp.endpoint;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.sql.SQLException;
import javax.websocket.EncodeException;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import com.rupla.myapp.encoders.MessageEncoder;
import com.rupla.myapp.http.MyOtherClas;
import com.rupla.myapp.encoders.MessageDecoder;
@ServerEndpoint(value = "/chatnow", encoders = MessageEncoder.class, decoders = MessageDecoder.class)
public class WebSocketServer {
@OnOpen
public void onOpen(Session session) {
extracted(session);
}
private void extracted(Session session) {
System.out.println("Session Opened (Client to Server) - ID: " + session.getId());
}
@OnMessage
public void handleTextMessage(String message, Session s) throws IOException {
System.out.println("New Text Message Received: " + message + " - From session: " + s.getId());
//So here we send client's message to the client - This works
s.getBasicRemote().sendText("Server: " + message);
try {
// Here I try to print "hello" but from 'MyOtherClas'.class using printTest() method
MyOtherClas.printTest();
//Right after this code, server closes the connection to the client and doesn't print anything
}
catch(Exception e) {
System.out.println("fail: "+e);
}
}
/**
* If I would call this method below, it would work since it's in the same class (but why?)
*/
private void printInsideClas() {
System.out.println("hello");
}
@OnClose
public void onClose(Session session) throws IOException, EncodeException {
System.out.println("Session Closed");
}
@OnError
public void onError(Throwable t) {
System.out.println("onError: " + t);
}
}
Java的非常基本的Websocket服务器。但是,当我在Tomcat 9.0上运行此操作并与JavaScript客户端连接,然后尝试将消息从我的客户端发送到服务器。它关闭服务器和客户端之间的连接,然后打印此错误。
Session Opened (Client to Server) - ID: 4
New Text Message Received: asd - From session: 4
onError: java.lang.RuntimeException: org/apache/http/Header
Session Closed
我已经尝试了几天的谷歌搜索,但我仍然没有答案,我真的需要帮助。
异常在服务器端网络服务堆栈中。例外是说它不能加载属于Apache HTTPComponents的一部分的核心类。
这是一些可能的解释:
- 您的服务器端运行时缺少JAR文件。
- 罐子存在,但不在正确的Runtime Class Path。
-
Header
类取决于其他某些具有失败类初始化的类。如果发生这种情况,则应该在日志文件中有证据。
您应该寻找的jar文件是" httpcore-.jar"或旧雅加达项目的等效物。
弄清楚以上哪些发生了,您将接近解决问题。