JAVA-клиенты Windows Communication Foundation.
Я не являюсь JAVA-программистом, я профессионально программирую на Бейсике. И с момента его появления (еще до VB6, когда Бейсик был еще только плагином для Excel - это было в 1992-м году кажется, а VB6 появился только в 1998 году) - за это время я написал не десятки, а сотни проектов. Во всех ста средах, в которых возможно программирование на Бейсике, включая LINUX. Кроме того, в 2011-м году я интенсивно программировал на FLEX-AIR и уже сделал десятки профессиональных проектов.
Но, тем не менее, мне ИНОГДА приходится делать кое-что на JAVA - здесь я хочу описать одну из таких задач - подключение из JAVA к сервисам Windows Communication Foundation. Думаю это тоже может быть полезно какому-нибудь начинающему программисту - только не относитесь к моим словам в части JAVA как к истине в последней инстанции - это записки JAVA-дилетанта.
Для того, чтобы понять вообще тему кроссплатформенных подключений к web-сервисам (а внутриплатформенные Web-сервисы практически бесполезны, ибо внутри каждой платформы есть свои собственные механизмы обмена данными, гораздо более простые и эффективные, чем web-сервисы) - для того, чтобы понять эту тему, надо осознать что возможности web-сервисов каждой из платформ на 99% несовместимы с возможностями другой плтформы.
Пару простых иллюстраций о такой несовместимости вы можете найти у меня на сайте - вот например как я подключался к Web-сервсам ASSIST'а, сделанным на JAVA. Мне так и не удалось правильно сконфирурировать Windows Communication Foundation - и поскольку это повторялось уже не первый раз - я сделал свой собственный клиент вебсервисов, взамен стандартного микрософтовского WCF - WCF_CLIENT - клиент Web-сервиса.
Другой пример сложного кроссплатформенного подключения к web-сервисам InPlat у меня не описан столь подробно - вот тут приведены кое-какие скрины. Задача состояла в том, чтобы создать такую WCF, которую свободно сможет вызывать калбеком среда PHP. Эту задачу решить удалось, однако это стоило заказчику 30 тысяч рублей и пару недель моей возни.
И действительно, достаточно бегло сопоставить лишь названия разделов внутри каждой платформы - чтобы убедится что придется повозится - чтобы найти у web-сервисов разных платформ хоть какие-то точки соприкосновения. Например у WCF все описания функциональности разбиты по разделам - basicHttpBinding, basicHttpContextBinding, mexHttpBinding, mexHttpsBinding, mexNamedPipeBinding, mexTcpBinding, msmqIntegrationBinding, netMsmqBinding, netNamedPipeBinding, netPeerTcpBinding, netTcpBinding, netTcpContextBinding, webHttpBinding, wsDualHttpBinding, wsFederationHttpBinding, wsHttpBinding, wsHttpContextBinding, ws2007FederationHttpBinding, ws2007HttpBinding, customBinding. А возможности JAVA-сервисы описываются обычно по следующим разделам (спецификациям расширения web-сервисов): WS-Policy, WS-PolicyAttachment, WS-PolicyAssertions, WS-Addressing, WS-Security, WS-Trust, WS-SecureConversation, WS-SecurityPolicy, WS-Federation, WS-Transfer, WS-ResourceTransfer, WS-Fragment, WS-MetadataExchange, WS-Enumeration, WS-Eventing, WS-Management, WS-Discovery, WS-ReliableMessaging, WS-ReliableMessaging Policy, WS-MakeConnection, WS-Coordination, WS-AtomicTransaction, WS-BusinessActivity.
В принципе у меня на сайте уже есть несколько заметок, посвященных совместимости web-сервисов:
- Конфиги WCF-сервисов, обеспечивающие совместимость с JAVA, PHP, FLEX. - эта заметка посвящена конкретному вопросу - удачным кроссплатформенным WCF-конфигам.
- Создание асинхронного прокси для обращения к WCF средствами Adobe flex builder - а эта заметка посвящена Flex.
- Как сделать SOAP/WSDL-вебсервис на ASP.NET/MONO для вызова его из FLEX
А в этой заметке я попробую взглянуть на тот же вопрос со стороны JAVA.
Axis
Стек Apache Axis в принципе является старейшей технологией web-сервисов на Java. В настоящее время в ходу Axis-2. Однако у меня на всех моих тестах реально совместим с WCF только старый Axis.
Ниже на скринчиках вы можете увидеть как я делаю тесты своих WCF-сервисов на Axis:
Теперь осталось сделать консольную утилитку, чтобы тестировать нужный мне WCF-сервис. Этот сервис просто возвращает курс доллара, по которому работает компания http://flyseason.ru/ - но меня интересует в данном случае не просто курс валюты, а совместимость моего сервиса с клиентами на Axis.
Замечу, что и собственно Java-сервисы на Axis делать проще всего.
CXF
Стек web-сервисов Apache CXF ставится в составе Web-сервера Glassfish:
Теперь можно ставить собственно стек web-сервисов Apache CXF:
Обратите внимание, что прокси-классы, сгенерированные Apache CXF совершенно непохожи на классы Apache Axis - поэтому и использование их для вызова WCF-сервисов будет другое.
Metro
Клиент web-сервиса стека Metro создается с помощью консольной утилиты wsiimport, которой скармливается WSDL. Но поскольку у меня уже стоит SoapUI - я просто сгенерю клиента WCF-сервиса в один клик мышкой.
Как вы видите, у меня в Eclipse установлен не только soapUI - как это сделать я описал в своей маленькой заметочке - Подготовка к работе Eclipse.
<SITEMAP> <MVC> <ASP> <NET> <DATA> <KIOSK> <FLEX> <SQL> <NOTES> <LINUX> <MONO> <FREEWARE> <DOCS> <ENG> <CHAT ME> <ABOUT ME> < THANKS ME> |