Почему я не могу вызывать методы за пределами моего сервера веб-сокетов в Java? - PullRequest
0 голосов
/ 15 марта 2019

У меня есть класс сервера 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.Однако, когда я запускаю это на своем 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

Я пытался гуглить это несколько дней, но ответов пока нет, мне очень нужна помощь.

1 Ответ

0 голосов
/ 18 марта 2019

Исключение составляет стек веб-сервисов на стороне сервера. Исключением является то, что он не может загрузить базовый класс, который является частью Apache HTTPComponents.

Вот несколько возможных объяснений:

  • В вашей среде выполнения на сервере отсутствует файл JAR.
  • JAR присутствует, но он не находится на правильном пути к классам во время выполнения.
  • Класс Header зависит от другого класса, который не смог инициализировать класс. Если это произошло, в лог-файле должны быть ранее .

JAR-файл, который вы должны искать, это «httpcore-.jar» или эквивалент из старого проекта в Джакарте.

Выясните, что из перечисленного произошло, и вы близки к решению проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...