Отправка Custom Key в StompHeaders

Доброе утро подскажите пожалуйста. У меня есть контроллер вебсокета, в котором я получаю из StompHeaderAccessor userId:

@MessageMapping("/load/hamster/food")
public void loadFoodForHamster(
        @RequestBody String json,
        StompHeaderAccessor sha) {
    ParserResponse response = parser.parse(getUserId(sha), json); 
    locationService.loadLocations(getUserId(sha), sha.getSessionId(), response.getLocations(), response.getTargetChains());
    System.out.println( "***** JSON " + json);
}

Метода getUserId(sha) вызывается в листенере public class StompEventListener implements ApplicationListener

static String getUserId(StompHeaderAccessor sha) {
    Object sourceHeaders = sha.getMessageHeaders().get("nativeHeaders");
    String user = null;
    if (sourceHeaders instanceof Map) {
        // TODO warn unchecked cast
        try {
            Map<String, Object> nativeHeaders = (Map<String, Object>) sourceHeaders;
            user = ((List<String>) nativeHeaders.get("user")).get(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return user;
}

Каким образом я могу отправить кастомный кей в из клиента WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient) ведь WebSocketStompClient не позволяет этого делать .

я пытался делать так:

@Component
public class CustomStompSessionHandler extends StompSessionHandlerAdapter {
    private final CountDownLatch latch = new CountDownLatch(1);
    private StompSession session;
    private StompHeaders connectedHeaders;

    @Override
    public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
        System.out.println("Opening websocket...");
        System.out.println("Session is connected: " + session.isConnected() + "\n");
//        System.out.println("---------- Is connected");
        this.session = session;
        this.connectedHeaders = connectedHeaders;
        latch.countDown(); // Signal that we're connected
    }

    @Override
    public void handleException(StompSession session, StompCommand command, StompHeaders headers, byte[] payload, Throwable exception) {
        // Handle exceptions
    }

    @Override
    public void handleFrame(StompHeaders headers, Object payload) {
        // Handle incoming frames
    }

    public StompSession getSession() {
        try {
            latch.await(); // Wait until we're connected
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return session;
    }



       @Service
@ClientEndpoint
public class MyClientEndpoint {

    private  CustomStompSessionHandler sessionHandler;
    private RandomStringGenerator gen;

    @Autowired
    public MyClientEndpoint(CustomStompSessionHandler sessionHandler, RandomStringGenerator gen) {
        this.sessionHandler = sessionHandler;
        this.gen = gen;
    }

    public void sendRequest() {

        gen = new RandomStringGenerator();
        String userName = gen.generateRandomString(7);

        System.out.println("-----" + userName);

        List<Transport> transports = new ArrayList<>();
        transports.add(new WebSocketTransport(new StandardWebSocketClient()));
        transports.add(new RestTemplateXhrTransport());
        SockJsClient sockJsClient = new SockJsClient(transports);
        WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
        stompClient.setMessageConverter(new MappingJackson2MessageConverter());
        sockJsClient.setMessageCodec(new Jackson2SockJsMessageCodec());
        StompHeaders headers = new StompHeaders();

        long[] longArray = {20000L, 20000L};


        headers.setAcceptVersion("1.1");
        headers.setHeartbeat(longArray);
        headers.setDestination("/load/hamster/food");
        headers.set("user", userName);
        stompClient.connect("ws://localhost:8090/vrp-websocket", sessionHandler);
        String jsonMessage = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[30.282172868,59.957037334],[30.282527254,59.957201998],[30.282543114,59.957208423],[30.284079575,59.957915146]]},\"properties\":{\"polygon\":true}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[30.289916959,59.956945577],[30.290133356,59.956855571],[30.290148006,59.956850316],[30.29154352,59.956275229],[30.29211887,59.956051276]]},\"properties\":{\"polygon\":true}},{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[30.318017041,59.959462657],[30.318366207,59.959537562],[30.318427971,59.959547691]]},\"properties\":{\"polygon\":true}}]}";
        StompSession session = sessionHandler.getSession();
        session.send(headers, jsonMessage);

    }}

Но получаю ошибку на сервере:

2024-02-15 09:05:02 06:05:02.115 [tboundChannel-1] INFO  o.n.r.p.websocket.StompEventListener - [null]  User: null      (SessionId: 62be8d47cd3a4598be789d7c092c7d4a)

Ответы (0 шт):