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

Реализация 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?

2 ответа

Решение

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

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 + RI в самом JDK и продолжал обновлять их обновлениями JDK.

Начиная с последнего обновления JDK 6, 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. Таким образом, чтобы использовать самые последние файлы jar 2.1, просто скопируйте файлы jar API + RI в путь к классам, как описано здесь http://jax-ws.java.net/2.1.7/docs/ReleaseNotes.html.

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

Metro 1.5 была последней сборкой, которая объединила версии 2.1 и последние RI для этих спецификаций, то есть 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 jars в вашем classpath не сработает. Вам нужно будет использовать одобренный механизм jar, как описано здесь http://jax-ws.java.net/2.2.3/docs/ReleaseNotes.html.

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

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

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

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

Итак, чтобы подвести итог -

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

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

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

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

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

Другие вопросы по тегам