Проблема вызова веб-сервиса изнутри службы JBOSS EJB - PullRequest
1 голос
/ 11 мая 2010

У меня есть простой веб-сервис в нашей внутренней сети. Я использовал SOAPUI для небольшого тестирования, сгенерировал классы сервиса из WSDL и написал некоторый код Java для доступа к сервису. Все прошло как положено, так как я смог создать прокси-классы службы и совершать звонки. Довольно простые вещи. Единственный скачок скорости заключался в том, чтобы заставить Java доверять сертификату с компьютера, предоставляющего веб-сервис. Это была не техническая проблема, а скорее отсутствие опыта работы с веб-сервисами на основе SSL. Теперь о моей проблеме. Я кодировал простой EJB-сервис и развернул его на JBoss Application Server 4.3, и теперь получаю следующую ошибку в коде, который ранее работал.

12:21:50,235 WARN  [ServiceDelegateImpl] Cannot access wsdlURL: https://WS-Test/TestService/v2/TestService?wsdl

Я могу получить доступ к файлу wsdl из веб-браузера, работающего на той же машине, что и сервер приложений, используя URL-адрес в сообщении об ошибке. Я также могу запустить код, который обращается к веб-сервису за пределами сервера приложений на той же машине, что и сервер приложений (только не изнутри). Я в растерянности относительно того, куда идти отсюда. Я включил журналы отладки в JBOSS и получил только то, что показал выше. Я провел поиск в сети и обнаружил ту же ошибку в некоторых вопросах, но на эти вопросы не было ответов. Классы веб-сервисов были сгенерированы с помощью JAX-WS 2.2 с помощью задачи Ant wsimport и помещены в jar-файл, включенный в пакет ejb. JBoss развернут в RHEL 5.4. Я опубликовал это на форуме сообщества JBOSS , но на момент написания статьи не получил никаких ответов.

1 Ответ

1 голос
/ 18 мая 2010

Взглянув на ServiceDelegateImpl, он пытается это сделать:

InputStream is = wsdlURL.openStream ();

где wsdlURL - не ноль URL. Это означает, что проблема заключается в openStream(). Я ожидаю, что проблема будет с корневым сертификатом https; Я могу себе представить, что JBoss где-то имеет свой собственный каталог допустимых корневых сертификатов, и что там нет вашего корня.

Чтобы проверить это, нужно развернуть службу на HTTP-сервере и сделать URL-адрес wsdlURL http. Если это работает, это слой SSL.

Если является уровнем SSL, попробуйте вручную добавить хранилище ключей, определив его в командной строке, как в ответе на этот вопрос SO .

...