The syntax of a filter string is the string representation of LDAP search filters as defined in RFC 1960: A String Representation of LDAP Search Filters (available at http://www.ietf.org/rfc/rfc1960.txt). It should be noted that RFC 2254: A String Representation of LDAP Search Filters (available at http://www.ietf.org/rfc/rfc2254.txt) supersedes RFC 1960 but only adds extensible matching and is not applicable for this API.
The string representation of an LDAP search filter is defined by the following grammar. It uses a prefix format.
<filter> ::= '(' <filtercomp> ')'
<filtercomp> ::= <and> | <or> | <not> | <item>
<and> ::= '&' <filterlist>
<or> ::= '|' <filterlist>
<not> ::= '!' <filter>
<filterlist> ::= <filter> | <filter> <filterlist>
<item> ::= <simple> | <present> | <substring>
<simple> ::= <attr> <filtertype> <value>
<filtertype> ::= <equal> | <approx> | <greater> | <less>
<equal> ::= '='
<approx> ::= '˜='
<greater> ::= '>='
<less> ::= '<='
<present> ::= <attr> '=*'
<substring> ::= <attr> '=' <initial> <any> <final>
<initial> ::= NULL | <value>
<any> ::= '*' <starval>
<starval> ::= NULL | <value> '*' <starval>
<final> ::= NULL | <value>
<attr> is a string representing an attribute, or key, in the
properties objects of the registered services. Attribute names are not case
sensitive; that is cn and CN both refer to the same attribute.
<value> is a string representing the value, or part of one, of
a key in the properties objects of the registered services. If a
<value> must contain one of the characters ' *' or
'(' or ')', these characters should be escaped by preceding
them with the backslash '\' character. Note that although both the
<substring> and <present> productions can produce
the 'attr=*' construct, this construct is used only to denote a
presence filter.
Examples of LDAP filters are:
"(cn=Babs Jensen)"
"(!(cn=Tim Howes))"
"(&(" + Constants.OBJECTCLASS + "=Person)(|(sn=Jensen)(cn=Babs J*)))"
"(o=univ*of*mich*)"
The approximate match (~=) is implementation specific but should at
least ignore case and white space differences. Optional are codes like
soundex or other smart "closeness" comparisons.
Comparison of values is not straightforward. Strings are compared differently than numbers and it is possible for a key to have multiple values. Note that that keys in the match argument must always be strings. The comparison is defined by the object type of the key's value. The following rules apply for comparison:
A filter matches a key that has multiple values if it matches at least one of those values. For example,Note: arrays of primitives are also supported.
Property Value Type Comparison Type String String comparison Integer, Long, Float, Double, Byte, Short, BigInteger, BigDecimal numerical comparison Character character comparison Boolean equality comparisons only [] (array) recursively applied to values Collection recursively applied to values
Dictionary d = new Hashtable();
d.put("cn", new String[] {
"a", "b", "c"
});
d will match (cn=a) and also (cn=b)
A filter component that references a key having an unrecognizable data type
will evaluate to false .
| Modifier and Type | Class and Description |
|---|---|
| pack-priv static class | |
| pack-priv static class | |
| private static class | FilterImpl.
This Map is used for case-insensitive key lookup during filter evaluation. |
| private static class | FilterImpl.
This Map is used for key lookup during filter evaluation. |
| pack-priv static class | |
| pack-priv static class | |
| pack-priv abstract static class | |
| pack-priv static class | |
| pack-priv static class | |
| pack-priv static class | |
| private static class | FilterImpl.
Parser class for OSGi filter strings. |
| pack-priv static class | |
| private static class | FilterImpl.
This Map is used for key lookup from a ServiceReference during filter evaluation. |
| pack-priv static class |
| Modifier and Type | Field and Description |
|---|---|
| private transient String |
| Access | Constructor and Description |
|---|---|
| pack-priv |
| Modifier and Type | Method and Description |
|---|---|
| pack-priv static FilterImpl | |
| public boolean | Returns: If the other object is aFilter object, then returns the
result of calling this.toString().equals(obj.toString();
false otherwise.The object to compare against this obj)Filter.Overrides java. Implements org. Compares this |
| public int | Returns: The hashCode of thisFilter.Overrides java. Implements org. Returns the hashCode for this |
| public boolean | Returns: true if the service's properties match this
Filter; false otherwise.The reference to the service whose properties are used
in the match. reference)Implements org. Filter using a service's properties. |
| public boolean | Returns: true if the Dictionary's values match this
filter; false otherwise.The dictionary)Dictionary whose key/value pairs are used
in the match.Implements org. Filter using a |
| public boolean | Returns: true if the Dictionary's values match this
filter; false otherwise.The dictionary)Dictionary whose key/value pairs are used
in the match.Implements org. Filter using a |
| public boolean | Returns: true if the Map's values match this filter;
false otherwise.The map)Map whose key/value pairs are used in the match.
Maps with null key or values are not supported. A
null value is considered not present to the filter.Implements org. Filter using a |
| pack-priv abstract boolean | |
| pack-priv abstract StringBuilder | Returns: ThisFilter's filter string.Returns this |
| public String | Returns: ThisFilter's filter string.Overrides java. Implements org. Returns this |