我正在尝试构建一个可以进行LDAP查找的Grails应用程序。我一直在关注一些指南(link text和其他一些指南),但我还是害怕。
相关源代码: 来自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
]}
我的域类:
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 =小号)]] 在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)
答案 0 :(得分:3)
您的架构类位于何处?我有这个插件正常工作(虽然与Grails 1.3.4)。请注意,您指向该插件的链接是一个旧页面。以下是我相信的最新消息:Grails LDAP Plugin。
除了看起来你可以在 grails-app / ldap 目录中删除模式类而不必在Config中指定它们之外,不要认为有很多不同之处 - 我这样做是以同样的方式正如您在配置中指定的模式,但可能值得在grails-app / ldap文件夹中尝试它们?
答案 1 :(得分:2)
According to documentation,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 plugin
答案 2 :(得分:0)
我使用带有ldap插件0.8.2的grails 2.2,在几天内遇到了同样的问题。在深入了解gldapo邮件列表存档后,我发现这是因为模式类没有注入Gldapo行为,因此未正确解析find / findAll()方法。请参阅此主题 - http://markmail.org/message/v5ulptrxzfoq4ml7
我错过了在grails Config.groovy脚本中使用'import myPkg.SchemaClass'。