2013-02-25 3 views
1

Я разработал некоторые веб-службы, которые я бы хотел использовать в моем приложении grails. Эти службы могут быть вызваны с использованием протоколов Get или POST.Grails: невозможно решить класс groovyx.net.http.HTTPBuilder

Я видел, что для этого нужно использовать объект-конструктор HTTP.

Это мой код:

import groovyx.net.http.HTTPBuilder 
import groovyx.net.http.ContentType 
import groovyx.net.http.Method 
import groovyx.net.http.RESTClient 
import groovyx.net.http.HttpResponseDecorator 
     def http = new HTTPBuilder('http://localhost:8086') 
     http.request(GET, JSON) { 
      uri.path = '/RegistrationService/webresources/users/isRegistered' 
      uri.query = [ login:'aa', password: 'bb' ] 

      response.success = { resp, xml -> 
      def xmlResult = xml 
      } 
     } 

У меня есть проблема в том, что в Netbeans у меня есть ошибки для каждого импорта: Невозможно разрешить класс groovyx.net.http.HTTPBuilder Невозможно разрешить класс groovyx .net.http.ContentType ...

Однако я попытался запустить приложение, и это ошибка, когда я запускаю мой код:

| Error 2013-02-25 23:33:32,596 [http-bio-8080-exec-3] ERROR errors.GrailsExceptionResolver - MissingPropertyException occurred when processing request: [POST] /WordGame/user/authenticate 
No such property: uriPath for class: groovyx.net.http.HTTPBuilder$RequestConfigDelegate. Stacktrace follows: 
Message: No such property: uriPath for class: groovyx.net.http.HTTPBuilder$RequestConfigDelegate 
    Line | Method 
->> 21 | doCall in wordgame.UserController$_closure2_closure4 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 425 | doRequest in groovyx.net.http.HTTPBuilder 
| 359 | request . in  '' 
|  19 | doCall in wordgame.UserController$_closure2 
| 195 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter 
|  63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter 
| 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 603 | run  in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 722 | run . . . in java.lang.Thread 

Я установил плагин остального, используя команду: grails install-plugin rest И я уже пытался установить его с помощью интерфейса netbeans, и он говорит мне, что он правильно установлен.

Я видел на некоторых форумах, что мне нужно было зависимостями в файле BuildConfig.groovy подобное:

dependencies { 
    runtime('org.codehaus.groovy.modules.http-builder:http-builder:0.5.1') { 
     excludes 'xalan' 
     excludes 'xml-apis' 
     excludes 'groovy' 
    } 
} 

Но это не решает проблему.

Для информации я использую netbeans 7.2.1 и Grails 2.2.0.

Что-то не так с моим кодом или есть более простой способ запросить веб-сервис?

Заранее спасибо.

+0

Вы попробовали 'grails refresh-dependencies' и' grails clean' после того, как вы установили плагин? Я как-то пробовал это сам, и все было запущено и после того, как я установил плагин 'rest' (кстати, это« лучшая »практика, чтобы объявлять плагины в файле BuildConfig.groovy, вместо того, чтобы устанавливать их через командную строку и имеют зависимости от плагина, написанные в файле 'application.properties' :)). – herom

+0

Я попытался выполнить зависания на графиках и грабли, но ошибка все еще здесь. Я не объявлял плагин в BuildConfig.но я не знаком с Grails, и я не знаю, как это сделать. – Chewbye

+1

Вы не должны использовать 'grails install-plugin' в эти дни, вместо этого вы должны поместить зависимость (' compile ": rest: 0.7" ') в разделе' plugins' вашего 'BuildConfig.groovy' –

ответ

5

Итак, я прочитал Exception вы отправили и ваш фрагмент кода снова, и кажется, что вы упустили переменную req в закрытии http.request(){}. также вы не импортировали метод GET и тип контента TEXT. попробуйте:

import groovyx.net.http.HTTPBuilder 
//import groovyx.net.http.ContentType // this doesn't import ContentType 
//import groovyx.net.http.Method // this doesn't import Method 
import groovyx.net.http.RESTClient 
import groovyx.net.http.HttpResponseDecorator 

// ContentType static import 
import static groovyx.net.http.ContentType.* 
// Method static import 
import static groovyx.net.http.Method.* 

     def http = new HTTPBuilder('http://localhost:8086') 
     http.request(GET, JSON) { req -> // 'req ->' is not present in your code snippet! 
      uri.path = '/RegistrationService/webresources/users/isRegistered' 
      uri.query = [ login:'aa', password: 'bb' ] 

      response.success = { resp, xml -> 
      def xmlResult = xml 
      } 
     } 

также я бы рекомендовал прочитать документацию HTTPBuilder в этом месте: http://groovy.codehaus.org/modules/http-builder/doc/index.html как код хорошо объяснил и некоторые HOWTOs и учебные пособия, также перечислены;)

+0

Спасибо вам за ваш объяснение и ссылку, которую вы поделили. Он работает хорошо. – Chewbye

+0

рад, что я могу вам помочь - держите на грани: D – herom

3

я просто решить мою проблему , Загрузить: http://repository.codehaus.org/org/codehaus/groovy/modules/http-builder/http-builder/0.5.2/

Скопируйте httpBuilder.jar и все банки из каталога зависимостей в файл groovy_installed_directory/lib. Затем перезапустите консоль и повторите попытку.

Надеюсь, это поможет. BR

+0

- groovy_install_directory/lib так же, как webapp/app/lib в проекте grails? –

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