Grails найти / найтиВсе операции не будут работать? - PullRequest
1 голос
/ 01 октября 2010

Я пытаюсь создать приложение Grails, которое может выполнять поиск LDAP.Я следовал нескольким руководствам ( текст ссылки и некоторым другим), но я не боюсь конца.

Соответствующий исходный код: из config.groovy:

ldap {
directories    { 
    dir1 {
        url = "ldap://dc01"
        base = "ou=someou,dc=check,dc=nl"
        userDn = "cn=Administrator,cn=Users,dc=check,dc=nl"
        password = "wowthisisnothepassword"
    }
}

schemas = [
    ldapclient.GldapoSchemaClassForUser
]}

Мой domainclass:

package ldapclient
import gldapo.schema.annotation.GldapoNamingAttribute
import gldapo.schema.annotation.GldapoSynonymFor
import gldapo.schema.annotation.GldapoSchemaFilter

@GldapoSchemaFilter("(objectclass=person)")
class GldapoSchemaClassForUser {
   @GldapoNamingAttribute
   String uid

   @GldapoSynonymFor("cn")
   String name

   @GldapoSynonymFor("mail")
   String email

   @GldapoSynonymFor("uid")
   String username

   @GldapoSynonymFor("fullname")
   String fullName
}

И мой контроллер:

package ldapclient

class AdController {
def defaultAction = "list"

List matches = GldapoSchemaClassForUser.findAll(
    filter: "(name=s*)"
)

def list = {
    [ "adMatches" : matches.list() ]
}}

Хотя моя программа соответствует (насколько я могу судить) тому, что должно работать согласно многимдокументы, я не могу запустить это.Возникла ошибка:

Причина: groovy.lang.MissingMethodException: Нет подписи метода: static ldapclient.GldapoSchemaClassForUser.findAll () применимо для типов аргументов: (java.util.LinkedHashMap) значения:[[filter: (name = s )]] в ldapclient.AdController. (AdController.groovy: 6) *

Любые подсказки, что происходит / не так?Я на Grails 1.2.3 и использую самую последнюю версию плагина LDAP.Проект чистый (только что созданный).

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


Спасибо за ответ;Я просто обновил до Grails 1.3.4 и переместил некоторые файлы.Это помогло, хотя я все еще получаю эту неприятную ошибку:

Error creating bean with name 'ldapclient.AdController': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [ldapclient.AdController]: Constructor threw exception; nested exception is groovy.lang.MissingMethodException: No signature of method: static ldapclient.GldapoSchemaClassForUser.findAll() is applicable for argument types: (java.util.LinkedHashMap) values: [[directory:dir1, filter:(uid=myname,ou=st,ou=ouou,dc=dc,dc=dcdc)]] Possible solutions: findAll(groovy.lang.Closure), find(groovy.lang.Closure)

Ответы [ 3 ]

3 голосов
/ 05 октября 2010

Где находятся ваши классы схемы?У меня этот плагин работает нормально (хотя с Grails 1.3.4).Обратите внимание, что ваша ссылка на плагин является старой страницей.Вот последнее, что я считаю: Grails LDAP Plugin .

Не думайте, что есть большая разница, кроме того, что кажется, что вы можете отбрасывать классы схемы в каталог grails-app / ldap вместо того, чтобы указывать их в Config - я делаю этотак же, как вы со схемами, указанными в конфиге, но, возможно, стоит попробовать их в папке grails-app / ldap?

2 голосов
/ 01 октября 2010

Согласно документации , метод findAll имеет только следующие определения (где Book - образец класса домена):

Book.findAll()
Book.findAll( String query )
Book.findAll( String query, Collection positionalParams )
Book.findAll( String query, Collection positionalParams, Map paginateParams )
Book.findAll( String query, Map namedParams )
Book.findAll( String query, Map namedParams, Map paginateParams )
Book.findAll( Book example )

И ваш код:

List matches = GldapoSchemaClassForUser.findAll(
    filter: "(name=s*)"
)

Можно переписать как:

List matches = GldapoSchemaClassForUser.findAllByNameLike("s%")

Или использовать определение критериев :

List matches = GldapoSchemaClassForUser.list() {
     like("name","s%")
}

Чтобы использовать фильтры - посмотрите Плагин Hibernate-filter

0 голосов
/ 01 февраля 2013

У меня была такая же проблема в течение нескольких дней с использованием Grails 2.2 с плагином ldap 0.8.2. Изучив архив списка рассылки gldapo, я обнаружил, что это происходит потому, что класс схемы не внедряется с поведением Gldapo и, следовательно, методы find / findAll () не разрешаются правильно. Обратитесь к этой теме - http://markmail.org/message/v5ulptrxzfoq4ml7

Я пропустил использование 'import myPkg.SchemaClass' в своем скрипте Graig Config.groovy.

...