Какие существуют методы для автоматической генерации заглушек Java-клиентов из файлов WSDL? - PullRequest
7 голосов
/ 23 июля 2010

Я новичок в веб-сервисах и прочитал некоторую информацию о XML, SOAP и WSDL. Это очень интересно! Я работаю над существующим проектом, в котором есть веб-сервис и клиент. Тем не менее, клиент «высших планов» не доволен клиентским приложением. Это слишком сложно, им нужно более удобное и простое приложение, которое можно легко расширить.

В проекте используется Apache Axis2. Я нашел файлы WSDL и хотел бы построить клиент на основе этого. Однако я не хочу использовать Axis2 по вышеуказанным причинам (их мнение). Интересно, как проще сделать клиента, учитывая, что мне приходится работать с уже существующим кодом (файлы wsdl). Кто-нибудь знает какие-либо другие методы, которые можно использовать для автоматического создания клиентских заглушек на основе существующих файлов WSDL? Я слышал о wsimport, это все равно должно работать, даже если файлы wsdl были созданы с использованием Axis2?

Любая помощь или советы с благодарностью.

Ответы [ 6 ]

4 голосов
/ 25 июля 2010

Ну, мы использовали xfire, но не wsdl-ориентированный подход: wsdl был создан на лету из открытых удаленных интерфейсов.У клиента были те же интерфейсы, которые были автоматически сопоставлены с сгенерированным wsdl.

AFAICS xfire превратился в CXF, а домашняя страница CXF сообщает мне следующее:

CXF поддерживает как первую контрактную разработку с WSDL, так и первую разработку кода, начиная с Java.Для REST CXF также поддерживает внешний интерфейс JAX-RS (совместимый с TCK).

Как я понял, вам понадобится инструмент wsdl2java для создания заглушек на стороне клиента из существующего файла WSDLесли вы решили основываться на WSDL.Если оба узла запускают Java, тогда применим подход, ориентированный на Java, и он более прозрачен (поскольку интерфейсы служб / POJO могут совместно использоваться клиентом / сервером с помощью транспорта, генерируемого во время выполнения без каких-либо шагов создания заглушек / прокси-серверов).

2 голосов
/ 24 июля 2010

Попробуйте wsimport .Я использовал это ранее.В то время я решил отказаться от Axis2 по той самой причине, что он создавал более сложные и раздутые заглушки для кода.

2 голосов
/ 24 июля 2010

Одним из преимуществ использования SOAP является множество доступных клиентских библиотек.Лучше всего сначала спросить своего клиента, какая технология внедрения предпочтительнее.

Клиенты, способные поддерживать клиента Java или C #, немедленно заявят о своей верности своему любимому молотку: -)

Если ваш клиентэто не означает, что им просто нужно что-то, что «работает» и «легко / дешево в обслуживании».Если это так, то я бы порекомендовал одно из решений, приведенных в следующем ответе

Я большой поклонник Axis2, но мой опыт показывает, что CXF генерирует большечитаемый код из сложных WSDL.Несмотря на это, API редко используется ...... WSDL имеют тенденцию чрезмерно работать со сложным и многоуровневым наследованием XML-схемы ..... Клиенты всегда обвиняют инфраструктуру генерации кода в "нечитаемом" клиентском кодебез мысли о спецификации интерфейса, которая не может быть интерпретирована без помощи дорогостоящего инструмента проектирования XML: -)

Мой совет?Если вы управляете кодом на стороне сервера, то упростите WSDL, чтобы он проверял то же сообщение SOAP.Вы заметите, что клиентский код тоже становится намного проще, и вы лучше поймете, что предлагает ваш веб-сервис.

В качестве альтернативы (если вы не управляете WSDL) используйте инструмент, подобный SOAPUI , чтобы увидеть фактический обмен SOAP / XML и просто генерировать эти XML-сообщения напрямую.

2 голосов
/ 23 июля 2010

См. Шаг 1: Генерация скелетного кода :

Для генерации скелета и необходимых классов вы можете использовать инструмент WSDL2Java, предоставленный в Axis2.Этот инструмент находится в каталоге bin дистрибутива и может быть выполнен с использованием предоставленных сценариев (.bat или .sh).

$ wsdl2java.sh -uri ../samples/wsdl/Axis2SampleDocLit.wsdl -ss -sd -d xmlbeans 
    -o ../samples -p org.apache.axis2.userguide
1 голос
/ 23 июля 2010
0 голосов
/ 23 июля 2010

Spring web services может помочь. Я рекомендую Spring в целом.

...