Programación en castellano Añadir una dirección | Buscador | Cursos | Artículos | Foros | Formación

Sistema de Nombrado en Java (JNDI) [Parte I]
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


Manejo de Caracteres Especiales

Una convención de nombrado, como la del LDAP o la del sistema de ficheros, normalmente tiene metacaracters. Por ejemplo, en LDAP, si uno de los siguientes caracteres aparece en el nombre, debe estár precedido por el caracter de escape, la barra invertida("\").

  • Un espacio o un caracter "#" que ocurren al principio del string
  • Un caracter espacio que ocurre al final del string
  • Uo de los caracteres ",", "+", """, "\", "<", ">" o ";"

Cuando estámos especificando un nombre a uno de los métodos de Context, no sólo debemos prestar atención a los caracteres especiales y a las convenciones de nombrado del sistema de nombres subyacente. Tambíen debemos prestar atención a la síntaxis de nombres mixtos de JNDI, que también define caracteres especuales. La cambinación de las dos síntaxis podría tratar con muchos niveles de escape.

Por ejemplo, supongamos que tenemos un atributo "cn" cuyo valor contiene un caracter de barra invertida.

backslash\a

El LDAP requiere que el caracter de barra invertida de un nombre sea escapado.

Por lo tanto cuando usemos este atributo como un nombre LDAP, deberemos preceder el caracter de barra invertida en su valor con otro caracter de barra invertida, de esta forma.

cn=backslash\\a

El caracter de barra invertida también es un caracter especial JNDI, por eso si suministramos este nombre string como un nombre mixto, debemos escapar las barras invertidas, de nuevo precediendo a cada caracter de barra invertida.

cn=backslash\\\\a

Si especificamos esto como un literal en el lenguaje de programación Java, debemos seguir los requerimientos del lenguaje Java y escapar las barras invertidas dentro de un string literal con otra barra invertida.

String cname = "cn=backslash\\\\\\\\a";

Nombres String y Nombres Mixtos

Necesitamos tener en cuenta que los nombres string que pasamos a los métodos de Context son nombres mixtos. Para evitar cualquier sorpresa si un nombre contiene caracteres especiales que podrían entrar en conflicto con la síntaxis de nombres mixtos JNDI, deberíamos usar los métodos de Context que aceptan un Name.

Hay dos formas disponibles para hacer esto. La primera forma es usar un CompositeName.

Creamos un objeto CompositeName y le añadimos el nombre específico del sistema de nombres (como un nombre LDAP). Aquí hay un ejemplo.

String dn = ...; // An LDAP distinguished name
Name composite = new CompositeName().add(dn);
Object obj = ctx.lookup(composite);

Aplicando esta técnica al anterior ejemplo de nombre LDAP, ya no necesitaríamos añadir manualmente escapes para la síntaxis JNDI porque los manejaría automáticamente la clase CompositeName:

Name composite = new CompositeName().add("cn=backslash\\\\a");
Object obj = ctx.lookup(composite);

La segunda forma es usar un nombre compuesto. Creamos un nombre compuesto convirtiendo el nombre especifico del sistema de nombres (como un nombre LDAP).

Aquí tenemos un ejemplo.

String dn = ...; // An LDAP distinguished name
NameParser ldapParser = ctx.getNameParser("");
Name compound = ldapParser.parse(dn);
Object obj = ctx.lookup(compound);

Aplicando esta técnica al nombre LDAP del ejemplo anterior, no necesitariamos añadir escapes para la síntaxis JNDI porque no estamos usando nombres mixtos JNDI.

Name compound = ldapParser.parse("cn=backslash\\\\a");
Object obj = ctx.lookup(compound);

Principio Página
© 1999-2002, Programación en castellano, s.l.
Contacto - Datos legales

ReD Internet: Hospedaje Web | envio sms gratis | Salvapantallas | Fondos de Escritorio, famosas | melodias moviles gratis| Gratis