2015-02-10 2 views
1

Я использую причал версии 7.5.1.Jetty Webservice - адрес протокола https не поддерживается

Мой веб-сервис отлично работает с конечной точкой «http: // ...», но когда я меняю его на «http s: // ...» все идет не так.

Endpoint e = Endpoint.create(webservice); 
e.publish("https://localhost:" + serverPort + "/ws/mywebservice); 

Я получаю следующее сообщение об ошибке: «HTTPS протокол адреса на основе не поддерживается».

Я пробовал использовать SslChannelConnector, a SelectChannelConnector и их комбинацию.

Connector connector = new SelectChannelConnector(); 
    connector.setPort(59180); 

    SslContextFactory factory = new SslContextFactory(); 
    factory.setKeyStore("keystore"); 
    factory.setKeyStorePassword("password"); 
    factory.setKeyManagerPassword("password"); 
    factory.setTrustStore("keystore"); 
    factory.setTrustStorePassword("password"); 

    SslSelectChannelConnector sslConnector = new SslSelectChannelConnector(factory); 
    sslConnector.setPort(443); 
    sslConnector.setMaxIdleTime(30000); 

    server.setConnectors(new Connector[]{connector, sslConnector}); 

Я также попытался изменить порт в пути публикации. Но безуспешно.

Может быть, что-то пошло не так с созданием моего файла хранилища ключей? Даже я указал неверный пароль, но он показывает другое сообщение об ошибке, объясняя, что мой пароль неправильный.

Мои параметры заканчиваются. Есть идеи?

EDIT: Дополнительная информация:

сервлеты теперь работает отлично с HTTPS. Но веб-сервисов нет. Могу ли я опубликовать это неправильно?

ответ

1

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

Метод publishпринимает только протокол http. Даже если вы публикуете для https, это все равно должно быть "http://...". С другой стороны, вы должны использовать порт вашего SSL-разъема.

Endpoint e = Endpoint.create(webservice); 
e.publish("http://localhost:443/ws/mywebservice); 

Используйте любой другой протокол, и вы всегда будете получать «на основе протокола хого адрес не поддерживается» исключения. See source code.

Примечание 1: Веб-сервис уже отлично работает на данном этапе. Однако есть точка обсуждения: сгенерированный файл wsdl (в https://localhost:443/ws/mywebservice?wsdl) будет ссылаться на путь http://.... Вы можете утверждать, что файл wsdl является требованием или просто документированием.

Исправление имени хоста в файле WSDL не так уж сложно, но замена протокола сложнее. Самое легкое решение, вероятно, должно быть просто отредактируйте файл wsdl и разместите файл, что, конечно, не очень «динамично».

В качестве альтернативы, Я решил это, создав WsdlServlet, который заменяет адрес. С другой стороны, плохо создать целый класс, чтобы исправить 1 символ.:)

Примечание 2: Еще одна ошибка в этом выпуске причала - это аутентификация. Невозможно предложить веб-сервис без какой-либо аутентификации. Лучшее, что вы можете получить, после отключения всей возможной аутентификации: вам все равно придется использовать «превентивную аутентификацию» и ввести произвольное имя пользователя и пароль.