Lo + Leído
Eventos destacados
Artículos para tus primeros pasos
Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos:
- Introducción a Groovy, parte 1 (Andrés Almiray)
- Introducción a Groovy, parte 2 (Andrés Almiray)
- Introducción a Groovy, parte 3 (Andrés Almiray)
- Introducción a Grails (Material Seminario ImaginaWorks)
Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:
Grails
Gldapo
Martin Sanchez - viernes 22/07/2011Hola a todos.
Estoy peleando con el plugin de Gldapo para acceder a un directorio ldap y gestionar las entradas.
El caso es que la documentación brilla por su ausencia, por ahora he conseguido conectar, leer y modificar entradas, pero a la hora de insertar me da un error pues el ldap (concretamente ApacheDS) me pide que le pase objetos y la verdad es que no se como mapearlos.
Os dejo el código que llevo hasta ahora, he usado de ejemplo un ldap de marineros de la página de apacheDS.
1 He instalado el plugin de Gldapo
2 Configuro config.groovy
//Configuration for LDAP
ldap {
directories {
sevenSeas {
defaultDirectory = true
url = "ldap://localhost:10389"
userDn = "uid=admin,ou=system"
password = "mipass"
base = "o=sevenSeas"
searchControls {
countLimit = 40
timeLimit = 600
searchScope = "subtree"
}
}
}
schemas = [
com.empresa.proyecto.Sailor
]
Creo el objeto de mapeo
package com.empresa.proyecto
import gldapo.schema.annotation.GldapoNamingAttribute
import gldapo.schema.annotation.GldapoSchemaFilter;
import gldapo.schema.annotation.GldapoSynonymFor
@GldapoSchemaFilter("(objectclass=organizationalPerson)")
class Sailor {
@GldapoNamingAttribute
@GldapoSynonymFor("cn")
String name
@GldapoSynonymFor("sn")
String surname
@GldapoSynonymFor("description")
String description
String mail
//String objectclass
}
En un control accedo, leo y modifico
import gldapo.entry.GldapoEntry
class UserController {
List matches2 = Sailor.findAll(directory: "sevenSeas")
Sailor s1;
def algo = {
s1 = matches2.get(0)
render s1.description + " " + s1.name + " " + s1.surname + " " + s1.mail;
s1.description = s1.description + " X"
s1.save()
// Esto es lo que falla
// Sailor s2 = new Sailor()
// s2.name = "Perico"
// s2.surname = "Delgado"
// s2.description = "Ganador del Tour de Francia"
// s2.mail = "perico.delgado@xx.com"
// s2.save()
}
}
El errorazo a continuación, entiendo perfectamente el error, pero no se me ocurre ni encuentro como mapear los objetos que les hace falta al ldap
Stacktrace follows:
javax.naming.directory.SchemaViolationException: [LDAP: error code 65 - OBJECT_CLASS_VIOLATION: failed for Add Request :
ClientEntry
dn: cn=Perico,o=sevenSeas
mail: perico.delgado@xx.com
sn: Delgado
cn: Perico
description: Ganador del Tour de Francia
: ERR_60 Entry cn=Perico,o=sevenSeas does not contain a STRUCTURAL ObjectClass]; remaining name 'cn=Perico'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3072)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2987)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2794)
at com.sun.jndi.ldap.LdapCtx.c_bind(LdapCtx.java:397)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_bind(ComponentDirContext.java:277)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.bind(PartialCompositeDirContext.java:197)
at javax.naming.directory.InitialDirContext.bind(InitialDirContext.java:163)
at gldapo.GldapoDirectory.createEntry(GldapoDirectory.groovy:205)
at gldapo.schema.GldapoSchemaClassInjecto$_closure21.doCall(GldapoSchemaClassInjecto.groovy:252)
at gldapo.schema.GldapoSchemaClassInjecto$_closure23.doCall(GldapoSchemaClassInjecto.groovy:278)
at com.mangirkart.ldap.UserController$_closure1.doCall(UserController.groovy:32)
at com.mangirkart.ldap.UserController$_closure1.doCall(UserController.groovy)
at java.lang.Thread.run(Thread.java:662)
2011-07-22 15:51:08,734 [http-8080-3] ERROR errors.GrailsExceptionResolver - Exception occurred when processing request: [GET] /mk-um-ldap/user/algo
Stacktrace follows:
javax.naming.directory.SchemaViolationException: [LDAP: error code 65 - OBJECT_CLASS_VIOLATION: failed for Add Request :
ClientEntry
dn: cn=Perico,o=sevenSeas
mail: perico.delgado@xx.com
sn: Delgado
cn: Perico
description: Ganador del Tour de Francia
: ERR_60 Entry cn=Perico,o=sevenSeas does not contain a STRUCTURAL ObjectClass]; remaining name 'cn=Perico'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3072)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2987)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2794)
at com.sun.jndi.ldap.LdapCtx.c_bind(LdapCtx.java:397)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_bind(ComponentDirContext.java:277)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.bind(PartialCompositeDirContext.java:197)
at javax.naming.directory.InitialDirContext.bind(InitialDirContext.java:163)
at gldapo.GldapoDirectory.createEntry(GldapoDirectory.groovy:205)
at gldapo.schema.GldapoSchemaClassInjecto$_closure21.doCall(GldapoSchemaClassInjecto.groovy:252)
at gldapo.schema.GldapoSchemaClassInjecto$_closure23.doCall(GldapoSchemaClassInjecto.groovy:278)
at com.mangirkart.ldap.UserController$_closure1.doCall(UserController.groovy:32)
at com.mangirkart.ldap.UserController$_closure1.doCall(UserController.groovy)
at java.lang.Thread.run(Thread.java:662)
2011-07-22 15:51:09,433 [http-8080-3] ERROR errors.GrailsExceptionResolver - Exception occurred when processing request: [GET] /mk-um-ldap/user/algo
Stacktrace follows:
javax.naming.directory.SchemaViolationException: [LDAP: error code 65 - OBJECT_CLASS_VIOLATION: failed for Add Request :
ClientEntry
dn: cn=Perico,o=sevenSeas
mail: perico.delgado@xx.com
sn: Delgado
cn: Perico
description: Ganador del Tour de Francia
: ERR_60 Entry cn=Perico,o=sevenSeas does not contain a STRUCTURAL ObjectClass]; remaining name 'cn=Perico'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3072)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2987)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2794)
at com.sun.jndi.ldap.LdapCtx.c_bind(LdapCtx.java:397)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_bind(ComponentDirContext.java:277)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.bind(PartialCompositeDirContext.java:197)
at javax.naming.directory.InitialDirContext.bind(InitialDirContext.java:163)
at gldapo.GldapoDirectory.createEntry(GldapoDirectory.groovy:205)
at gldapo.schema.GldapoSchemaClassInjecto$_closure21.doCall(GldapoSchemaClassInjecto.groovy:252)
at gldapo.schema.GldapoSchemaClassInjecto$_closure23.doCall(GldapoSchemaClassInjecto.groovy:278)
at com.mangirkart.ldap.UserController$_closure1.doCall(UserController.groovy:32)
at com.mangirkart.ldap.UserController$_closure1.doCall(UserController.groovy)
at java.lang.Thread.run(Thread.java:662)
Si alguien es tan amable de echarme un cable,... es un verdadero infierno el Gldapo porque apenas tiene documentación
gracias y un saludo
martin