Веб-сервисы на Java - PullRequest
       38

Веб-сервисы на Java

5 голосов
/ 29 октября 2008

Что вы обычно используете для подключения к веб-сервису при разработке проекта Java?

Существуют разные API, которые могут выполнять эту работу. Из разных книг и учебных пособий, о которых я читал: JAX-WS, JAXB, JAXM, JAXR, JAX-RPC, Axis и т. Д.

Меня интересует, что именно вы используете и сколько? Примите это как опрос, если хотите:)

Ответы [ 10 ]

12 голосов
/ 19 мая 2009

Чтобы ответить на ваш вопрос, нам сначала нужно провести различие между инструментами, которые вы перечислили.

JAX-WS, JAXB, JAXM, JAXR, JAX-RPC являются API-интерфейсами, связанными с XML и веб-сервисами, в то время как Axis 1 и 2 являются реализациями нулевого, одного или более этих API в зависимости от версии.

JAX-B 1 и 2 - это API-интерфейсы привязки XML к объектам, JAX-WS - это API-интерфейс веб-службы на основе WSDL и SOAP, предшественник JAX-RPC, JAX-M - более старый API-интерфейс для обмена сообщениями XML, а JAX-R - API абстракции для взаимодействия с такими реестрами, как UDDI и ebXML.

Со страницы Java.net JAX-RPC:

Экспертная группа JAX-RPC широко представлена ​​в отрасли, а Sun Microsystems выступает в качестве лидера EG. Первоначальная спецификация (JAX-RPC 1.0) была JSR-101 и была выпущена в июне 2002 года. В октябре 2003 года последовал технический выпуск, обеспечивающий лучшую интеграцию с JAXB 1.0, а также лучшую поддержку doc / literal.

Следующая версия спецификации была переименована из JAX-RPC 2.0 в JAX-WS 2.0 и в настоящее время разрабатывается как JSR-224; В этом выпуске будет рассмотрен ряд дополнительных требований в этой области, и увеличится синергизм между спецификациями JAXB и JAX-WS. Вы можете получить доступ к странице проекта JAX-WS здесь.

Поскольку стеки SOAP прошли долгий путь со времен JAX-B 1.0 и JAX-RPC 1.0, я рекомендую держаться подальше от Axis 1.0 и XFire (который, если я правильно помню, даже не реализует JAX-RPC 1). Существует множество стеков SOAP, которые реализуют более новые API (JAX-WS 2.x и JAX-B 2.x).

Как уже упоминалось, Axis 2, JAX-WS RI и CXF являются допустимыми вариантами. Эти стеки SOAP намного более развиты и поддерживают многие современные спецификации WS- *.

Предупреждение о комментариях относительно использования вашей IDE для автоматической генерации кода клиента. Хотя я большой сторонник создания кода связывания данных XML и интерфейсов JAX-WS из XSD и WSDL, соответственно, я предостерегаю использование встроенного мастера в вашей среде IDE для выполнения автоматической генерации. Если вы работаете в команде с более чем одним разработчиком или планируете модифицировать сгенерированный код, вам следует рассмотреть возможность поддержки такого подхода.

Если у вас более одного разработчика, наступит время, когда один из них использует другую версию инструмента автоматического создания, другую IDE или другую конфигурацию в своем инструменте. Кроме того, если вы автоматически генерируете из мастера, разработчики должны помнить, как они генерировали код в том случае, если вам нужно будет сгенерировать его в будущем. Если вы изменили XSD и не помните свою конфигурацию с момента последнего автоматического создания, сгенерированный код может не соответствовать существующему коду, который уже используется в вашей программе.

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

Обе эти проблемы можно избежать, создав сценарий генерации кода в процессе сборки. JAX-WS и JAX-B поставляются с задачами Ant и / или подключаемыми модулями Maven 2, которые легко использовать в ваших сборках. Относитесь к этим предупреждениям серьезно, поскольку я видел, как несколько проектов страдали от этих проблем, когда им нужно было изменить код, созданный 5 лет назад сотрудником, который с тех пор покинул фирму.

Мои последние слова предостережения: будьте осторожны, когда инструмент позволяет автоматически генерировать интерфейсы ваших Web-сервисов из ваших WSDL. Инструмент JAX-WS RI WSDL2Java любит размещать жестко закодированные пути к WSDL в сгенерированных интерфейсах. По моему мнению, вам следует автоматически сгенерировать интерфейсы один раз, а затем удалить жестко закодированные URL-адреса и ссылки QName, чтобы сделать интерфейс применимым ко всем веб-службам, реализующим привязку WSDL, которую представляет интерфейс, а не только к одной конечной точке, которую WSDL описывает.

3 голосов
/ 29 октября 2008

вы можете использовать, ось Apache. Это создаст Java-заглушки автоматически, если вы предоставите WSDL. как только генерируются заглушки, все равно что вызывать нормальный класс Java.

3 голосов
/ 19 мая 2009

Сторонники оси здесь должны быть точными.

Проект Axis 1.x был заброшен после выпуска Axis 1.4 в апреле 2006 года, более трех лет назад. Недавно мы столкнулись с несколькими очень важными ошибками безопасности потоков в клиентских библиотеках Axis 1.4, включая 100% вращения ЦП и взаимоблокировки. Они хорошо документированы (и до сих пор не решены) в базе данных ошибок Axis 1.x. Само собой разумеется, что мы отказываемся от Axis 1.x (и просто используем необработанный код клиента Apache HTTP).

Axis 2 - это совершенно новая кодовая база ... возможно, кто-то другой может прокомментировать это.

Исходя из нашего опыта, мы рассмотрим Метро , CXF , кодирование вручную и (возможно) Ось 2 для SOAP веб-сервисы. (Мы рекомендуем подходы, основанные на REST, вместо SOAP, когда у вас есть выбор, и мы используем фреймворк Restlet, который мы любим)

ИМО, вы бы с ума сошли с Axis 1.x

3 голосов
/ 29 октября 2008

http://cxf.apache.org/ приятно.

2 голосов
/ 29 октября 2008

Я думаю, что наиболее распространенное использование с Apache Axis2. С его помощью очень легко создавать сервисы, и вы найдете множество учебных пособий.

2 голосов
/ 29 октября 2008

Я использовал и Ось, и Ось2 и считаю их обоих очень хорошими.

2 голосов
/ 29 октября 2008

Поскольку у нас достаточно большие инвестиции в Spring, мы используем Spring-WS с JAXB.

1 голос
/ 29 октября 2008

Я использовал JAX-WS RI и Apache CXF . Если вы используете Spring , тогда CXF - очень хороший вариант. Как упоминал Фил, существует также Spring-WS , но CXF основывается на спецификации JAX-WS. Если вы не используете Spring, то я бы сказал, что RI - это то, что нужно, тем более что он связан с Java 6.

0 голосов
/ 29 октября 2008

+ 1 для Apache Axis.

Но JAX-WS также будет хорошим выбором.

0 голосов
/ 29 октября 2008

Для веб-сервисов POX + HTTP или RESTful Рестлет или приличная реализация клиента HTTP вполне достаточны.

...