Ошибка при попытке создать файлы с помощью wsimport на WSDL, доступном через https

Я использую сервер Apache Geronimo для своей разработки. Мне нужно сгенерировать код из WSDL, доступного через https. Я использовал следующую команду:

wsimport -keep -verbose https://devurl:7443/process-engine/soap/CustomerByNumber_v1?wsdl

Но я получаю эту ошибку:

разбор WSDL...

[ОШИБКА] Получено фатальное предупреждение: protocol_version

Не удалось прочитать документ WSDL: https://devurl:7443/process-engine/soap/CustomerByNumber_v1?wsdl, потому что 1) не удалось найти документ; /2) документ не может быть прочитан; 3) корневой элемент документа не wsdl:definitions.

[ОШИБКА] failed.noservice=Не удалось найти wsdl:service в предоставленных WSDL(ах):

Необходимо предоставить хотя бы один WSDL с хотя бы одним определением службы.

Не удалось проанализировать WSDL.

Когда мы нажимаем URL-адреса WSDL, у него есть аутентификация по имени пользователя/паролю.

Как я могу решить эту проблему?


person Joy    schedule 26.05.2021    source источник


Ответы (1)


В сообщении об ошибке упоминаются возможные причины:

  1. не удалось найти документ;
  2. документ не может быть прочитан;
  3. корневой элемент документа не <wsdl:definitions>.

Вы упомянули, что служба требует аутентификации по имени пользователя/паролю. Это относится и к доступу к WSDL? Таким образом, протокол не обязательно может быть проблемой.

Сделайте следующее:

  • откройте URL-адрес WSDL в браузере. Ваш браузер не будет иметь проблем с HTTPS.
  • укажите имя пользователя/пароль, если это необходимо для доступа к WSDL.
  • убедитесь, что открывающийся документ является WSDL и содержит корневой элемент <wsdl:definitions>.
  • загрузите WSDL на свой компьютер с расширением .wsdl.
  • используйте wsimport с этим файлом: wsimport -keep -verbose yourSavedFile.wsdl
person Bogdan    schedule 26.05.2021
comment
Файлы-заглушки генерируются, если я загружаю их на свой локальный компьютер. Поскольку это HTTPS wsdl, я пытался создать файлы-заглушки, используя URL-адрес с https. Имеет ли значение, когда мы создаем файлы-заглушки после загрузки wsdl на локальный компьютер и файлы-заглушки, созданные с использованием URL-адреса... Эти файлы-заглушки будут использоваться при разработке позже в проекте. Нужно ли устанавливать сертификат сервера на клиентском веб-сервере или в хранилище ключей, где установлена ​​только Java? - person Joy; 26.05.2021
comment
Если вам удалось сгенерировать клиентский код с помощью локального WSDL, то этот код можно использовать для вызова веб-службы SOAP. Вы будете совершать вызовы SOAP через HTTPS, так что да, вам нужно будет настроить свой клиент с хранилищем ключей, чтобы он знал, как взаимодействовать со службой через безопасное соединение. - person Bogdan; 26.05.2021
comment
Я создал файлы Stub. Также я добавил сертификат сервера в файл JVM C:\Program Files\Java\jdk1.7.0_60\jre\lib\security\cacerts. Я написал клиентский файл Java и попытался получить доступ к веб-службе SOAP через https, но получил исключение, упомянутое ниже: javax.xml.ws.WebServiceException: не удалось получить доступ к WSDL по адресу: devurl:7443/process-engine/soap/CustomerByNumber_v1?wsdl. Это не удалось с: Got sun.security.validator.ValidatorException: сбой построения пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации к запрошенной цели... - person Joy; 27.05.2021
comment
Что такое атрибут wsdlLocation в аннотации @WebServiceClient вашего клиента? Указывает ли он на URL-адрес, с которым у вас возникли проблемы? Поскольку вы уже загрузили WSDL, вы можете использовать его локально, внеся несколько изменений в свой клиентский код. См., например, этот вопрос или этот для начинающих. - person Bogdan; 27.05.2021
comment
Я смог решить проблему. Сертификат не установлен в том месте, где я его установил сейчас. Теперь получаю ответ 401 от сервера. Я получаю ответ 401, потому что не могу правильно установить имя пользователя и пароль. Я использую JAXWS, некоторые могут написать, как передать имя пользователя и пароль в клиенте. Я использую JDK 1.7... - person Joy; 27.05.2021
comment
Поскольку вы упомянули, что WSDL также был защищен именем пользователя/паролем, я предполагаю, что это ОСНОВНАЯ аутентификация? Если это так, посмотрите, поможет ли это: stackoverflow .com/questions/7071366/ - person Bogdan; 28.05.2021
comment
Благодаря Богдану удалось решить проблему. Теперь мне нужно настроить тот же статический Java-клиент для веб-сервера. Какие изменения мне нужно внести в веб-сервер для работы HTTPS. Я использую сервер Apache Geronimo. - person Joy; 28.05.2021