Spring boot @ClientEndpoint не может @AutoWired мой сервис - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь использовать @Autowired, чтобы использовать мой сервис в @ClientEndpoint

, но есть java .lang.NullPointerException

вот мой код

P2PService. java

public interface P2PService {

    void send(Session session, String msg);
}

P2PServiceImpl. java

@Service
public class P2PServiceImpl implements P2PService {
    @Override
    public void send(Session session, String msg) {
        session.getAsyncRemote().sendText(msg);
    }
}

Сначала я использую этот код

@Component
@ClientEndpoint
public class P2pClient {
    private Session session;
    public void connectServer(String url) {
            try {
                WebSocketContainer container = ContainerProvider.getWebSocketContainer();
                URI uri = URI.create(url);

                this.session = container.connectToServer(P2pClient.class, uri);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    @Autowired
    private P2PService p2PService;


    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        System.out.println(this);
        System.out.println(P2pClient.p2PService);
    }

, а после нахождения ссылки я использую этот

    private static P2PService p2PService;
    @Autowired
    public static void setP2PService(P2PService p2PService) {
        P2pClient.p2PService = p2PService;
    }

и консольный вывод

com.p2ptest.P2pClient@71e7a66b
null

Я просто использую этот код для запуска проекта

P2pClient p2pClient = new P2pClient();
p2pClient.connectServer(url);

Исключение

java.lang.NullPointerException
    at com.p2ptest.P2pClient.onOpen(P2pClient.java:62)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tomcat.websocket.pojo.PojoEndpointBase.doOnOpen(PojoEndpointBase.java:65)
    at org.apache.tomcat.websocket.pojo.PojoEndpointClient.onOpen(PojoEndpointClient.java:45)
    at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServerRecursive(WsWebSocketContainer.java:509)
    at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:197)
    at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:154)
    at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:171)
    at com.p2ptest.P2pClient.connectServer(P2pClient.java:38)
    at com.Hello.main(Hello.java:22)

Не знаю не знаю, что я могу сделать

...