|
|
|
JAX-WS backward compatibility
|
|||
|---|---|---|---|
|
#18+
Привет, Относительно недавно в 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? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 10:01 |
|
||
|
JAX-WS backward compatibility
|
|||
|---|---|---|---|
|
#18+
Blazkowiczисповедующие NetBeans и не имеющие дело с командной строкой и wsimportоффтоп: а разве NetBeans как раз не с помощью wsimport каждый раз исходники перегенеряет по wsdl (после "clean & build")? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 10:38 |
|
||
|
JAX-WS backward compatibility
|
|||
|---|---|---|---|
|
#18+
Dim666Blazkowiczисповедующие NetBeans и не имеющие дело с командной строкой и wsimportоффтоп: а разве NetBeans как раз не с помощью wsimport каждый раз исходники перегенеряет по wsdl (после "clean & build")? Ну, так и есть. Только никто не будет проект пересобирать и распространять всем клиентам при каждом изменении 3rd party сервиса. Вот и ищу правильный способ, чтобы и процесс не ломать и совместимость улучшить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 10:40 |
|
||
|
JAX-WS backward compatibility
|
|||
|---|---|---|---|
|
#18+
У меня тоже оффтоп. NetBeans - самая лучшая IDE в мире. Каждый раз когда я с ней сталкиваюсь каждый раз натыкаюсь на баги самой IDE. Сегодня тупо за пол дня отхватил две баги и одну концептуальную недоработку работы с JAXWS, описанную выше. Ну, там не только вина NB, но все же. При этом есть ещё несколько баго-фич, которые являются открытыми вопросами. IDE которая делает за разработчика не нужна. Нужна IDE которая помогает делать то что хочет разработчик. И в этом NB концептуально уже много лет не меняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 13:24 |
|
||
|
JAX-WS backward compatibility
|
|||
|---|---|---|---|
|
#18+
Blazkowicz№1 и №2 работают в нормальной среде. Но клиент привязал свой проект к NetBeans, где для JAX-WS у проекта отдельный модуль, который генерирует код по WSDL и скрывает его от разработчика.Как вариант - вынести в WSDL в отдельный maven-модуль, подключить к основному проекту. Вообще неплохо клиентские библиотеки делать отдельно для каждого сервиса. Blazkowicz1) Как это проблему решают адепты pure Oracle JEE исповедующие NetBeans и не имеющие дело с командной строкой и wsimportНу смешали в кучу кислое с фиолетовым... Проблемы конкретной среды разработки не имеют к JEE никакого отношения. "Адепты" юзают IDEA и не парятся ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 10:05 |
|
||
|
JAX-WS backward compatibility
|
|||
|---|---|---|---|
|
#18+
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, но с совместимыми методами, которые я используют. Вот такая вот петрушка. Единственный выход без ручной правки и фиксации, это генерировать клиента под каждую версию сервиса и держать эти копии. Что ещё более криво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 11:02 |
|
||
|
JAX-WS backward compatibility
|
|||
|---|---|---|---|
|
#18+
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. BlazkowiczWGAНу смешали в кучу кислое с фиолетовым... Проблемы конкретной среды разработки не имеют к JEE никакого отношения. "Адепты" юзают IDEA и не парятся ) Ещё как имеют. NetBeans следует канонам и фичам JEE. Почти всё что умеет JEE умеет и NetBeans.Вообще JAX-WS (клиент по-крайней мере) совсем не из мира JEE, все упомянутые классы лежат в rt.jar. BlazkowiczВот такая вот петрушка. Единственный выход без ручной правки и фиксации, это генерировать клиента под каждую версию сервиса и держать эти копии. Что ещё более криво. ............... Конечно, в идеальном мире, сервис должен быть сегментирован на мелкие модули. Так же сервис должен быть обратно совместим. В идеальном мире разработчики публичного сервиса не ломают контракт как им вздумается. BlazkowiczНо ситуация такая что есть несколько серверов разных версий, с несовместимыми WSDL, но с совместимыми методами, которые я используют.Нуу... тогда Dispatch ))) Вообще неплохо бы поискать в исходниках Metro или CXF, как можно отключить валидацию. Поверхностное гугление ничего не дало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 11:44 |
|
||
|
JAX-WS backward compatibility
|
|||
|---|---|---|---|
|
#18+
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, только версия посвежее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2015, 11:53 |
|
||
|
JAX-WS backward compatibility
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, я не знаю общаетесь ли Вы еще на этом сайте. Могла бы я Вас попросить дать мне ссылку где я смогу Вам писать личные сообщения? Сейчас я ищу джавистов на разные интересные проекты. На данном форуме впервые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2017, 16:07 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2122934]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
124ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
34ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 423ms |

| 0 / 0 |
