Проблема с развертыванием веб-служб в WebLogic 12.2.1.1

У нас есть сложное приложение javaee. Это приложение имеет много компонентов EJB 3, и некоторые из этих EJB представлены как WebServices (JAX-WS 2.1). Все приложение упаковано в один EAR, и все компоненты EJB определены в дескрипторе ejb-jar.xml.

Мы перешли с WebLogic 12.1.1.0 (JDK6) на WebLogic 12.2.1.1 (JDK8 u77). У нас есть проблема с тем, что WebServices больше не будет развертываться в WebLogic 12.2.1.1 (однако EAR развертывается без ошибок). В WebLogic 12.1.1.0 у нас нет этих проблем с развертыванием WebServices (тот же EAR).

Мы успешно протестировали развертывание WebService на WebLogic 12.2.1.1 с одним простым тестовым EAR (один EJB и один EJB helloworld, представленные как WebService). Если мы создадим тот же самый helloworld WebService в нашем сложном приложении (развернутом на WebLogic 12.2.1.1), тогда этот WebService не будет развернут, однако EJB будет успешно развернут.

Можем ли мы регистрировать / отлаживать развертывание WebServices в WebLogic 12.2.1.1? Мы хотели бы найти причину, по которой наши WebServices не развертываются в новом WebLogic.

[РЕШЕНИЕ]

Разобрав EAR до необходимых зависимостей, мы обнаружили, что проблема заключается в аннотации @WebService.

Если у нас есть класс или интерфейс, аннотированный с помощью @WebService, который не является частью модуля EAR EJB, например Зависимости JAR в папке lib EAR, тогда веб-службы не будут развертываться в WebLogic 12.2.1.1.

Теперь возникает вопрос, является ли такое поведение WebLogic 12.2.1.x намеренным и может ли быть каким-то образом переопределено дескрипторами (стандартными или weblogic), или это ошибка WebLogic 12.2.1.x?


person maha    schedule 14.12.2016    source источник
comment
Это особенность, а не ошибка. Модель программирования Java EE использует функцию аннотаций JDK для веб-контейнеров, таких как EJB, сервлеты, веб-приложения и JSP docs.oracle.com/middleware/12212/wls/WLPRG/ Это означает, что аннотации сканируются только баночки на верхнем уровне ушей. Решение для меня заключалось в том, чтобы поместить банку, содержащую интерфейс конечной точки службы, на верхний уровень ушей.   -  person weberjn    schedule 09.03.2017


Ответы (3)


[РЕШЕНИЕ]

Переопределить аннотацию WebServices с помощью дескрипторов развертывания.

Чтобы зарегистрировать WebService, вам необходимо зарегистрировать конечную точку службы ejb bean-компонента WebService в ejb-jar.xml и поместить webservice.xml и weblogic-webservices.xml в модуль EJB EAR.

Подробнее о связи между дескрипторами ejb-jar.xml, webservice.xml и weblogic-webservices.xml можно найти в документации Oracle Упаковка и развертывание веб-служб

person maha    schedule 13.01.2017

похоже, что weblogic 12c не поддерживает тот же класс, что и ejb без сохранения состояния, и веб-сервис. Если вы удалите аннотации ejb, ваша служба запустится. открыть ошибку в оракуле.

person Serdar Mustaoglu    schedule 21.05.2018

Вы пытались развернуть свой веб-сервис не как EJB? то есть без аннотаций EJB и без ссылок в ejb-jar.xml.

В настоящее время я обновляю некоторые @Stateless EJB, представленные как веб-сервисы, с WLS12.1.3 до WLS12.2.1, и это не работает должным образом (я получаю NPE при каждом вызове моего веб-сервиса). Удаление аннотации @Stateless решило проблему NPE. Похоже, что версия 12.2.1.1 Weblogic имеет проблемы с комбинацией EJB и Webservice.

Я протестировал следующий код:

@WebService
@Stateless
public class MyWS {
    @WebMethod
    public String test() {
        return "OK";
    }

}

Веб-сервис успешно развернут, но я получаю вызов метода тестирования NPE. Так что это похоже на ошибку в WLS12.2.1 при использовании EJB и Webservice.

Может быть ваша проблема близка к этой.

person Rouliboy    schedule 29.12.2016
comment
Спасибо за ответ, но это не тот случай, когда наше приложение развернуто на WebLogic. У меня нет исключений при развертывании - в моем случае результат не развернут веб-службы - person maha; 13.01.2017