JerseyClient с использованием DefaultHttpClient - PullRequest
0 голосов
/ 25 июля 2011

Мне нужен доступ к веб-сервису JAX-WS, защищенному с помощью SSL, с использованием клиента Jersey.Я успешно получил эту работу с ограниченной конфигурацией и просто позволил клиенту использовать API HTTPURLConnection по умолчанию.

Однако этот подход не будет работать для моего общего решения, поскольку он не позволяет мне гибко изменять учетные данные, используемые при отправке запроса на WS.Я пытаюсь использовать DefaultHTTPClient, а затем передать его объекту Client при инициализации.

NTCredentials credentials = new NTCredentials("username", "password",
    computerName, domainName);
DefaultHttpClient httpClienttemp = new DefaultHttpClient();
DefaultHttpClient httpClient = wrapClient(httpClienttemp);
httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY, credentials );
ClientConfig config = new DefaultClientConfig();

Метод wrapClient создает X509TrustManager и переопределяет необходимые методы, чтобы все сертификаты были приняты.Он также создает запись SchemeRegistry для доступа https через порт 443. Эта конфигурация приводит к исключению «Отказано в соединении».

Странно, если я добавлю дополнительную запись в SchemeRegistry для http и предоставлю ей порт443, тогда запрос действительно отправляется, однако затем возникает исключение сброса подключения.

URL, который я использую для создания объекта WebResource, - это https, однако SOAPAction, который я объявляю в заголовке, использует http.Любые идеи, где я иду не так?

1 Ответ

1 голос
/ 25 июля 2011

Это ограничение по умолчанию для HTTP-клиента (com.sun.jersey.api.client.Client), задокументированное в документации Джерси. Вам нужно будет использовать Apache HTTP Client для достижения этой функциональности.

Похоже, что кто-то уже рекомендовал сделать это в ответ на ваш предыдущий вопрос: API клиента Джерси - аутентификация .

РЕДАКТИРОВАТЬ: Исправлена ​​ссылка на HTTP-клиент Джерси по умолчанию, чтобы избежать путаницы.

...