Apache CXF + Mule ESB, SOAP + RESTful веб-сервис. Как это сделать? - PullRequest
3 голосов
/ 18 марта 2012

Я новичок в веб-сервисах Java и сейчас работаю над одним из них, используя Apache CXF.Он будет иметь поддержку как JAX-WS (SOAP), так и JAX-RS (REST).Он будет потребляться настольными и мобильными приложениями.Изучая Apache CXF, я столкнулся с некоторыми демонстраторами.Может кто-нибудь помочь мне с потоком с точки зрения слоев?

FYI : я работал с API Карт Google ранее.Я разработал приложение-потребитель в .NET, и у меня есть представление о веб-сервисах (как SOAP, так и REST).У меня проблемы с этими деталями реализации в Java.


О сервисе

Вот что я понимаю.Mule будет работать на отдельном сервере, и поскольку Mule уже поддерживает Apache CXF, он сможет запускать как RESTful, так и SOAP-сервисы.

Быстрый вопрос 1 : Какова цель ApacheCXF в Mule?

Быстрый вопрос 2 : Я видел некоторые веб-сервисы Apache CXF RESTful без Mule.Работает ли он в контейнере сервлета в таком случае?Если да, то чем он отличается от развертывания веб-службы в Mule?

Об интеграции

Приложение-потребитель будет работать на другом сервере.Он будет выполнять SOAP или остальные URL-вызовы вышеупомянутой веб-службы.В зависимости от типа приложения ответ будет отправлен приложению-потребителю.

Быстрый вопрос 1 : Является ли моя конечная точка службы общей для вызовов REST и SOAP?

Быстрый вопрос 2 : Можно ли даже разместить веб-сервис RESTful и SOAP на общей конечной точке?Если нет (что, я полагаю, наиболее вероятно), как приложение-потребитель узнает, что оно получает?


tl; dr ?Как работает веб-служба Apache CXF с обоими определениями REST и SOAP при развертывании в Mule ESB?Каков сквозной поток через каждый слой?

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Быстрый вопрос 1. Какова цель Apache CXF в Mule?

Mule использует CXF для реализации как потребления, так и предоставления веб-сервисов.В этом нет ничего особенного.Это просто библиотека, которую использует мул.

Быстрый вопрос 2: Я видел некоторые веб-сервисы Apache CXF RESTful без Mule.Работает ли он в контейнере сервлета в таком случае?Если да, то чем он отличается от развертывания веб-службы в Mule?

Вы также можете использовать CXF в своем собственном приложении, которое вы будете развертывать, например, в Tomcat.Таким образом, он будет работать в контейнере.Ну, это действительно не так уж много различий.Мул тоже работает в контейнере.:) Мул конечно же содержит много других функций, потому что это ESB.Вы должны подумать, нужны ли вам все функции ESB или нет.Если вам нужно развернуть только пару веб-сервисов, то я думаю, что ESB - это избыточное решение для ваших нужд.

Быстрый вопрос 1. Является ли моя конечная точка службы общей для вызовов REST и SOAP?

Нет, не будет.Вам необходимо создать отдельные конечные точки для обеих служб.

Быстрый вопрос 2. Можно ли даже разместить веб-службу RESTful и SOAP на общей конечной точке?Если нет (что, я полагаю, наиболее вероятно), как приложение-потребитель узнает, что оно получает?

Ну, вы могли бы использовать ту же самую входящую конечную точку, но я думаю, что вы быПристрелись к ноге, делая это.Вы можете сделать разделение по типу HTTP-запроса.SOAP-запросы - это POST-запросы, в то время как простой вызов REST (при условии, что вы извлекаете данные, а не публикуете) будет GET-запросом.

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

Мое первое предложение (сделав это раньше) не использовать Mule для развертывания веб-сервисов.Конечно, это возможно, поскольку CXF предоставляет возможность Mule использовать и развертывать веб-сервисы.Однако, если вы не используете функции ESB в Mule, вам лучше развернуть свои службы на сервере приложений, таком как Tomcat.Даже если вы используете ESB для передачи услуг, маршрутизации сообщений, преобразования данных и т. Д., Вам все же лучше будет развернуть свои службы на отдельном сервере.Даже MuleSoft предлагает версию Tomcat (Tcat) для этой цели.

В Mule вы создаете конфигурацию конечной точки для своего веб-сервиса (и, да, я действительно считаю, что вам нужно иметь несколько конечных точек).С Tomcat (и другими серверами приложений) вы создаете файл war веб-приложения и, как правило, развертываете его на сервере.Я использую аннотации JAX-WS (SOAP) и JAX-RS (REST) ​​в своем коде вместе с JAXB для привязки данных.Я Spring для настройки конечных точек SOAP и REST в конфигурации веб-службы.Я также использую Maven для создания, тестирования, упаковки, запуска и развертывания веб-службы.

Чтобы клиент работал, клиенту необходимо заранее знать, какой веб-сервис он использует.SOAP и REST запросы / ответы выглядят по-разному.Обычно для использования службы SOAP вы генерируете код клиента, используя wsdl2java.Вы также можете использовать сервисы SOAP, отправив XML-строки конверта SOAP в конечную точку SOAP.Вы можете вызвать службу RESTful примерно таким же образом (без конверта SOAP), но это также может быть GET или PUT (не POST).Можно создать WADL с использованием CXF, который аналогичным образом описывает службу RESTful.Это можно использовать для генерации клиентского кода с использованием wadl2java.

...