Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JAX-WS backward compatibility / 9 сообщений из 9, страница 1 из 1
12.02.2015, 10:01
    #38877647
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAX-WS backward compatibility
Привет,

Относительно недавно в JAX-WS появилась "чудесная" возможность не использовать хак с подменой ENDPOINT, а скармливать в javax.xml.ws.Service непосредственно ссылку WSDL. Круто, модно, современно, но вот сюрприз. При изменении WSDL, и удалении оттуда методов Service при каждом запуске валидирует все операции. Что приводит к

javax.xml.ws.WebServiceException: Method {method-name} is exposed as WebMethod, but there is no corresponding wsdl operation with name Echo in the wsdl:portType{namespace}name

Мило.

Собственно несколько решений этой проблемы я знаю.
1) Зафиксировать копию WSDL локально и всегда использовать её, заменяя только ENDPOINT. - собственно, обычно, так делаю, но есть одно "но".
2) Вырезать всё лишнее из сгенерированного интерфейса.
3) Каждый раз пересобирать проект. Очевидно не вариант. Релизы клиенты и Web Service никак не синхронизируются, да и не должны.

№1 и №2 работают в нормальной среде. Но клиент привязал свой проект к NetBeans, где для JAX-WS у проекта отдельный модуль, который генерирует код по WSDL и скрывает его от разработчика.

Собственно вопросов у меня два
1) Как это проблему решают адепты pure Oracle JEE исповедующие NetBeans и не имеющие дело с командной строкой и wsimport
2) Решена ли проблема в альтернативных реализациях типа Apache CXF?

Спасибо.
...
Рейтинг: 0 / 0
12.02.2015, 10:38
    #38877698
Dim666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAX-WS backward compatibility
Blazkowiczисповедующие NetBeans и не имеющие дело с командной строкой и wsimportоффтоп: а разве NetBeans как раз не с помощью wsimport каждый раз исходники перегенеряет по wsdl (после "clean & build")?
...
Рейтинг: 0 / 0
12.02.2015, 10:40
    #38877703
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAX-WS backward compatibility
Dim666Blazkowiczисповедующие NetBeans и не имеющие дело с командной строкой и wsimportоффтоп: а разве NetBeans как раз не с помощью wsimport каждый раз исходники перегенеряет по wsdl (после "clean & build")?
Ну, так и есть. Только никто не будет проект пересобирать и распространять всем клиентам при каждом изменении 3rd party сервиса. Вот и ищу правильный способ, чтобы и процесс не ломать и совместимость улучшить.
...
Рейтинг: 0 / 0
12.02.2015, 13:24
    #38877968
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAX-WS backward compatibility
У меня тоже оффтоп. NetBeans - самая лучшая IDE в мире. Каждый раз когда я с ней сталкиваюсь каждый раз натыкаюсь на баги самой IDE. Сегодня тупо за пол дня отхватил две баги и одну концептуальную недоработку работы с JAXWS, описанную выше. Ну, там не только вина NB, но все же. При этом есть ещё несколько баго-фич, которые являются открытыми вопросами.

IDE которая делает за разработчика не нужна. Нужна IDE которая помогает делать то что хочет разработчик. И в этом NB концептуально уже много лет не меняется.
...
Рейтинг: 0 / 0
13.02.2015, 10:05
    #38878768
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAX-WS backward compatibility
Blazkowicz№1 и №2 работают в нормальной среде. Но клиент привязал свой проект к NetBeans, где для JAX-WS у проекта отдельный модуль, который генерирует код по WSDL и скрывает его от разработчика.Как вариант - вынести в WSDL в отдельный maven-модуль, подключить к основному проекту. Вообще неплохо клиентские библиотеки делать отдельно для каждого сервиса.
Blazkowicz1) Как это проблему решают адепты pure Oracle JEE исповедующие NetBeans и не имеющие дело с командной строкой и wsimportНу смешали в кучу кислое с фиолетовым... Проблемы конкретной среды разработки не имеют к JEE никакого отношения. "Адепты" юзают IDEA и не парятся )
...
Рейтинг: 0 / 0
13.02.2015, 11:02
    #38878850
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAX-WS backward compatibility
WGAКак вариант - вынести в WSDL в отдельный maven-модуль, подключить к основному проекту. Вообще неплохо клиентские библиотеки делать отдельно для каждого сервиса.
Это тоже самое что зафиксировать локальную копию WSDL. Решение 1.

WGAНу смешали в кучу кислое с фиолетовым... Проблемы конкретной среды разработки не имеют к JEE никакого отношения. "Адепты" юзают IDEA и не парятся )
Ещё как имеют. NetBeans следует канонам и фичам JEE. Почти всё что умеет JEE умеет и NetBeans.
Но любое решение сводиться к тому что нужно фиксировать WSDL, либо API (резать Service class). При этом конфигурация ENDPOINT происходит не прямым путём через wsdl, который предусмотрен в JEE (@WebServiceRef либо Service конструктор), а кривым через BindingProvider.ENDPOINT_ADDRESS_PROPERTY.

