Веб-сервисы Java - Нужна ли ось? - PullRequest
6 голосов
/ 01 октября 2009

Требуется ли AXIS или CXF для веб-служб Java? Можно ли все это сделать через JDK (1.6)?

Ответы [ 6 ]

3 голосов
/ 01 мая 2013

Обновленная информация о ландшафте веб-сервисов в 2013 году.

Веб-сервисы раньше были на основе SOAP и XML. Веб-сервисы были стандартизированы в JAX-WS. Вот некоторые из наиболее популярных фреймворков:

  • Ось 1.x
  • Ось 2
  • Apache CXF - CXF также включает другие протоколы. Это гораздо более широкие рамки
  • Веб-службы Metro, включающие в себя эталонную реализацию JAX-WS.
  • Java 6 и Java 7 по умолчанию включают RI JAX-WS. Это означает, что фреймворки больше не нужны, кроме как для создания клиентских и сервисных заглушек / скелетов

Существуют и другие реализации, не перечисленные здесь, которые зависят от поставщика, например. WS-реализация IBM Websphere и WS-реализация Weblogic.

Обычно для создания веб-служб я бы порекомендовал Metro и JAX-WS RI.

Обратите внимание, что существует множество стандартов WS- *, например. WS-Security, которая не может быть частью всех реализаций WS.

Поскольку веб-сервисы существуют уже некоторое время, появились и другие альтернативы как с точки зрения архитектурного стиля, протокола и кодирования.

Например, XML раньше был де-факто кодировкой. JSON сейчас более распространен. Стоит взглянуть на Джексона, JSON-парсер или Google GSON. Основными аргументами в пользу JSON является то, что он прост в использовании, легок и удобен для разработчиков.

Вместе с JSON появился REST. ОТДЫХ - это архитектурный стиль. С помощью REST вы все еще можете реализовать «веб-сервисы» в смысле удаленных сервисов, которые можно легко использовать по сети. REST также был стандартизирован в семействе стандартов Java как JAX-RS. Некоторые из популярных реализаций JAX-RS включают CXF, Джерси и RESTLet.

Наконец, в блоке есть несколько новых детей, которые используют двоичные кодировки. Это Google Protocol Buffers и Apache Thrift. Их главная цель - производительность, а также более широкая поддержка других языков (Java, C #, Erland, Perl ...).

При разработке веб-сервиса сегодня вопрос должен быть: - Я забочусь о производительности? - хочу ли я получить доступ к услуге на разных языках? - хочу ли я пользоваться мобильным телефоном?

Это должно помочь вам сделать свой выбор. Кроме того, я предпочитаю свести свои зависимости к минимуму. Это означает, что я предпочел бы взять что-то, что является родным для JRE или JDK, например. эталонная реализация JAX-WS или JAX-RS.

3 голосов
/ 05 декабря 2012

Нижеследующее основано на личной истории:

Таким образом, вы хотите использовать веб-сервис в своем веб-приложении на Java и не хотите добавлять 10 МБ JAR-файлов в ваш обеденный файл 1.3 МБ .war, и, кроме того, вы отлично разбираетесь в XML (вы можете сдавать код вручную). Запросы XPath и файлы XSLT), вы полностью понимаете HTTP, и клиент, с которым вы взаимодействуете, имеет отличную документацию. Вы загружаете WSDL, просматриваете свои конечные точки и свои методы и начинаете создавать класс Java, который сопоставляется с функциями, которые вам понадобятся. Ты уже прекрасно себя чувствуешь.

Они начинают читать о том, как отправлять SOAP-запрос, и вы думаете, что это выглядит немного многословно, но что они слышат, это всего лишь строка, поэтому вы начинаете создавать утилиту, которая принимает ваш объект Java-запроса и преобразует его в SOAP-запрос. Вы отправляете свой чистый запрос SOAP на сервер, но он отклоняется ( отсутствует подпись ).

Итак, теперь вы начинаете добавлять JAR-файлы шифрования в ваш проект и начинаете смотреть, как вычислить подпись части XML-документа и включить его и документ в запрос. Это займет у вас некоторое время, но при достаточном количестве взломов вы получите сообщение, которое вы можете отправить в ваш сервис мыла, и теперь вы имеете дело с SOAP-ответом . Теперь ты чувствуешь себя прекрасно ...

Пока администратор на вашем клиенте не изменит свои требования безопасности, не выпустит новые открытые ключи и не обновит интерфейс soap с некоторыми пользовательскими типами, и ваш следующий клиент, работающий с аналогичной службой (но на Windows Server), хочет, чтобы вы реализовали с ними.

В этот момент я прекратил попытки реализовать это чисто на Java и просто начал использовать стандартные библиотеки. Они имеют дело с такими вещами, как шифрование, маршалинг, отклонения от стандартов, и они позволяют вам сосредоточиться на вещах, которые ближе к вашей проблемной области. Я надеюсь, что вы можете спасти потерянный месяц, который понадобился мне, чтобы выучить этот урок.

3 голосов
/ 01 октября 2009

Требуется ли AXIS или CXF для веб-служб Java?

Нет. Хотя Axis2 является самой популярной средой для работы с веб-службами, это не единственный способ сделать это.

Можно ли все это сделать через JDK (1.6)?

Да, но это намного сложнее. Вы получите огромную выгоду от использования инфраструктуры, используемой другими приложениями, и от исправлений ошибок, предоставленных командой разработчиков. Делать все вручную - все равно что заново изобретать колесо.

Если вы хотите иметь полный контроль над тем, что происходит внизу, возможно, вы можете использовать: JAX-WS

или, если приложение очень простое, прямо с сокетом.

Но опять же, Axis2 - это канонический способ сделать WS (но не единственный)

2 голосов
/ 01 октября 2009

В качестве альтернативы Axis вы можете использовать инфраструктуру Spring WebServices для запуска приложения веб-сервисов в контейнере J2EE, таком как Tomcat или что-либо подобное. Я обнаружил, что его очень легко использовать и настраивать, и если вы хотите позже интегрировать свои веб-сервисы в другое веб-приложение, это довольно легко сделать (я сам делал это в двух отдельных случаях).

1 голос
/ 01 октября 2009

Вы можете использовать http-потоки, предоставляемые веб-сервером, по своему желанию, но использование фреймворка и некоторых jar-файлов (которые доказали свою эффективность) избавит вас от многих головных болей и много времени в долгосрочной перспективе. *

0 голосов
/ 01 октября 2009

Обычно вы хотите использовать среду программирования для веб-сервисов.

Что-то вроде загрузки AXIS, CXF или Java EE (GlassFish) от Sun.

...