Установите время ожидания соединения с помощью javax.ws.rs.client.Веб-цель

#java #spring #jakarta-ee #soap #restful-url

#java #spring #джакарта-ee #soap #restful-url

Вопрос:

У меня есть URL-адрес, для которого я пытаюсь установить время ожидания соединения на 10 секунд. Фрагмент кода :-

 WebTarget t=null;
Client c = ClientBuilder.newBuilder()
                .hostnameVerifier(<HostNameVerifier>)
                .sslContext(<SSLContext>)
                .build();
        client.register(<credentials for url>); 
        t = c.t(url);
  

Из разных источников я нашел решение, подобное приведенному ниже.

 ClientConfig clientConfig = new ClientConfig();
clientConfig.property(ClientProperties.READ_TIMEOUT, 2000);
clientConfig.property(ClientProperties.CONNECT_TIMEOUT, 500);
  

Но как ClientConfig, так и ClientProperties являются утилитами из пакета org.glassfish.jersey.client.
У меня есть ограничение на использование этого.

Кто-нибудь может предложить здесь, как установить время ожидания соединения без использования ClientConfig и ClientProperties.

Любая помощь будет оценена.

Ответ №1:

Просто используйте строковые значения вместо ClientProperties констант:

         client.property("jersey.config.client.connectTimeout", 500);
        client.property("jersey.config.client.readTimeout", 2000);
  

Комментарии:

1. Спасибо за информацию. Но мне это тоже не помогло. Выдает «Исключение в потоке «main» java.lang.RuntimeException: java.lang. Исключение ClassNotFoundException: org.glassfish.jersey.client. Ошибка JerseyClientBuilder». Это потому, что библиотека jersey не импортирована, и я также не могу импортировать, поскольку у меня есть ограничение на это. Не могли бы вы, пожалуйста, предложить мне здесь дальнейший путь

2. Какую реализацию JAX-RS вы используете?

3. Я использую jax-rs 2.1 . Это то, что вы имели в виду, верно? Мой вариант использования — проверить входящий rest URL, доступен он или нет. Если нет, то в этом случае укажите время ожидания, чтобы избежать зависания веб-интерфейса.

4. JAX-RS — это спецификация, которая имеет разные реализации. Джерси является одним из них.

5. Теперь я пытаюсь добиться того же, используя jersey client и обычные API. Но при этом я сталкиваюсь с новым исключением, таким как невозможность создания экземпляра JerseyClientBuilder. Вызвано: java.lang. Исключение ClassNotFoundException: com.google.common.base. Функция в java.net.URLClassLoader.FindClass(URLClassLoader.java:382) на java.lang. ClassLoader.loadClass(ClassLoader.java:424) в sun.разное. Launcher$AppClassLoader.loadClass(Launcher.java:349) на java.lang. ClassLoader.loadClass(ClassLoader.java:357) … Еще 12 Можете ли вы указать мне здесь

Ответ №2:

Возможно, это только в более новых версиях JAX-RS (там написано «начиная с 2.1»), но теперь вы можете это сделать:

 ClientBuilder.newBuilder()
    .connectTimeout(3, SECONDS)
    .readTimeout(1, SECONDS)
    .build()
    .target(...)