JDK6:когда использовать комплексную реализацию JAX-WS по сравнению с проектом Metro

StackOverflow https://stackoverflow.com//questions/9625547

Вопрос

Реализация JAX-WS в комплекте с JDK6 может использоваться для предоставления сервера веб-служб без каких-либо дополнительных библиотек.JVM запустится с WS-сервера на указанном порту.

http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/

http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2_pt2/

У меня вопрос в том, чем это отличается от проекта Metro?Если конечной целью является размещение веб-служб внутри tomcat, то могу ли я по-прежнему использовать связанные функции, а затем просто перенаправить на этот связанный ws-сервер или лучше развернуть metro servlet?

Это было полезно?

Решение

Насколько я знаю, JAX-WS - это только шаблон , который должен быть реализован либо реализацией JDK6 или метро.

Metro Просто стандартная реализация, поставляемая с сервером приложений GlassFish. Смотрите здесь .

Поэтому не должно быть никаких различий.

Другие советы

Что ж, Первое, что вы должны знать о Metro, это то, что это комплексный проект для различных проектов, связанных с WS, а именно.JAX-WS, JAXB, WSIT, JAX-WS-Commons и т.д.

Каждый из этих компонентов состоит из двух частей: API (спецификации) и части реализации, называемой эталонной реализацией (RI).Спецификации определены в 'javax.xml.ws', 'javax.xml.bind' и т.д.и RI отправляются в пакетах "com.sun.xxx".

Теперь, где-то около JDK 6, обновление 4, sun / oracle начали объединять эти API + RIS в JDK самостоятельно и продолжали обновлять их обновлениями для JDK.

По состоянию на последнее обновление JDK 631, JDK содержит следующие версии JAXWS и JAXB API, а также RI

JDK6 u31 - JAXB API @ 2.1 и RI @ 2.1.10, JAXWS API @ 2.1 и RI @ 2.1.6

Теперь, если вы отправитесь в http://jaxb.java.net и http://jax-ws.java.net страницы и посмотрите последнюю версию под управлением 2.1.x, вы увидите, что JAXB RI находится на уровне 2.1.13, а JAXWS RI - на уровне 2.1.7, т.е.RI-реализации приложений 2.1, которые поставляются в комплекте с последним обновлением JDK 6, на пару версий отстают от тех, что были выпущены под Metro.Итак, чтобы использовать последнюю версию 2.1 jars, просто скопируйте API + RI jars в свой classpath, как описано здесь http://jax-ws.java.net/2.1.7/docs/ReleaseNotes.html#Running_on_top_of_JDK_6.

Чтобы еще больше запутать ситуацию, проект Metro the umbrella имеет свои собственные номера версий, которые на сегодняшний день, 1.5, 2.0, 2.0.1, 2.1, 2.1.1, 2.2

Metro 1.5 была последней сборкой, которая включала в себя компоненты 2.1 и последнюю версию RIS для этой спецификации, т.е.Metro 1.5 содержит API JAXWS и JAXB @ 2.1, JAXWS RI @ 2.1.7 и JAXB RI @ 2.1.13.

Начиная с версии Metro 2.0, в нее входят API JAXB и JAXWS версии v2.2 и последняя версия RI на момент выпуска.например ,последняя версия METRO 2.2 включает в себя JAXB RI 2.2.5 и JAXWS RI 2.2.6.

Но есть загвоздка, JDK 6 объединяет версии v2.1 для JAXWS и JAXB (API + RI), и если вы просто используете JAXWS , JAXB v2.2 jar в вашем classpath, это не сработает.Вам придется использовать одобренный механизм jar, как описано здесь http://jax-ws.java.net/2.2.3/docs/ReleaseNotes.html#Running_on_top_of_JDK_6.

Таким образом, для любой версии Metro 2.0 и выше вам нужно будет скопировать файлы jax-ws-api.jar и jaxb-api.jar в $JAVA_HOME/jre/lib/approved или использовать системное свойство -Djava.approved.dirs.

И что еще интереснее, Metro - это просто не зонтичный проект, который содержит проекты jax-ws, jaxb (и многие другие), но он также делает из этих проектов uber jar.

Так, например, metro webservices-api.jar содержит jaxws-api.jar , jaxb-api.jar (RI) + API-интерфейсы из других дочерних проектов, таких как WSIT, jax-ws-commons и т.д.

И webservices-rt.jar содержит jaxws-rt.jar , jaxb-rt.jar, + RT jar других дочерних проектов, таких как WSIT, jax-ws-commons и т.д.

Итак, подведем итог -

Если вы хотите разработать свой WS в соответствии со спецификациями JAXWS / JAXB версии v2.1, просто используйте JDK 6 (любое обновление после u04).Если вы хотите быть абсолютно уверены в использовании последних версий API + RIs спецификаций 2.1, просто используйте последние версии jar версии 2.1.x от jaxws и jaxb .т. е.используйте jax-ws 2.1.7 и jaxb 2.1.13 в вашем пути к классам [Или вы можете использовать Metro 1.5 webservices-api.jar и webservices-rt.jar, поскольку они объединяют jaxws /jaxb / wsit /..]

Если вы хотите разработать свой WS в соответствии с последними спецификациями JAXWS / JAXB v2.2, то вам придется использовать jax-ws v2.2.6 и jaxb версии 2.2.5 jar [Или, в качестве альтернативы, использовать Metro 2.2 webservices-api.jar и webservices-rt.jar поскольку они объединяют jaxws / jaxb / wsit ..] Но вам придется использовать одобренный механизм jar, как описано выше, чтобы переопределить jar-файлы jaxws / jaxb версии 1, включенные в jdk.

Моя рекомендация - если версия 1 вас устраивает, используйте банки Metro 1.5 (webservices-api, webservices-rt).Если вам нужна версия 2, используйте Metro 2.2 jars (webservices-api, webservices-rt) и обязательно поместите webservices-api.jar в одобренный каталог.

Вам понадобятся metro jars (webservices-[api, rt].jar), если вы собираетесь использовать такие вещи, как fastinfosets, Mtom и т.д., В качестве jars в комплекте с JDK или, если уж на то пошло, просто jaxws-ri.jar и jaxb-ri.jar не предоставит вам этих функций.

Надеюсь, это довольно длинное письмо помогло прояснить некоторые моменты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top