преобразовать простой проект maven websocket tyrus в командную строку javac

Из любопытства я хотел бы создать простой проект чата сервера tyrus websockets с javac и библиотеками в -classpath.

Да, я знаю, что это не стандартный способ (mvn), но я делаю это в качестве доказательства концепции. Мне удалось создать проект, но это выдает NullPointerException

Код:

ChatMain.java:

package chat;

import java.io.IOException; 
import java.util.Collections; 
import java.util.Map; 

import javax.websocket.DeploymentException; 

import org.glassfish.tyrus.server.Server; 

public class ChatMain { 

    public static void main(String[] args) throws DeploymentException, 
            IOException { 
        Map<String, Object> properties = Collections.emptyMap(); 
        Server server = new Server("localhost", 8080, "/ws", properties, 
                ChatEndPoint.class); 
        System.out.println(server);
        try { 
            server.start(); 
            System.in.read(); 
        } finally { 
            server.stop(); 
        } 
    } 
}

ChatEndPoint.java:

package chat;

import java.io.IOException;
import java.util.Map;
import java.util.HashMap;
import java.util.Collections;
import javax.websocket.OnClose; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 
import javax.websocket.server.ServerEndpoint; 
import org.json.*;

@ServerEndpoint("/chat") 
public class ChatEndPoint { 

    private static Map<String, Session> peers = Collections.synchronizedMap(new HashMap<String, Session>());

    @OnOpen 
    public void onOpen(Session peer) { 
        System.out.println("onOpen");
    } 

    @OnMessage 
    public void onMessage(String message, Session peer) throws IOException { 
        System.out.println("onMessage");
        JSONObject json = new JSONObject(message);
        String nick = (String) json.get("nick");
        boolean newClient = json.has("action") && ((String) json.get("action")).equals("add");
        synchronized(peers) {
            // Iterate over the connected sessions
            // and broadcast the received message
            for (Map.Entry<String, Session> entry : peers.entrySet()) {
                if (newClient) {
                    JSONObject json1 = new JSONObject(json, new String[] { "action" }).put("nick", entry.getKey());
                    peer.getBasicRemote().sendText(json1.toString());
                }
                entry.getValue().getBasicRemote().sendText(message);
            }
        }
        if (newClient)
            peers.put(nick, peer);
    } 

    @OnClose 
    public void onClose(Session peer) { 
        System.out.println("onClose");
        peers.values().remove(peer);
    } 
}

javac line:

javac -cp chat/javax.websocket-api-1.1.jar:chat/tyrus-server-1.12.jar:chat/tyrus-spi-1.12.jar:chat/tyrus-core-1.12.jar:chat/grizzly-framework-2.3.22.jar:chat/grizzly-http-server-2.3.22.jar:chat/tyrus-container-grizzly-server-1.12.jar:chat/json.jar: chat/ChatMain.java

java line:

java -cp chat/javax.websocket-api-1.1.jar:chat/tyrus-server-1.12.jar:chat/tyrus-spi-1.12.jar:chat/tyrus-core-1.12.jar:chat/grizzly-framework-2.3.22.jar:chat/grizzly-http-server-2.3.22.jar:chat/tyrus-container-grizzly-server-1.12.jar:chat/json.jar: chat.ChatMain

runtime error:

Exception in thread "main" java.lang.NullPointerException at org.glassfish.tyrus.container.grizzly.server.GrizzlyServerContainer$1.stop(GrizzlyServerContainer.java:228) at org.glassfish.tyrus.server.Server.stop(Server.java:231) at chat.ChatMain.main(ChatMain.java:23)

Я понимаю что это можно сделать


person francesc    schedule 06.12.2017    source источник


Ответы (1)


Что интересно, необходимо больше библиотек. Если я включу все библиотеки в пакет websocket-ri-archive-1.12.zip, все будет хорошо. Определенно, строитель - это то, что нужно

person francesc    schedule 06.12.2017