2009-06-22 6 views
3

Ich bin auf der Suche nach einer eigenständigen Java-Bibliothek, die es mir ermöglicht, Filterausdrücke im LDAP-Stil zu analysieren. Gibt es so etwas, oder ist es ratsam, stattdessen ANTLR zu verwenden und es selbst zu erstellen?Gibt es eine eigenständige Java-Bibliothek, die LDAP-Syntaxanalyse bietet?

Als Hintergrund: der Filter selbst ist über ein Netzwerk eingereicht, und ich möchte sagen, die entsprechenden Ruhezustand Kriterien. Ich mache nichts mit LDAP!

Alle anderen Ideen für eine Technologie unabhängige Lösung zur Übertragung und Transformation von benutzerdefinierten Abfragen werden ebenfalls geschätzt.

Antwort

2

können Sie die LDAP-Bibliothek geteilt Apache Directory-Servers verwenden.

Es ist in Maven bei

<dependency> 
    <groupId>org.apache.directory.shared</groupId> 
    <artifactId>shared-ldap</artifactId> 
    <version>0.9.15</version> 
</dependency> 

Und Sie können es gerne verwenden:

final ExprNode filter = FilterParser.parse(filterString); 
+0

Ich kam schließlich um es zu versuchen, und es funktioniert ganz gut. – Mauli

0

Die einzige LDAP-Parsing-Bibliothek, die ich kenne, sind die .NET-System.DirectoryServices. * Theoretisch sollten Sie diese Bibliothek in Mono verwenden können, um Technologieunabhängigkeit zu erhalten (anders als von Mono oder .net selbst).

0

Haben Sie sich bei jldap als Teil von OpenLDAP angesehen?

Die source is available, und es gibt Klassen zum Parsing von LDAP-URLs und Suchausdrücke. Es ist mehr als Sie benötigen, aber Sie können möglicherweise nur die Objekte verwenden, ohne sie tatsächlich für einen LDAP-Server auszuführen, wenn Sie das möchten.

1

Sie könnten auch mit Apache directory server entweder für die Verwendung einiger seiner Klassen wie lavinio Vorschlag für OpenLDAP oder um es als Teil Ihrer Anwendung einbetten.

0

um zu verdeutlichen, setzen Sie darauf, dass sie LDAP-Abfragen sind, wenn Sie nicht versuchen, ldap abzufragen.

haben Sie sich so etwas angesehen?

http://josql.sourceforge.net/

+0

interessant, aber nicht das, was ich suche. In einem Fall frage ich tatsächlich Java-Objekte direkt ab, aber ich benutze auch dieselbe Abfrage, um eine SQL- oder Hibernate-Abfrage zu erstellen. – Mauli

1

OpenDS hat eine statische Methode für eine Klasse namens LDAPFilter genannt, einfach, dekodieren, die einen String-Argument, etwa so:

LDAPFilter parsed = LDAPFilter.decode(filter); 

Die javadoc ist here.

Es ist dem FilterParser von Apache DS sehr ähnlich, obwohl das Arbeiten mit dem Ergebnis ein wenig anders ist, da es keine echte wesentliche Vererbungshierarchie gibt. Ein Vorteil, den ich gefunden habe, war, dass er die Syntax der erweiterbaren übereinstimmenden Regeln nicht neu geschrieben hat. Wenn Sie dies als eine Möglichkeit betrachten, Filter zu validieren und zu normalisieren, sollten Sie daran denken.

Ein Nachteil ist, dass beide Parser Leerzeichen erwarten vorher herausgefiltert werden, so stellen Sie sicher, dass Sie so etwas wie dies auf einem beliebigen Eingabestring laufen vorher:

filter.replaceAll("\\s?([\\(\\|&!=:\\)])\\s?", "$1"); 

Hoffnung, das hilft.

Verwandte Themen