2009-06-18 4 views
3

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

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

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

Настоящая проблема заключается в том, что она не объясняет, в чем проблема (поэтому я могу пойти с владельцем веб-службы и изменить ее) и не позволяю мне изменять вывод, поэтому я, вероятно, могу исправить проблему самостоятельно.

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

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

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

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

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

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

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

Итак, у кого есть GOOD ws stubs генератор, который может порекомендовать?

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

ответ

2

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

<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> 
+0

Думаю, я дам Axis попробовать. По крайней мере, я смогу получить сообщения об ошибках вместо молчания (или сказать «Поколение не получилось») .. :) Спасибо за полное повторение wsdl2java. Кажется, вы спасли меня хотя бы пару часов. – OscarRyz

1

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

+0

Я использую ось (косвенно), и она терпит неудачу. Любое другое предложение? – OscarRyz

+1

Я бы попробовал прямо. Ось в значительной степени стандартная. – jle

+0

-1: Остерегайтесь! У Axis 1 есть ужасные ошибки безопасности потоков (тупики и вращения процессора) и был отменен в апреле 2006 года. Axis 2 - совершенно другая база кода и может стоить взгляда. Сначала я попробую Apache CXF или Glassfish's Metro. –

0

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

+0

Я бы хотел услышать ваши впечатления от перехода от WSDL-> клиента. Мы используем Metro для внутренних веб-сервисов. –

+0

Мы не используем его очень; мы не являемся частью магазина Java. Мы использовали его, например, для веб-сервисов, которые мы предоставляем клиентам. За исключением зависимости от времени выполнения от фактического файла WSDL (раздражение больше всего на свете), все было довольно просто. – Joe

3

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

Обновление: здесь представлены сообщения об ошибках на deadlock и 100% CPU spin.Вот три года назад Cyrille Le Clerc's proposed patch никогда не совершал.

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

2

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

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

1

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

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

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

Смежные вопросы