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

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

16 голосов
/ 22 марта 2012

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

Чтобы еще более запутать, у зонтичного проекта Metro есть свои собственные номера версий, которые на сегодняшний день составляют 1,5, 2,0, 2,0,1, 2,1, 2,1,1, 2,2

Metro1.5 была последней сборкой, которая объединила 2.1 spces и последние RI для этих спецификаций, то есть Metro 1.5 содержит JAXWS и JAXB APIs @ 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 # Running_on_top_of_JDK_6 .

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

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

Так, например, webservices-api.jar в метро содержит API-интерфейсы jaxws-api.jar, jaxb-api.jar (RI) + от других дочерних проектов, таких как 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 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 [Или использовать альтернативноWebservices-api.jar и webservices-rt.jar в Metro 2.2 вместе с jaxws / jaxb / wsit.] Но вам придется использовать механизм одобренного jar, как описано выше, чтобы переопределить jaxws, включенные в jdk/ 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 не предоставит вам эти возможности.

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

1 голос
/ 09 марта 2012

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

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

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

...