Библиотека для создания заглушек Java для веб-сервиса - PullRequest
3 голосов
/ 18 июня 2009

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответы [ 6 ]

3 голосов
/ 18 июня 2009

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

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

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

2 голосов
/ 18 июня 2009

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

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

2 голосов
/ 18 июня 2009

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

<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>
1 голос
/ 18 июня 2009

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

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

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

1 голос
/ 18 июня 2009

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

0 голосов
/ 18 июня 2009

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

...