#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(...)