Создание шаблонов веб-служб в Grails

Мне нужно реализовать веб-приложение, но вместо использования реляционной базы данных мне нужно использовать различные веб-службы SOAP в качестве серверной части. Важная часть приложения только вызывает веб-сервисы и отображает результат. Поскольку веб-службы четко определены в форме операции: в параметрах и типе возвращаемого значения, мне кажется, что базовый графический интерфейс может быть легко построен, как и в случае формирования шаблонов на основе объектов домена.

Например, в случае работы веб-сервиса SearchProducts мне нужно ввести параметры поиска в качестве входных данных, чтобы можно было построить страницу поиска. Операция вернет список продуктов, поэтому мне нужна страница, которая будет отображать этот список в какой-то таблице.

Есть ли уже какая-то библиотека в Grails, которая позволяет вам достичь этого. Если нет, то как бы вы его создали?


person Dan    schedule 29.05.2009    source источник


Ответы (2)


Вы должны иметь возможность использовать XFire или CXF Плагины. Для автоматического формирования шаблонов измените шаблон Controller.groovy в шаблонах формирования шаблонов, чтобы он автоматически генерировал нужные вам методы.

person Jean Barmash    schedule 16.11.2009

Вероятно, самый простой подход — использовать wsimport для файлов WSDL для создания заглушек на стороне клиента. Затем вы можете вызывать методы в заглушках из Groovy точно так же, как вы бы вызывали их из Java.

Например, рассмотрим файл WSDL для Microsoft TerraServer, расположенный по адресу http://terraservice.net/TerraService.asmx?wsdl . Затем вы запускаете что-то вроде

wsimport -d src -keep http://terraservice.net/TerraService.asmx?WSDL

который помещает все скомпилированные заглушки в каталог src. Затем вы можете написать код Groovy, например

import com.terraserver_usa.terraserver.*;

TerraServiceSoap sei = new TerraService().getTerraServiceSoap()
Place home = new Place(city:'Boston',state:'MA',country:'US')
def pt = sei.convertPlaceToLonLatPt(home)
println "$pt.lat, $pt.lon"
assert Math.abs(pt.lat - 42.360000) < 0.001
assert Math.abs(pt.lon - -71.05000) < 0.001

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

Суть, однако, в том, чтобы позволить Java делать то, что она и так хорошо делает, и использовать Groovy там, где это упрощает вашу жизнь.

person kousen    schedule 17.11.2009