Рамка/библиотека Java Web Service, которая является лучшей и почему?

В настоящее время я оцениваю количество рамок веб-сервисов на Java. Мне нужна структура веб-сервиса, которая поможет мне разоблачить некоторые функции существующего приложения, запущенного на JBoss. Приложение в основном разрабатывается с использованием Spring и POJO (без EJB).

Мне нужна инфраструктура, имеющая следующие свойства:

  • Он должен предоставлять инструменты для автоматической генерации кода шаблона и экономить время, устраняя повторяющиеся задачи, например инструменты, генерирующие WSDL из Java (java2wsdl), инструменты, создающие конечные точки и т.д.
  • Приложения должны быть легко развернуты на существующей платформе J2EE (JBoss), это означает, что в ней должны быть как можно меньше файлов конфигурации (например, axis2.xml в frame2 framework).
    • Также предпочтительно иметь возможность развертывать веб-службу в .war-архиве существующего приложения. (кажется, что Axis2 нужен отдельный архив для приложения веб-службы.)
    • Было бы здорово использовать комбинацию POJO и Spring.
    • Как правило, структура должна иметь чистую структуру и дизайн (например, Spring -WS не хватает), хорошая документация и все остальное характеризует хорошее программное обеспечение.
    • Предпочтительно, чтобы среда включала некоторые стандартные функции, такие как JAX-WS и т.д., а не специфические для поставщика методы.

Я кратко рассмотрел

  • Axis2
  • Apache CXF
  • и Sun Metro
  • Spring WS

Но все же трудно решить, что использовать в моем случае:

  • Axis2 кажется настолько низким, что для него требуется отдельный архив приложений и множество конфигураций.
  • Spring WS кажется слишком непрозрачным и "сложным для целей показа (?)"
  • Apache CXF и Metro, вероятно, представляют собой две структуры, которые я предпочитаю выбирать, но все же

Мне нужно ваше мнение и опыт об использовании некоторых из них в реальных приложениях.

Ответ 1

Я использовал CXF forerunner, XFire, какое-то время, и это было не так уж плохо. В то время мы мигрировали из Axis по двум основным причинам: производительность и простота разработки. В то время (не знаю, правда ли это сейчас), производительность XFire была намного лучше, чем что-либо там, и благодаря разработке, основанной на аннотациях, вместо того, чтобы запускать поколение заглушек, было действительно очень просто добавить новые веб-сервисов.

CXF кажется более похожим, но лучше - мы еще не мигрировали из-за ограничений на время разработки, а также не имея на то оснований для этого (плюс относительная нехватка документации 6-12 месяцев назад была "Ободряюще". Кроме того, я не очень оценил рынок в последнее время, поэтому я не могу сказать вам, как CXF поддерживает своих современных конкурентов.

Относительно ваших баллов:

  • Не создается код шаблона, WSDL автоматически создается из аннотаций класса сервиса и публикуется сервером.
  • Развертывание в Tomcat было относительно простым. Просто определите еще один сервлет в web.xml и сопоставьте шаблон URL с этим сервлетом.
  • Наши веб-службы были развернуты в файлах WAR, я не уверен, что альтернативы на самом деле, но это, по-видимому, было стандартным и очевидным способом сделать это.
  • POJO работают нормально; теперь мы переместили большую часть создания веб-сервиса на Spring, чтобы связать более сложные условные зависимости и не имели никаких проблем с этим.
  • Документация была слабым местом с CXF изначально, хотя просто взглянул, кажется, сейчас лучше. Общий дизайн и архитектура кажутся относительно разумными; прореживание в одном собственном фильтре для изменения деталей передачи было не очень болезненным, и, как правило, рассматривались расширения существующих классов (поэтому разумные методы отмечены как защищенные, а не частные).
  • JAX-WS полностью поддерживается в CXF.

Итак, я, вероятно, немного беспристрастен, поскольку я не пробовал других, но я дам большие пальцы, чтобы посмотреть на CXF. Это довольно быстро, относительно просто, чтобы идти с и достаточно мощным, если вам нужно настроить его.

Ответ 2

Мы пробовали Metro и CXF и сохранили CXF, потому что Metro включает слишком много зависимостей, таких как Sun API, в своих файлах jar, что затрудняет интеграцию на другом сервере приложений, чем Glassfish. CXF имеет более чистую упаковку с явными внешними зависимостями. Мы также не смогли включить сжатие Gzip с Metro, пока он работал как шарм с CXF.

Ответ 3

Я бы пошел с Spring WS первым и XFire вторым. Я пользователь Spring, поэтому я привык к непрозрачности.

Ответ 4

XFire теперь Apache CXF был намного проще в использовании, чем Axis. Я сделал что-то очень быстро, используя его там, где Axis казалась слишком сложной. Я не смотрел на Spring WS.

Ответ 5

Я буду использовать CXF. Он прост в использовании, чем Axis2

Ответ 6

Я использовал только Spring WS, потому что это то, что мне сказали использовать, но это была довольно простая структура использования. Если вам нужно пойти с этим другим, я бы пошел с XFire из-за поддержки JAX-WS.