Конечно, в идеальном мире, сервис должен быть сегментирован на мелкие модули. Так же сервис должен быть обратно совместим. Но ситуация такая что есть несколько серверов разных версий, с несовместимыми WSDL, но с совместимыми методами, которые я используют.

Вот такая вот петрушка. Единственный выход без ручной правки и фиксации, это генерировать клиента под каждую версию сервиса и держать эти копии. Что ещё более криво.
...
Рейтинг: 0 / 0
13.02.2015, 11:44
    #38878916
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAX-WS backward compatibility
BlazkowiczWGAКак вариант - вынести в WSDL в отдельный maven-модуль, подключить к основному проекту. Вообще неплохо клиентские библиотеки делать отдельно для каждого сервиса.
Это тоже самое что зафиксировать локальную копию WSDL. Решение 1.Именно. Но насколько я понял проблема именно с IDE, где жестко задается URL для WSDL. Лично я пользуюсь maven, wsdl хранится внутри, т.е. фиксирую локальную копию WSDL.
Использование @WebServiceRef порицаю, это неудобно ) Вместо этого писал вот такие классы:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
@Singleton
public class CrmClientFactory {

    private static final Logger LOG = LoggerFactory.getLogger(CrmClientFactory.class);

    @Inject
    private SoapConfig config;
    private CrmService_Service crmService;

    public CrmClientFactory() {
        LOG.info("Initializing CrmService");
        crmService = new CrmService_Service();
    }

    @Produces
    @RequestScoped
    public CrmService produce() {
        return WsHelper.initPort(crmService, CrmService.class, config.getCrmService(), config.getTimeout());
    }
}

Сейчас есть реестр и XML-конфиг.
BlazkowiczWGAНу смешали в кучу кислое с фиолетовым... Проблемы конкретной среды разработки не имеют к JEE никакого отношения. "Адепты" юзают IDEA и не парятся )
Ещё как имеют. NetBeans следует канонам и фичам JEE. Почти всё что умеет JEE умеет и NetBeans.Вообще JAX-WS (клиент по-крайней мере) совсем не из мира JEE, все упомянутые классы лежат в rt.jar.
BlazkowiczВот такая вот петрушка. Единственный выход без ручной правки и фиксации, это генерировать клиента под каждую версию сервиса и держать эти копии. Что ещё более криво.
...............
Конечно, в идеальном мире, сервис должен быть сегментирован на мелкие модули. Так же сервис должен быть обратно совместим.
В идеальном мире разработчики публичного сервиса не ломают контракт как им вздумается.
BlazkowiczНо ситуация такая что есть несколько серверов разных версий, с несовместимыми WSDL, но с совместимыми методами, которые я используют.Нуу... тогда Dispatch ))) Вообще неплохо бы поискать в исходниках Metro или CXF, как можно отключить валидацию. Поверхностное гугление ничего не дало.
...
Рейтинг: 0 / 0
13.02.2015, 11:53
    #38878927
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAX-WS backward compatibility
WGAНо насколько я понял проблема именно с IDE, где жестко задается URL для WSDL. Лично я пользуюсь maven, wsdl хранится внутри, т.е. фиксирую локальную копию WSDL.
Использование @WebServiceRef порицаю, это неудобно ) Вместо этого писал вот такие классы:

А если разные адреса у одного сервиса?

WGAВообще JAX-WS (клиент по-крайней мере) совсем не из мира JEE, все упомянутые классы лежат в rt.jar.

Ну, мне-то можешь не рассказывать. JAX-WS изначально появился только в JEE. Потом его задвинули в JSE. Но при этом номинально считается что это JEE технология. Те же туториалы - в JEE. NetBeans для SE не имеет JAX-WS интеграции. А версия для JEE уже имеет.

WGAВ идеальном мире разработчики публичного сервиса не ломают контракт как им вздумается.

Это да. Я им ещё припомню этот момент.

WGAВообще неплохо бы поискать в исходниках Metro или CXF, как можно отключить валидацию. Поверхностное гугление ничего не дало.
Про CXF пишут что такой проблемы не имеет. Но у меня клиентское приложение с различными нюансами, поэтому пока не сильно чешется, пытаюсь обойтись JSE.
А Metro, на сколько я знаю, это та же самая Reference Implementation что и внутри JSE, только версия посвежее.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
04.05.2017, 16:07
    #39448833
Hr_Julia93
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAX-WS backward compatibility
Blazkowicz, я не знаю общаетесь ли Вы еще на этом сайте. Могла бы я Вас попросить дать мне ссылку где я смогу Вам писать личные сообщения?
Сейчас я ищу джавистов на разные интересные проекты. На данном форуме впервые.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JAX-WS backward compatibility / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]