Я пытаюсь получить доступ к конечной точке сервера websocket, используя автономный клиент tyrus (tyrus-standalone-client-1.9) с конечной точкой клиента на основе аннотаций. Я в основном следил за этот пример а>.
То есть конечная точка моего клиента в настоящее время выглядит так
@ClientEndpoint
public class MyClientEndpoint {
private static CountDownLatch latch;
private Logger logger = Logger.getLogger(this.getClass().getName());
@OnOpen
public void onOpen(Session session) throws Exception {
session.getBasicRemote().sendText("initialRequest")
}
@OnMessage
public void onMessage(String message, Session session) throws Exception {
// do something
}
@OnClose
public void onClose(Session session, CloseReason closeReason) {
logger.info(String.format("Session %s close because of %s", session.getId(), closeReason));
latch.countDown();
}
public static void main(String[] args) {
latch = new CountDownLatch(1);
ClientManager client = ClientManager.createClient();
try {
URI serverEndpointUri = new URI("ws://localhost/websockets/server/endpoint");
client.connectToServer(MyClientEndpoint.class, serverEndpointUri);
latch.await();
} catch (DeploymentException | URISyntaxException | InterruptedException e) {
throw new RuntimeException(e);
}
}
}
Однако мне нужно передать некоторый идентификатор сеанса вместе с запросом, и мне нужно изменить заголовок источника запроса, чтобы мое соединение было принято конечной точкой сервера.
В программной конечной точке клиента я мог бы сделать что-то вроде
final Builder configBuilder = ClientEndpointConfig.Builder.create();
configBuilder.configurator(new Configurator() {
@Override
public void beforeRequest(final Map<String, List<String>> headers) {
headers.put("Cookie", Arrays.asList("X-Session=0f822c8c-bf63-4ae7-9d2f-af263f86baad"));
headers.put("Origin", Arrays.asList("http://localhost"));
}
});
ClientEndpointConfig clientConfig = configBuilder.build();
ClientManager client = ClientManager.createClient();
URI serverEndpointUri = new URI("ws://localhost/websockets/server/endpoint");
client.connectToServer(new MyClientEndpoint(), clientConfig, serverEndpointUri);
Но, похоже, нет возможности передать конфигурацию клиенту на основе аннотаций.
Есть ли другой способ добавить/изменить заголовки запросов, которые мне сейчас не хватает? Я бы очень хотел остаться с подходом, основанным на аннотациях, так как он кажется мне намного чище...