Secciones

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: 

Entrevistas con los expertos
 

Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:


Un proyecto de:
ImaginaWorks
Campus Escuela de Groovy

Grails

Gldapo

Martin Sanchez - viernes 22/07/2011

Hola 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 

Responder al hilo | Volver al foro "Grails" | Volver a los foros