Библиотека для создания заглушек Java для веб-сервиса

StackOverflow https://stackoverflow.com/questions/1010392

Вопрос

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

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

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

Реальная проблема в том, что она не объясняет, в чем проблема (поэтому я могу пойти с владельцем веб-сервиса и изменить его), и не позволяет мне изменить выходной файл, чтобы я, вероятно, смог решить проблему самостоятельно.

Тем не менее, владельцы веб-сервисов (потому что это происходит с несколькими разными ws) говорят, что их ws работает нормально, и на самом деле, если я использую soapUI они действительно работают !!!

Я быстро взглянул на библиотеки, используемые самим soapUI, и выглядел многообещающе.

Я знаю, что есть Axis , которая должна выполнять эту работу, но я обеспокоен тем, что что мой сбойный генератор уже использует эту библиотеку (что заставляет меня думать, что она снова выйдет из строя)

И в последнее время я не знаю, генерируют ли эти две библиотеки заглушку исходного кода java или только такие методы, как

Object [] args = ...;
service.inkvoke("updateCustomer", args );

Когда я хотел бы получить что-то вроде:

CustomerWs cws = ....
cws.updateCustomer(custId, custName, custAddress /*etc*/ );

Итак, у кого-нибудь есть ХОРОШИЙ генератор заглушек ws, который можно порекомендовать?

Я собираюсь написать свой собственный код, но определенно потребуется несколько дней, чтобы быть приемлемым

Это было полезно?

Решение

Что вы сейчас используете? Я использую Axis Wsdl2Java в качестве задачи Ant. Он генерирует типы заглушек, которые вы хотите. Прекрасно работает, хотя в Eclipse было сложно настроить classpath для запуска сборки (было несколько jar-файлов, которые мне нужно было отследить и включить). В моем файле сборки муравей это выглядит так:

<taskdef name="axis-wsdl2java" classname="org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask" />
<target name="foo">
<axis-wsdl2java
              output="${build.dir}"
              testcase="false"
              verbose="true"
              typemappingversion="1.2"
              url="http://ws.domain.com/url/of/WebService?wsdl" />
<!-- Compile, etc... -->
</target>

Другие советы

Будьте очень осторожны, когда ссылаетесь на "Axis": Apache Axis 1 был заброшен в начало 2006 года с ошибками безопасности потоков, приводящими к взаимоблокировкам и спинам процессора (оба из которых мы испытали). Вы будете глубоко сожалеть об этом. Apache Axis 2 - это полное переписывание, которое стоит посмотреть. Но я бы посоветовал вам сначала взглянуть на Apache CXF и Метро Glassfish .

Обновление: вот сообщения об ошибках в взаимоблокировке и 100% вращения ЦП . Вот предложенный Сирилом Ле Клерком три года назад исправления , ни разу не подтвержденный.

Мы устранили наши взаимные блокировки и перекручивания, перекодировав наш клиент на прямой Java. И тогда сервер Axis отказался общаться с нами, отправив обратно HTTP 500 ошибок. Нам нужно было ложно утверждать, что мы были клиентом Axis, чтобы получить правильный ответ. Совместимость SOAP не была приоритетом для команды Оси 1.

Мне нравится Apache CXF - он прекрасно интегрируется с Maven через плагин, и он работает. Некоторое время я использовал его для генерации клиентского заглушки, а в последней компании, где я работал, они использовали его и для серверной части WS.

В последних проектах, над которыми я работал с CXF + Maven + Subversion, мы не включали сгенерированные классы в Subversion, а только копию файла WSDL - классы-заглушки были сгенерированы в " generate " цель Maven.

Apache Axis 2 - это то, что нужно ... хотя вам, возможно, придется немного поэкспериментировать, чтобы сделать это правильно. Это, пожалуй, самый распространенный способ сделать это. Возможно, инструмент, который вы используете, основан на Оси 1?

Я бы определенно предложил использовать что-то на основе стандартов API. Это будет означать API JAX-WS. Apache CXF и Metro являются двумя основными реализациями JAX-WS, хотя у JBoss также есть реализация. Axis2 имеет несертифицированную реализацию, но не поддерживает поддержку кода.

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

Кроме того, JAX-WS встроен прямо в Java6. Если вы планируете работать на Java6, вы можете использовать его, и вам не придется иметь дело с дополнительными банками и тому подобным.

Последний JAX-WS как часть метро ( http://metro.dev.java.net ) довольно хороший уровень абстракции. Немного приспосабливается, но для меня это было намного более интуитивно понятно, чем некоторые другие варианты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top