NetBeans: Как создать клиент веб-службы, который использует защищенную SSL-службу Metro? - PullRequest
2 голосов
/ 28 сентября 2011

Я пытаюсь добавить ссылку на веб-сервис в свое приложение в NetBeans 7.0.1. Веб-сервис Metro защищен с помощью SSL и размещен на том же компьютере, на котором я хочу запустить клиент. Я использую мастер «New Web Service Client», но когда я отправляю WSDL, защищенный SSL, я получаю следующее сообщение об ошибке:

Проблема с загрузкой файла wsdl или схемы.

Проверьте URL-адрес, настройки прокси-сервера или работает ли сервер.

URL: https://192.168.0.200:8181/MyApp/myService?wsdl

Руководство пользователя Metro - Для защиты примера клиентского приложения веб-службы (SSL) сообщает:

На шаге, в котором вы должны вырезать и вставить URL-адрес веб-службы, которую клиент должен использовать в поле URL-адреса WSDL, введите https: // полное имя хоста: 8181 / CalculatorApplication / CalculatorWSService? wsdl (изменения выделены жирным шрифтом), чтобы указать, что этот клиент должен ссылаться на веб-службу, используя безопасный порт. При первом обращении к этой службе примите сертификат (s1as) при появлении запроса. Это сертификат сервера, который появляется для подтверждения его личности клиенту.

В некоторых случаях вы можете получить сообщение об ошибке, сообщающее, что URL https: // полностью определенное имя хоста: 8181 / CalculatorApplication / CalculatorWSService? Wsdl не может быть загружен. Тем не менее, это правильный URL, и он загружается при запуске службы. Поэтому, когда возникает эта ошибка, повторите шаги по созданию клиента веб-службы с использованием безопасного WSDL. Во второй раз создается ссылка на веб-службу, и вы можете продолжить создание клиента.

Независимо от того, сколько раз я пробую, я все равно получаю одно и то же сообщение об ошибке (прокси не установлены, и сервер работает с развернутыми службами). WSDL отображается в браузере после принятия сертификата. Если я введу базовый URL-адрес WSDL (без HTTPS), мастер примет его и сгенерирует клиента. Что мне нужно сделать, чтобы получить эту работу?

UPDATE

То же самое применимо, если я запускаю клиент и сервис на разных машинах. Я использую сертификат разработки по умолчанию. Выход ретривера:

Ошибка: произошла ошибка ввода / вывода. sun.security.validator.ValidatorException: сбой построения пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации к запрошенной цели`

Нужно ли устанавливать хранилище ключей и хранилище доверенных сертификатов в VMargs? Что делать, если я хочу, чтобы эта ссылка на службу содержалась в том же веб-приложении, которое содержит веб-службы?

1 Ответ

2 голосов
/ 29 сентября 2011

Ответ найден здесь :

Вы должны запустить NetBeans со следующими параметрами:

<NETBEANS_HOME>/bin/netbeans.exe
-J-Djavax.net.ssl.trustStore=<AS_HOME>/domains/domain1/config/cacerts.jks 
-J-Djavax.net.ssl.keyStore=<AS_HOME>/domains/domain1/config/keystore.jks 
-J-Djavax.net.ssl.trustStorePassword=changeit 
-J-Djavax.net.ssl.keyStorePassword=changeit

Я фактически установил их в <NETBEANS_HOME>/etc/netbeans.conf, в netbeans_default_options.Я все еще получил ошибку, но это привело к тому, что я могу сгенерировать код клиента для служб, защищенных SSL.Выполнение простого вызова WS приводит к следующему:

РЕДАКТИРОВАНИЕ ВАЖНО Следующее происходит только при использовании старых библиотек JAX-WS!

Исключение в потоке"main" javax.xml.ws.WebServiceException: не удается найти 'https://localhost:8181/myApp/myService?wsdl' wsdl.Поместите ресурс правильно в classpath.

Это можно решить, установив свойство DATASTOREWS_WSDL_LOCATION клиентов с помощью метода, подобного следующему:

private static URL getURL() {
    try {
        return new URL("https://localhost:8181/myApp/myService?wsdl");
    } catch (MalformedURLException ex) {
        Logger.getLogger(DataStoreWS_Service.class.getName()).log(Level.SEVERE, null, ex);
        return null;
    }
}

Это необходимо, только если высгенерируйте его для простого Java-приложения, потому что сгенерированный клиентский код отличается для Java Web-приложения.Кроме того, я просто не мог заставить его работать с полным именем хоста, таким как мой локальный IP.Единственное, что сработало, было localhost.Одна важная вещь: не забудьте объединить те же библиотеки Metro, что и на стороне службы! Примечание об ошибке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...