Grails и использовать SOAP веб-сервис - PullRequest
3 голосов
/ 28 марта 2011

Будучи довольно новым для Grails, мне было интересно, что люди используют, чтобы использовать веб-сервис в проектах Grails.Так на стороне клиента системы?Любые рекомендации?Я вижу людей, использующих GroovyWS, Spring-WS и т. Д. Что хорошего и простого в использовании?

Ответы [ 3 ]

4 голосов
/ 28 марта 2011

GroovyWS очень прост в использовании и имеет отличную документацию, я определенно рекомендую его.

1 голос
/ 13 июня 2011

Использование Grails 1.3.7 Я использую свой собственный веб-сервис с плагином WS-Client Grails . На самом деле он основан на GroovyWS, который в свою очередь использует CXF. Это очень легко использовать, по крайней мере, в моем простом сценарии, где я получаю только строки из веб-службы бэкэнда. Я пока не знаю, как он работает со сложными типами данных.

Раньше я никогда не использовал и не создавал веб-сервис, но использовал этот плагин во внешнем интерфейсе и плагин Grails CXF во внутреннем интерфейсе. За два дня я получил обсуждение SOAP между приложениями Grails. Вам не нужно использовать CXF или GroovyWS напрямую с очень хорошим плагином ws-client. Скорость (развития) и простота.

1 голос
/ 28 марта 2011

Используя плагин Grails CXF здесь.Требуется:

  1. Временное решение для загрузчика классов - DynamicClientFactoryit изменил текущий загрузчик классов;
  2. и вручную запрограммировал вызовы WS.код довольно тонкий.

    Редактировать: извините, не более того, и я не уверен, что я еще не сломал и NDA:

    # 1

    def arrayOfLong = objectFactory.createArrayOfLong(XXX, ids)
    result = client.invoke(methodName, arrayOfLong as Object[])
    

    # 2:

    def dcf = DynamicClientFactory.newInstance()
    def classLoader = Thread.currentThread().getContextClassLoader()
    
    // create a WS client
    // and assign end point address to it
    def client = dcf.createClient(WSDL_URL, classLoader)
    client.conduit.target.address.setValue(endpointUrl)
    
    // reacquire classloader because 'createClient' changes it
    def changedClassLoader = Thread.currentThread().getContextClassLoader()
    def objectFactory = changedClassLoader.
        loadClass(FACTORY_CLASS_NAME).newInstance()
    
...