Primavera Ldap: Lookup dn senza lanciare un'eccezione se non è lì
-
27-09-2019 - |
Domanda
LdapTemplate nella primavera del LDAP, ho questo codice:
Object object=null;
try{
String dn = "cn=readers,ou=groups,dc=mycompany, dc=com";
object = this.ldapTemplate.lookup(dn);
} catch(final NameNotFoundException e){
// create Object
}
Ma da quando ho letto la mia Joshua Bloch So che le eccezioni non devono essere utilizzati per il controllo di flusso. C'è un modo per cercare un dn per vedere se esiste senza un'eccezione se non lo fa? Ci deve essere, ma non riesco a trovarlo. Sto cercando codice che funziona come questo (o simile):
String dn = "cn=readers,ou=groups,dc=mycompany, dc=com";
Object object=this.ldapTemplate.someMethod(dn);
if(object==null){
// create Object
}
Qualcuno può aiutarmi?
A proposito: solo guardando il JavaDoc non aiuterà. Nessuno dei metodi che tiro NameNotFoundException
dirlo nelle JavaDocs.
Soluzione
Il metodo lookup()
si suppone da utilizzare solo quando si sa per certo che il DN esiste. Questo è normalmente perché hai cercato e trovato un utente o un gruppo in precedenza, e memorizzata nella cache il DN restituito dal server.
Se siete alla ricerca di qualcosa che potrebbe o non potrebbe essere lì, l'API diritto di utilizzo è ldapTemplate.search()
, con un filtro adeguato. Questo un elenco di risultati, e nel caso in cui Nessun risultato restituisce una lista vuota piuttosto che un'eccezione rendimenti.
Altri suggerimenti
In realtà, Primavera ti costringono qui per utilizzare le eccezioni per il controllo del flusso (vale a dire che non è colpa tua, è la loro decisione).
Ho lavorato con LdapTemplate pochi mesi fa e non ho trovato niente di meglio poi prendere tale eccezione e valutare quella situazione come "Utente non trovato".