|
1 /* |
|
2 * Copyright 1999-2005 Sun Microsystems, Inc. All Rights Reserved. |
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
4 * |
|
5 * This code is free software; you can redistribute it and/or modify it |
|
6 * under the terms of the GNU General Public License version 2 only, as |
|
7 * published by the Free Software Foundation. Sun designates this |
|
8 * particular file as subject to the "Classpath" exception as provided |
|
9 * by Sun in the LICENSE file that accompanied this code. |
|
10 * |
|
11 * This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 * version 2 for more details (a copy is included in the LICENSE file that |
|
15 * accompanied this code). |
|
16 * |
|
17 * You should have received a copy of the GNU General Public License version |
|
18 * 2 along with this work; if not, write to the Free Software Foundation, |
|
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
20 * |
|
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
|
22 * CA 95054 USA or visit www.sun.com if you need additional information or |
|
23 * have any questions. |
|
24 */ |
|
25 |
|
26 package javax.naming.directory; |
|
27 |
|
28 import javax.naming.*; |
|
29 |
|
30 /** |
|
31 * The directory service interface, containing |
|
32 * methods for examining and updating attributes |
|
33 * associated with objects, and for searching the directory. |
|
34 * <p> |
|
35 * <h4>Names</h4> |
|
36 * Each name passed as an argument to a <tt>DirContext</tt> method is relative |
|
37 * to that context. The empty name is used to name the context itself. |
|
38 * The name parameter may never be null. |
|
39 * <p> |
|
40 * Most of the methods have overloaded versions with one taking a |
|
41 * <code>Name</code> parameter and one taking a <code>String</code>. |
|
42 * These overloaded versions are equivalent in that if |
|
43 * the <code>Name</code> and <code>String</code> parameters are just |
|
44 * different representations of the same name, then the overloaded |
|
45 * versions of the same methods behave the same. |
|
46 * In the method descriptions below, only one version is documented. |
|
47 * The second version instead has a link to the first: the same |
|
48 * documentation applies to both. |
|
49 * <p> |
|
50 * See <tt>Context</tt> for a discussion on the interpretation of the |
|
51 * name argument to the <tt>Context</tt> methods. These same rules |
|
52 * apply to the name argument to the <tt>DirContext</tt> methods. |
|
53 * <p> |
|
54 * <h4>Attribute Models</h4> |
|
55 * There are two basic models of what attributes should be |
|
56 * associated with. First, attributes may be directly associated with a |
|
57 * DirContext object. |
|
58 * In this model, an attribute operation on the named object is |
|
59 * roughly equivalent |
|
60 * to a lookup on the name (which returns the DirContext object), |
|
61 * followed by the attribute operation invoked on the DirContext object |
|
62 * in which the caller supplies an empty name. The attributes can be viewed |
|
63 * as being stored along with the object (note that this does not imply that |
|
64 * the implementation must do so). |
|
65 * <p> |
|
66 * The second model is that attributes are associated with a |
|
67 * name (typically an atomic name) in a DirContext. |
|
68 * In this model, an attribute operation on the named object is |
|
69 * roughly equivalent to a lookup on the name of the parent DirContext of the |
|
70 * named object, followed by the attribute operation invoked on the parent |
|
71 * in which the caller supplies the terminal atomic name. |
|
72 * The attributes can be viewed as being stored in the parent DirContext |
|
73 * (again, this does not imply that the implementation must do so). |
|
74 * Objects that are not DirContexts can have attributes, as long as |
|
75 * their parents are DirContexts. |
|
76 * <p> |
|
77 * JNDI support both of these models. |
|
78 * It is up to the individual service providers to decide where to |
|
79 * "store" attributes. |
|
80 * JNDI clients are safest when they do not make assumptions about |
|
81 * whether an object's attributes are stored as part of the object, or stored |
|
82 * within the parent object and associated with the object's name. |
|
83 * <p> |
|
84 * <h4>Attribute Type Names</h4> |
|
85 * In the <tt>getAttributes()</tt> and <tt>search()</tt> methods, |
|
86 * you can supply the attributes to return by supplying a list of |
|
87 * attribute names (strings). |
|
88 * The attributes that you get back might not have the same names as the |
|
89 * attribute names you have specified. This is because some directories |
|
90 * support features that cause them to return other attributes. Such |
|
91 * features include attribute subclassing, attribute name synonyms, and |
|
92 * attribute language codes. |
|
93 * <p> |
|
94 * In attribute subclassing, attributes are defined in a class hierarchy. |
|
95 * In some directories, for example, the "name" attribute might be the |
|
96 * superclass of all name-related attributes, including "commonName" and |
|
97 * "surName". Asking for the "name" attribute might return both the |
|
98 * "commonName" and "surName" attributes. |
|
99 * <p> |
|
100 * With attribute type synonyms, a directory can assign multiple names to |
|
101 * the same attribute. For example, "cn" and "commonName" might both |
|
102 * refer to the same attribute. Asking for "cn" might return the |
|
103 * "commonName" attribute. |
|
104 * <p> |
|
105 * Some directories support the language codes for attributes. |
|
106 * Asking such a directory for the "description" attribute, for example, |
|
107 * might return all of the following attributes: |
|
108 * <ul> |
|
109 * <li>description |
|
110 * <li>description;lang-en |
|
111 * <li>description;lang-de |
|
112 * <li>description;lang-fr |
|
113 * </ul> |
|
114 * |
|
115 * <p> |
|
116 *<h4>Operational Attributes</h4> |
|
117 *<p> |
|
118 * Some directories have the notion of "operational attributes" which are |
|
119 * attributes associated with a directory object for administrative |
|
120 * purposes. An example of operational attributes is the access control |
|
121 * list for an object. |
|
122 * <p> |
|
123 * In the <tt>getAttributes()</tt> and <tt>search()</tt> methods, |
|
124 * you can specify that all attributes associated with the requested objects |
|
125 * be returned by supply <tt>null</tt> as the list of attributes to return. |
|
126 * The attributes returned do <em>not</em> include operational attributes. |
|
127 * In order to retrieve operational attributes, you must name them explicitly. |
|
128 * |
|
129 * <p> |
|
130 * <h4>Named Context</h4> |
|
131 * <p> |
|
132 * There are certain methods in which the name must resolve to a context |
|
133 * (for example, when searching a single level context). The documentation |
|
134 * of such methods |
|
135 * use the term <em>named context</em> to describe their name parameter. |
|
136 * For these methods, if the named object is not a DirContext, |
|
137 * <code>NotContextException</code> is thrown. |
|
138 * Aside from these methods, there is no requirement that the |
|
139 * <em>named object</em> be a DirContext. |
|
140 *<p> |
|
141 *<h4>Parameters</h4> |
|
142 *<p> |
|
143 * An <tt>Attributes</tt>, <tt>SearchControls</tt>, or array object |
|
144 * passed as a parameter to any method will not be modified by the |
|
145 * service provider. The service provider may keep a reference to it |
|
146 * for the duration of the operation, including any enumeration of the |
|
147 * method's results and the processing of any referrals generated. |
|
148 * The caller should not modify the object during this time. |
|
149 * An <tt>Attributes</tt> object returned by any method is owned by |
|
150 * the caller. The caller may subsequently modify it; the service |
|
151 * provider will not. |
|
152 *<p> |
|
153 *<h4>Exceptions</h4> |
|
154 *<p> |
|
155 * All the methods in this interface can throw a NamingException or |
|
156 * any of its subclasses. See NamingException and their subclasses |
|
157 * for details on each exception. |
|
158 * |
|
159 * @author Rosanna Lee |
|
160 * @author Scott Seligman |
|
161 * @author R. Vasudevan |
|
162 * |
|
163 * @see javax.naming.Context |
|
164 * @since 1.3 |
|
165 */ |
|
166 |
|
167 public interface DirContext extends Context { |
|
168 |
|
169 /** |
|
170 * Retrieves all of the attributes associated with a named object. |
|
171 * See the class description regarding attribute models, attribute |
|
172 * type names, and operational attributes. |
|
173 * |
|
174 * @param name |
|
175 * the name of the object from which to retrieve attributes |
|
176 * @return the set of attributes associated with <code>name</code>. |
|
177 * Returns an empty attribute set if name has no attributes; |
|
178 * never null. |
|
179 * @throws NamingException if a naming exception is encountered |
|
180 * |
|
181 * @see #getAttributes(String) |
|
182 * @see #getAttributes(Name, String[]) |
|
183 */ |
|
184 public Attributes getAttributes(Name name) throws NamingException; |
|
185 |
|
186 /** |
|
187 * Retrieves all of the attributes associated with a named object. |
|
188 * See {@link #getAttributes(Name)} for details. |
|
189 * |
|
190 * @param name |
|
191 * the name of the object from which to retrieve attributes |
|
192 * @return the set of attributes associated with <code>name</code> |
|
193 * |
|
194 * @throws NamingException if a naming exception is encountered |
|
195 */ |
|
196 public Attributes getAttributes(String name) throws NamingException; |
|
197 |
|
198 /** |
|
199 * Retrieves selected attributes associated with a named object. |
|
200 * See the class description regarding attribute models, attribute |
|
201 * type names, and operational attributes. |
|
202 * |
|
203 * <p> If the object does not have an attribute |
|
204 * specified, the directory will ignore the nonexistent attribute |
|
205 * and return those requested attributes that the object does have. |
|
206 * |
|
207 * <p> A directory might return more attributes than was requested |
|
208 * (see <strong>Attribute Type Names</strong> in the class description), |
|
209 * but is not allowed to return arbitrary, unrelated attributes. |
|
210 * |
|
211 * <p> See also <strong>Operational Attributes</strong> in the class |
|
212 * description. |
|
213 * |
|
214 * @param name |
|
215 * the name of the object from which to retrieve attributes |
|
216 * @param attrIds |
|
217 * the identifiers of the attributes to retrieve. |
|
218 * null indicates that all attributes should be retrieved; |
|
219 * an empty array indicates that none should be retrieved. |
|
220 * @return the requested attributes; never null |
|
221 * |
|
222 * @throws NamingException if a naming exception is encountered |
|
223 */ |
|
224 public Attributes getAttributes(Name name, String[] attrIds) |
|
225 throws NamingException; |
|
226 |
|
227 /** |
|
228 * Retrieves selected attributes associated with a named object. |
|
229 * See {@link #getAttributes(Name, String[])} for details. |
|
230 * |
|
231 * @param name |
|
232 * The name of the object from which to retrieve attributes |
|
233 * @param attrIds |
|
234 * the identifiers of the attributes to retrieve. |
|
235 * null indicates that all attributes should be retrieved; |
|
236 * an empty array indicates that none should be retrieved. |
|
237 * @return the requested attributes; never null |
|
238 * |
|
239 * @throws NamingException if a naming exception is encountered |
|
240 */ |
|
241 public Attributes getAttributes(String name, String[] attrIds) |
|
242 throws NamingException; |
|
243 |
|
244 /** |
|
245 * This constant specifies to add an attribute with the specified values. |
|
246 * <p> |
|
247 * If attribute does not exist, |
|
248 * create the attribute. The resulting attribute has a union of the |
|
249 * specified value set and the prior value set. |
|
250 * Adding an attribute with no value will throw |
|
251 * <code>InvalidAttributeValueException</code> if the attribute must have |
|
252 * at least one value. For a single-valued attribute where that attribute |
|
253 * already exists, throws <code>AttributeInUseException</code>. |
|
254 * If attempting to add more than one value to a single-valued attribute, |
|
255 * throws <code>InvalidAttributeValueException</code>. |
|
256 * <p> |
|
257 * The value of this constant is <tt>1</tt>. |
|
258 * |
|
259 * @see ModificationItem |
|
260 * @see #modifyAttributes |
|
261 */ |
|
262 public final static int ADD_ATTRIBUTE = 1; |
|
263 |
|
264 /** |
|
265 * This constant specifies to replace an attribute with specified values. |
|
266 *<p> |
|
267 * If attribute already exists, |
|
268 * replaces all existing values with new specified values. If the |
|
269 * attribute does not exist, creates it. If no value is specified, |
|
270 * deletes all the values of the attribute. |
|
271 * Removal of the last value will remove the attribute if the attribute |
|
272 * is required to have at least one value. If |
|
273 * attempting to add more than one value to a single-valued attribute, |
|
274 * throws <code>InvalidAttributeValueException</code>. |
|
275 * <p> |
|
276 * The value of this constant is <tt>2</tt>. |
|
277 * |
|
278 * @see ModificationItem |
|
279 * @see #modifyAttributes |
|
280 */ |
|
281 public final static int REPLACE_ATTRIBUTE = 2; |
|
282 |
|
283 /** |
|
284 * This constant specifies to delete |
|
285 * the specified attribute values from the attribute. |
|
286 *<p> |
|
287 * The resulting attribute has the set difference of its prior value set |
|
288 * and the specified value set. |
|
289 * If no values are specified, deletes the entire attribute. |
|
290 * If the attribute does not exist, or if some or all members of the |
|
291 * specified value set do not exist, this absence may be ignored |
|
292 * and the operation succeeds, or a NamingException may be thrown to |
|
293 * indicate the absence. |
|
294 * Removal of the last value will remove the attribute if the |
|
295 * attribute is required to have at least one value. |
|
296 * <p> |
|
297 * The value of this constant is <tt>3</tt>. |
|
298 * |
|
299 * @see ModificationItem |
|
300 * @see #modifyAttributes |
|
301 */ |
|
302 public final static int REMOVE_ATTRIBUTE = 3; |
|
303 |
|
304 /** |
|
305 * Modifies the attributes associated with a named object. |
|
306 * The order of the modifications is not specified. Where |
|
307 * possible, the modifications are performed atomically. |
|
308 * |
|
309 * @param name |
|
310 * the name of the object whose attributes will be updated |
|
311 * @param mod_op |
|
312 * the modification operation, one of: |
|
313 * <code>ADD_ATTRIBUTE</code>, |
|
314 * <code>REPLACE_ATTRIBUTE</code>, |
|
315 * <code>REMOVE_ATTRIBUTE</code>. |
|
316 * @param attrs |
|
317 * the attributes to be used for the modification; may not be null |
|
318 * |
|
319 * @throws AttributeModificationException if the modification cannot |
|
320 * be completed successfully |
|
321 * @throws NamingException if a naming exception is encountered |
|
322 * |
|
323 * @see #modifyAttributes(Name, ModificationItem[]) |
|
324 */ |
|
325 public void modifyAttributes(Name name, int mod_op, Attributes attrs) |
|
326 throws NamingException; |
|
327 |
|
328 /** |
|
329 * Modifies the attributes associated with a named object. |
|
330 * See {@link #modifyAttributes(Name, int, Attributes)} for details. |
|
331 * |
|
332 * @param name |
|
333 * the name of the object whose attributes will be updated |
|
334 * @param mod_op |
|
335 * the modification operation, one of: |
|
336 * <code>ADD_ATTRIBUTE</code>, |
|
337 * <code>REPLACE_ATTRIBUTE</code>, |
|
338 * <code>REMOVE_ATTRIBUTE</code>. |
|
339 * @param attrs |
|
340 * the attributes to be used for the modification; may not be null |
|
341 * |
|
342 * @throws AttributeModificationException if the modification cannot |
|
343 * be completed successfully |
|
344 * @throws NamingException if a naming exception is encountered |
|
345 */ |
|
346 public void modifyAttributes(String name, int mod_op, Attributes attrs) |
|
347 throws NamingException; |
|
348 |
|
349 /** |
|
350 * Modifies the attributes associated with a named object using |
|
351 * an ordered list of modifications. |
|
352 * The modifications are performed |
|
353 * in the order specified. Each modification specifies a |
|
354 * modification operation code and an attribute on which to |
|
355 * operate. Where possible, the modifications are |
|
356 * performed atomically. |
|
357 * |
|
358 * @param name |
|
359 * the name of the object whose attributes will be updated |
|
360 * @param mods |
|
361 * an ordered sequence of modifications to be performed; |
|
362 * may not be null |
|
363 * |
|
364 * @throws AttributeModificationException if the modifications |
|
365 * cannot be completed successfully |
|
366 * @throws NamingException if a naming exception is encountered |
|
367 * |
|
368 * @see #modifyAttributes(Name, int, Attributes) |
|
369 * @see ModificationItem |
|
370 */ |
|
371 public void modifyAttributes(Name name, ModificationItem[] mods) |
|
372 throws NamingException; |
|
373 |
|
374 /** |
|
375 * Modifies the attributes associated with a named object using |
|
376 * an ordered list of modifications. |
|
377 * See {@link #modifyAttributes(Name, ModificationItem[])} for details. |
|
378 * |
|
379 * @param name |
|
380 * the name of the object whose attributes will be updated |
|
381 * @param mods |
|
382 * an ordered sequence of modifications to be performed; |
|
383 * may not be null |
|
384 * |
|
385 * @throws AttributeModificationException if the modifications |
|
386 * cannot be completed successfully |
|
387 * @throws NamingException if a naming exception is encountered |
|
388 */ |
|
389 public void modifyAttributes(String name, ModificationItem[] mods) |
|
390 throws NamingException; |
|
391 |
|
392 /** |
|
393 * Binds a name to an object, along with associated attributes. |
|
394 * If <tt>attrs</tt> is null, the resulting binding will have |
|
395 * the attributes associated with <tt>obj</tt> if <tt>obj</tt> is a |
|
396 * <tt>DirContext</tt>, and no attributes otherwise. |
|
397 * If <tt>attrs</tt> is non-null, the resulting binding will have |
|
398 * <tt>attrs</tt> as its attributes; any attributes associated with |
|
399 * <tt>obj</tt> are ignored. |
|
400 * |
|
401 * @param name |
|
402 * the name to bind; may not be empty |
|
403 * @param obj |
|
404 * the object to bind; possibly null |
|
405 * @param attrs |
|
406 * the attributes to associate with the binding |
|
407 * |
|
408 * @throws NameAlreadyBoundException if name is already bound |
|
409 * @throws InvalidAttributesException if some "mandatory" attributes |
|
410 * of the binding are not supplied |
|
411 * @throws NamingException if a naming exception is encountered |
|
412 * |
|
413 * @see Context#bind(Name, Object) |
|
414 * @see #rebind(Name, Object, Attributes) |
|
415 */ |
|
416 public void bind(Name name, Object obj, Attributes attrs) |
|
417 throws NamingException; |
|
418 |
|
419 /** |
|
420 * Binds a name to an object, along with associated attributes. |
|
421 * See {@link #bind(Name, Object, Attributes)} for details. |
|
422 * |
|
423 * @param name |
|
424 * the name to bind; may not be empty |
|
425 * @param obj |
|
426 * the object to bind; possibly null |
|
427 * @param attrs |
|
428 * the attributes to associate with the binding |
|
429 * |
|
430 * @throws NameAlreadyBoundException if name is already bound |
|
431 * @throws InvalidAttributesException if some "mandatory" attributes |
|
432 * of the binding are not supplied |
|
433 * @throws NamingException if a naming exception is encountered |
|
434 */ |
|
435 public void bind(String name, Object obj, Attributes attrs) |
|
436 throws NamingException; |
|
437 |
|
438 /** |
|
439 * Binds a name to an object, along with associated attributes, |
|
440 * overwriting any existing binding. |
|
441 * If <tt>attrs</tt> is null and <tt>obj</tt> is a <tt>DirContext</tt>, |
|
442 * the attributes from <tt>obj</tt> are used. |
|
443 * If <tt>attrs</tt> is null and <tt>obj</tt> is not a <tt>DirContext</tt>, |
|
444 * any existing attributes associated with the object already bound |
|
445 * in the directory remain unchanged. |
|
446 * If <tt>attrs</tt> is non-null, any existing attributes associated with |
|
447 * the object already bound in the directory are removed and <tt>attrs</tt> |
|
448 * is associated with the named object. If <tt>obj</tt> is a |
|
449 * <tt>DirContext</tt> and <tt>attrs</tt> is non-null, the attributes |
|
450 * of <tt>obj</tt> are ignored. |
|
451 * |
|
452 * @param name |
|
453 * the name to bind; may not be empty |
|
454 * @param obj |
|
455 * the object to bind; possibly null |
|
456 * @param attrs |
|
457 * the attributes to associate with the binding |
|
458 * |
|
459 * @throws InvalidAttributesException if some "mandatory" attributes |
|
460 * of the binding are not supplied |
|
461 * @throws NamingException if a naming exception is encountered |
|
462 * |
|
463 * @see Context#bind(Name, Object) |
|
464 * @see #bind(Name, Object, Attributes) |
|
465 */ |
|
466 public void rebind(Name name, Object obj, Attributes attrs) |
|
467 throws NamingException; |
|
468 |
|
469 /** |
|
470 * Binds a name to an object, along with associated attributes, |
|
471 * overwriting any existing binding. |
|
472 * See {@link #rebind(Name, Object, Attributes)} for details. |
|
473 * |
|
474 * @param name |
|
475 * the name to bind; may not be empty |
|
476 * @param obj |
|
477 * the object to bind; possibly null |
|
478 * @param attrs |
|
479 * the attributes to associate with the binding |
|
480 * |
|
481 * @throws InvalidAttributesException if some "mandatory" attributes |
|
482 * of the binding are not supplied |
|
483 * @throws NamingException if a naming exception is encountered |
|
484 */ |
|
485 public void rebind(String name, Object obj, Attributes attrs) |
|
486 throws NamingException; |
|
487 |
|
488 /** |
|
489 * Creates and binds a new context, along with associated attributes. |
|
490 * This method creates a new subcontext with the given name, binds it in |
|
491 * the target context (that named by all but terminal atomic |
|
492 * component of the name), and associates the supplied attributes |
|
493 * with the newly created object. |
|
494 * All intermediate and target contexts must already exist. |
|
495 * If <tt>attrs</tt> is null, this method is equivalent to |
|
496 * <tt>Context.createSubcontext()</tt>. |
|
497 * |
|
498 * @param name |
|
499 * the name of the context to create; may not be empty |
|
500 * @param attrs |
|
501 * the attributes to associate with the newly created context |
|
502 * @return the newly created context |
|
503 * |
|
504 * @throws NameAlreadyBoundException if the name is already bound |
|
505 * @throws InvalidAttributesException if <code>attrs</code> does not |
|
506 * contain all the mandatory attributes required for creation |
|
507 * @throws NamingException if a naming exception is encountered |
|
508 * |
|
509 * @see Context#createSubcontext(Name) |
|
510 */ |
|
511 public DirContext createSubcontext(Name name, Attributes attrs) |
|
512 throws NamingException; |
|
513 |
|
514 /** |
|
515 * Creates and binds a new context, along with associated attributes. |
|
516 * See {@link #createSubcontext(Name, Attributes)} for details. |
|
517 * |
|
518 * @param name |
|
519 * the name of the context to create; may not be empty |
|
520 * @param attrs |
|
521 * the attributes to associate with the newly created context |
|
522 * @return the newly created context |
|
523 * |
|
524 * @throws NameAlreadyBoundException if the name is already bound |
|
525 * @throws InvalidAttributesException if <code>attrs</code> does not |
|
526 * contain all the mandatory attributes required for creation |
|
527 * @throws NamingException if a naming exception is encountered |
|
528 */ |
|
529 public DirContext createSubcontext(String name, Attributes attrs) |
|
530 throws NamingException; |
|
531 |
|
532 // -------------------- schema operations |
|
533 |
|
534 /** |
|
535 * Retrieves the schema associated with the named object. |
|
536 * The schema describes rules regarding the structure of the namespace |
|
537 * and the attributes stored within it. The schema |
|
538 * specifies what types of objects can be added to the directory and where |
|
539 * they can be added; what mandatory and optional attributes an object |
|
540 * can have. The range of support for schemas is directory-specific. |
|
541 * |
|
542 * <p> This method returns the root of the schema information tree |
|
543 * that is applicable to the named object. Several named objects |
|
544 * (or even an entire directory) might share the same schema. |
|
545 * |
|
546 * <p> Issues such as structure and contents of the schema tree, |
|
547 * permission to modify to the contents of the schema |
|
548 * tree, and the effect of such modifications on the directory |
|
549 * are dependent on the underlying directory. |
|
550 * |
|
551 * @param name |
|
552 * the name of the object whose schema is to be retrieved |
|
553 * @return the schema associated with the context; never null |
|
554 * @throws OperationNotSupportedException if schema not supported |
|
555 * @throws NamingException if a naming exception is encountered |
|
556 */ |
|
557 public DirContext getSchema(Name name) throws NamingException; |
|
558 |
|
559 /** |
|
560 * Retrieves the schema associated with the named object. |
|
561 * See {@link #getSchema(Name)} for details. |
|
562 * |
|
563 * @param name |
|
564 * the name of the object whose schema is to be retrieved |
|
565 * @return the schema associated with the context; never null |
|
566 * @throws OperationNotSupportedException if schema not supported |
|
567 * @throws NamingException if a naming exception is encountered |
|
568 */ |
|
569 public DirContext getSchema(String name) throws NamingException; |
|
570 |
|
571 /** |
|
572 * Retrieves a context containing the schema objects of the |
|
573 * named object's class definitions. |
|
574 *<p> |
|
575 * One category of information found in directory schemas is |
|
576 * <em>class definitions</em>. An "object class" definition |
|
577 * specifies the object's <em>type</em> and what attributes (mandatory |
|
578 * and optional) the object must/can have. Note that the term |
|
579 * "object class" being referred to here is in the directory sense |
|
580 * rather than in the Java sense. |
|
581 * For example, if the named object is a directory object of |
|
582 * "Person" class, <tt>getSchemaClassDefinition()</tt> would return a |
|
583 * <tt>DirContext</tt> representing the (directory's) object class |
|
584 * definition of "Person". |
|
585 *<p> |
|
586 * The information that can be retrieved from an object class definition |
|
587 * is directory-dependent. |
|
588 *<p> |
|
589 * Prior to JNDI 1.2, this method |
|
590 * returned a single schema object representing the class definition of |
|
591 * the named object. |
|
592 * Since JNDI 1.2, this method returns a <tt>DirContext</tt> containing |
|
593 * all of the named object's class definitions. |
|
594 * |
|
595 * @param name |
|
596 * the name of the object whose object class |
|
597 * definition is to be retrieved |
|
598 * @return the <tt>DirContext</tt> containing the named |
|
599 * object's class definitions; never null |
|
600 * |
|
601 * @throws OperationNotSupportedException if schema not supported |
|
602 * @throws NamingException if a naming exception is encountered |
|
603 */ |
|
604 public DirContext getSchemaClassDefinition(Name name) |
|
605 throws NamingException; |
|
606 |
|
607 /** |
|
608 * Retrieves a context containing the schema objects of the |
|
609 * named object's class definitions. |
|
610 * See {@link #getSchemaClassDefinition(Name)} for details. |
|
611 * |
|
612 * @param name |
|
613 * the name of the object whose object class |
|
614 * definition is to be retrieved |
|
615 * @return the <tt>DirContext</tt> containing the named |
|
616 * object's class definitions; never null |
|
617 * |
|
618 * @throws OperationNotSupportedException if schema not supported |
|
619 * @throws NamingException if a naming exception is encountered |
|
620 */ |
|
621 public DirContext getSchemaClassDefinition(String name) |
|
622 throws NamingException; |
|
623 |
|
624 // -------------------- search operations |
|
625 |
|
626 /** |
|
627 * Searches in a single context for objects that contain a |
|
628 * specified set of attributes, and retrieves selected attributes. |
|
629 * The search is performed using the default |
|
630 * <code>SearchControls</code> settings. |
|
631 * <p> |
|
632 * For an object to be selected, each attribute in |
|
633 * <code>matchingAttributes</code> must match some attribute of the |
|
634 * object. If <code>matchingAttributes</code> is empty or |
|
635 * null, all objects in the target context are returned. |
|
636 *<p> |
|
637 * An attribute <em>A</em><sub>1</sub> in |
|
638 * <code>matchingAttributes</code> is considered to match an |
|
639 * attribute <em>A</em><sub>2</sub> of an object if |
|
640 * <em>A</em><sub>1</sub> and <em>A</em><sub>2</sub> have the same |
|
641 * identifier, and each value of <em>A</em><sub>1</sub> is equal |
|
642 * to some value of <em>A</em><sub>2</sub>. This implies that the |
|
643 * order of values is not significant, and that |
|
644 * <em>A</em><sub>2</sub> may contain "extra" values not found in |
|
645 * <em>A</em><sub>1</sub> without affecting the comparison. It |
|
646 * also implies that if <em>A</em><sub>1</sub> has no values, then |
|
647 * testing for a match is equivalent to testing for the presence |
|
648 * of an attribute <em>A</em><sub>2</sub> with the same |
|
649 * identifier. |
|
650 *<p> |
|
651 * The precise definition of "equality" used in comparing attribute values |
|
652 * is defined by the underlying directory service. It might use the |
|
653 * <code>Object.equals</code> method, for example, or might use a schema |
|
654 * to specify a different equality operation. |
|
655 * For matching based on operations other than equality (such as |
|
656 * substring comparison) use the version of the <code>search</code> |
|
657 * method that takes a filter argument. |
|
658 * <p> |
|
659 * When changes are made to this <tt>DirContext</tt>, |
|
660 * the effect on enumerations returned by prior calls to this method |
|
661 * is undefined. |
|
662 *<p> |
|
663 * If the object does not have the attribute |
|
664 * specified, the directory will ignore the nonexistent attribute |
|
665 * and return the requested attributes that the object does have. |
|
666 *<p> |
|
667 * A directory might return more attributes than was requested |
|
668 * (see <strong>Attribute Type Names</strong> in the class description), |
|
669 * but is not allowed to return arbitrary, unrelated attributes. |
|
670 *<p> |
|
671 * See also <strong>Operational Attributes</strong> in the class |
|
672 * description. |
|
673 * |
|
674 * @param name |
|
675 * the name of the context to search |
|
676 * @param matchingAttributes |
|
677 * the attributes to search for. If empty or null, |
|
678 * all objects in the target context are returned. |
|
679 * @param attributesToReturn |
|
680 * the attributes to return. null indicates that |
|
681 * all attributes are to be returned; |
|
682 * an empty array indicates that none are to be returned. |
|
683 * @return |
|
684 * a non-null enumeration of <tt>SearchResult</tt> objects. |
|
685 * Each <tt>SearchResult</tt> contains the attributes |
|
686 * identified by <code>attributesToReturn</code> |
|
687 * and the name of the corresponding object, named relative |
|
688 * to the context named by <code>name</code>. |
|
689 * @throws NamingException if a naming exception is encountered |
|
690 * |
|
691 * @see SearchControls |
|
692 * @see SearchResult |
|
693 * @see #search(Name, String, Object[], SearchControls) |
|
694 */ |
|
695 public NamingEnumeration<SearchResult> |
|
696 search(Name name, |
|
697 Attributes matchingAttributes, |
|
698 String[] attributesToReturn) |
|
699 throws NamingException; |
|
700 |
|
701 /** |
|
702 * Searches in a single context for objects that contain a |
|
703 * specified set of attributes, and retrieves selected attributes. |
|
704 * See {@link #search(Name, Attributes, String[])} for details. |
|
705 * |
|
706 * @param name |
|
707 * the name of the context to search |
|
708 * @param matchingAttributes |
|
709 * the attributes to search for |
|
710 * @param attributesToReturn |
|
711 * the attributes to return |
|
712 * @return a non-null enumeration of <tt>SearchResult</tt> objects |
|
713 * @throws NamingException if a naming exception is encountered |
|
714 */ |
|
715 public NamingEnumeration<SearchResult> |
|
716 search(String name, |
|
717 Attributes matchingAttributes, |
|
718 String[] attributesToReturn) |
|
719 throws NamingException; |
|
720 |
|
721 /** |
|
722 * Searches in a single context for objects that contain a |
|
723 * specified set of attributes. |
|
724 * This method returns all the attributes of such objects. |
|
725 * It is equivalent to supplying null as |
|
726 * the <tt>atributesToReturn</tt> parameter to the method |
|
727 * <code>search(Name, Attributes, String[])</code>. |
|
728 * <br> |
|
729 * See {@link #search(Name, Attributes, String[])} for a full description. |
|
730 * |
|
731 * @param name |
|
732 * the name of the context to search |
|
733 * @param matchingAttributes |
|
734 * the attributes to search for |
|
735 * @return an enumeration of <tt>SearchResult</tt> objects |
|
736 * @throws NamingException if a naming exception is encountered |
|
737 * |
|
738 * @see #search(Name, Attributes, String[]) |
|
739 */ |
|
740 public NamingEnumeration<SearchResult> |
|
741 search(Name name, Attributes matchingAttributes) |
|
742 throws NamingException; |
|
743 |
|
744 /** |
|
745 * Searches in a single context for objects that contain a |
|
746 * specified set of attributes. |
|
747 * See {@link #search(Name, Attributes)} for details. |
|
748 * |
|
749 * @param name |
|
750 * the name of the context to search |
|
751 * @param matchingAttributes |
|
752 * the attributes to search for |
|
753 * @return an enumeration of <tt>SearchResult</tt> objects |
|
754 * @throws NamingException if a naming exception is encountered |
|
755 */ |
|
756 public NamingEnumeration<SearchResult> |
|
757 search(String name, Attributes matchingAttributes) |
|
758 throws NamingException; |
|
759 |
|
760 /** |
|
761 * Searches in the named context or object for entries that satisfy the |
|
762 * given search filter. Performs the search as specified by |
|
763 * the search controls. |
|
764 * <p> |
|
765 * The format and interpretation of <code>filter</code> follows RFC 2254 |
|
766 * with the |
|
767 * following interpretations for <code>attr</code> and <code>value</code> |
|
768 * mentioned in the RFC. |
|
769 * <p> |
|
770 * <code>attr</code> is the attribute's identifier. |
|
771 * <p> |
|
772 * <code>value</code> is the string representation the attribute's value. |
|
773 * The translation of this string representation into the attribute's value |
|
774 * is directory-specific. |
|
775 * <p> |
|
776 * For the assertion "someCount=127", for example, <code>attr</code> |
|
777 * is "someCount" and <code>value</code> is "127". |
|
778 * The provider determines, based on the attribute ID ("someCount") |
|
779 * (and possibly its schema), that the attribute's value is an integer. |
|
780 * It then parses the string "127" appropriately. |
|
781 *<p> |
|
782 * Any non-ASCII characters in the filter string should be |
|
783 * represented by the appropriate Java (Unicode) characters, and |
|
784 * not encoded as UTF-8 octets. Alternately, the |
|
785 * "backslash-hexcode" notation described in RFC 2254 may be used. |
|
786 *<p> |
|
787 * If the directory does not support a string representation of |
|
788 * some or all of its attributes, the form of <code>search</code> that |
|
789 * accepts filter arguments in the form of Objects can be used instead. |
|
790 * The service provider for such a directory would then translate |
|
791 * the filter arguments to its service-specific representation |
|
792 * for filter evaluation. |
|
793 * See <code>search(Name, String, Object[], SearchControls)</code>. |
|
794 * <p> |
|
795 * RFC 2254 defines certain operators for the filter, including substring |
|
796 * matches, equality, approximate match, greater than, less than. These |
|
797 * operators are mapped to operators with corresponding semantics in the |
|
798 * underlying directory. For example, for the equals operator, suppose |
|
799 * the directory has a matching rule defining "equality" of the |
|
800 * attributes in the filter. This rule would be used for checking |
|
801 * equality of the attributes specified in the filter with the attributes |
|
802 * of objects in the directory. Similarly, if the directory has a |
|
803 * matching rule for ordering, this rule would be used for |
|
804 * making "greater than" and "less than" comparisons. |
|
805 *<p> |
|
806 * Not all of the operators defined in RFC 2254 are applicable to all |
|
807 * attributes. When an operator is not applicable, the exception |
|
808 * <code>InvalidSearchFilterException</code> is thrown. |
|
809 * <p> |
|
810 * The result is returned in an enumeration of <tt>SearchResult</tt>s. |
|
811 * Each <tt>SearchResult</tt> contains the name of the object |
|
812 * and other information about the object (see SearchResult). |
|
813 * The name is either relative to the target context of the search |
|
814 * (which is named by the <code>name</code> parameter), or |
|
815 * it is a URL string. If the target context is included in |
|
816 * the enumeration (as is possible when |
|
817 * <code>cons</code> specifies a search scope of |
|
818 * <code>SearchControls.OBJECT_SCOPE</code> or |
|
819 * <code>SearchControls.SUBSTREE_SCOPE</code>), its name is the empty |
|
820 * string. The <tt>SearchResult</tt> may also contain attributes of the |
|
821 * matching object if the <tt>cons</tt> argument specified that attributes |
|
822 * be returned. |
|
823 *<p> |
|
824 * If the object does not have a requested attribute, that |
|
825 * nonexistent attribute will be ignored. Those requested |
|
826 * attributes that the object does have will be returned. |
|
827 *<p> |
|
828 * A directory might return more attributes than were requested |
|
829 * (see <strong>Attribute Type Names</strong> in the class description) |
|
830 * but is not allowed to return arbitrary, unrelated attributes. |
|
831 *<p> |
|
832 * See also <strong>Operational Attributes</strong> in the class |
|
833 * description. |
|
834 * |
|
835 * @param name |
|
836 * the name of the context or object to search |
|
837 * @param filter |
|
838 * the filter expression to use for the search; may not be null |
|
839 * @param cons |
|
840 * the search controls that control the search. If null, |
|
841 * the default search controls are used (equivalent |
|
842 * to <tt>(new SearchControls())</tt>). |
|
843 * @return an enumeration of <tt>SearchResult</tt>s of |
|
844 * the objects that satisfy the filter; never null |
|
845 * |
|
846 * @throws InvalidSearchFilterException if the search filter specified is |
|
847 * not supported or understood by the underlying directory |
|
848 * @throws InvalidSearchControlsException if the search controls |
|
849 * contain invalid settings |
|
850 * @throws NamingException if a naming exception is encountered |
|
851 * |
|
852 * @see #search(Name, String, Object[], SearchControls) |
|
853 * @see SearchControls |
|
854 * @see SearchResult |
|
855 */ |
|
856 public NamingEnumeration<SearchResult> |
|
857 search(Name name, |
|
858 String filter, |
|
859 SearchControls cons) |
|
860 throws NamingException; |
|
861 |
|
862 /** |
|
863 * Searches in the named context or object for entries that satisfy the |
|
864 * given search filter. Performs the search as specified by |
|
865 * the search controls. |
|
866 * See {@link #search(Name, String, SearchControls)} for details. |
|
867 * |
|
868 * @param name |
|
869 * the name of the context or object to search |
|
870 * @param filter |
|
871 * the filter expression to use for the search; may not be null |
|
872 * @param cons |
|
873 * the search controls that control the search. If null, |
|
874 * the default search controls are used (equivalent |
|
875 * to <tt>(new SearchControls())</tt>). |
|
876 * |
|
877 * @return an enumeration of <tt>SearchResult</tt>s for |
|
878 * the objects that satisfy the filter. |
|
879 * @throws InvalidSearchFilterException if the search filter specified is |
|
880 * not supported or understood by the underlying directory |
|
881 * @throws InvalidSearchControlsException if the search controls |
|
882 * contain invalid settings |
|
883 * @throws NamingException if a naming exception is encountered |
|
884 */ |
|
885 public NamingEnumeration<SearchResult> |
|
886 search(String name, |
|
887 String filter, |
|
888 SearchControls cons) |
|
889 throws NamingException; |
|
890 |
|
891 /** |
|
892 * Searches in the named context or object for entries that satisfy the |
|
893 * given search filter. Performs the search as specified by |
|
894 * the search controls. |
|
895 *<p> |
|
896 * The interpretation of <code>filterExpr</code> is based on RFC |
|
897 * 2254. It may additionally contain variables of the form |
|
898 * <code>{i}</code> -- where <code>i</code> is an integer -- that |
|
899 * refer to objects in the <code>filterArgs</code> array. The |
|
900 * interpretation of <code>filterExpr</code> is otherwise |
|
901 * identical to that of the <code>filter</code> parameter of the |
|
902 * method <code>search(Name, String, SearchControls)</code>. |
|
903 *<p> |
|
904 * When a variable <code>{i}</code> appears in a search filter, it |
|
905 * indicates that the filter argument <code>filterArgs[i]</code> |
|
906 * is to be used in that place. Such variables may be used |
|
907 * wherever an <em>attr</em>, <em>value</em>, or |
|
908 * <em>matchingrule</em> production appears in the filter grammar |
|
909 * of RFC 2254, section 4. When a string-valued filter argument |
|
910 * is substituted for a variable, the filter is interpreted as if |
|
911 * the string were given in place of the variable, with any |
|
912 * characters having special significance within filters (such as |
|
913 * <code>'*'</code>) having been escaped according to the rules of |
|
914 * RFC 2254. |
|
915 *<p> |
|
916 * For directories that do not use a string representation for |
|
917 * some or all of their attributes, the filter argument |
|
918 * corresponding to an attribute value may be of a type other than |
|
919 * String. Directories that support unstructured binary-valued |
|
920 * attributes, for example, should accept byte arrays as filter |
|
921 * arguments. The interpretation (if any) of filter arguments of |
|
922 * any other type is determined by the service provider for that |
|
923 * directory, which maps the filter operations onto operations with |
|
924 * corresponding semantics in the underlying directory. |
|
925 *<p> |
|
926 * This method returns an enumeration of the results. |
|
927 * Each element in the enumeration contains the name of the object |
|
928 * and other information about the object (see <code>SearchResult</code>). |
|
929 * The name is either relative to the target context of the search |
|
930 * (which is named by the <code>name</code> parameter), or |
|
931 * it is a URL string. If the target context is included in |
|
932 * the enumeration (as is possible when |
|
933 * <code>cons</code> specifies a search scope of |
|
934 * <code>SearchControls.OBJECT_SCOPE</code> or |
|
935 * <code>SearchControls.SUBSTREE_SCOPE</code>), |
|
936 * its name is the empty string. |
|
937 *<p> |
|
938 * The <tt>SearchResult</tt> may also contain attributes of the matching |
|
939 * object if the <tt>cons</tt> argument specifies that attributes be |
|
940 * returned. |
|
941 *<p> |
|
942 * If the object does not have a requested attribute, that |
|
943 * nonexistent attribute will be ignored. Those requested |
|
944 * attributes that the object does have will be returned. |
|
945 *<p> |
|
946 * A directory might return more attributes than were requested |
|
947 * (see <strong>Attribute Type Names</strong> in the class description) |
|
948 * but is not allowed to return arbitrary, unrelated attributes. |
|
949 *<p> |
|
950 * If a search filter with invalid variable substitutions is provided |
|
951 * to this method, the result is undefined. |
|
952 * When changes are made to this DirContext, |
|
953 * the effect on enumerations returned by prior calls to this method |
|
954 * is undefined. |
|
955 *<p> |
|
956 * See also <strong>Operational Attributes</strong> in the class |
|
957 * description. |
|
958 * |
|
959 * @param name |
|
960 * the name of the context or object to search |
|
961 * @param filterExpr |
|
962 * the filter expression to use for the search. |
|
963 * The expression may contain variables of the |
|
964 * form "<code>{i}</code>" where <code>i</code> |
|
965 * is a nonnegative integer. May not be null. |
|
966 * @param filterArgs |
|
967 * the array of arguments to substitute for the variables |
|
968 * in <code>filterExpr</code>. The value of |
|
969 * <code>filterArgs[i]</code> will replace each |
|
970 * occurrence of "<code>{i}</code>". |
|
971 * If null, equivalent to an empty array. |
|
972 * @param cons |
|
973 * the search controls that control the search. If null, |
|
974 * the default search controls are used (equivalent |
|
975 * to <tt>(new SearchControls())</tt>). |
|
976 * @return an enumeration of <tt>SearchResult</tt>s of the objects |
|
977 * that satisfy the filter; never null |
|
978 * |
|
979 * @throws ArrayIndexOutOfBoundsException if <tt>filterExpr</tt> contains |
|
980 * <code>{i}</code> expressions where <code>i</code> is outside |
|
981 * the bounds of the array <code>filterArgs</code> |
|
982 * @throws InvalidSearchControlsException if <tt>cons</tt> contains |
|
983 * invalid settings |
|
984 * @throws InvalidSearchFilterException if <tt>filterExpr</tt> with |
|
985 * <tt>filterArgs</tt> represents an invalid search filter |
|
986 * @throws NamingException if a naming exception is encountered |
|
987 * |
|
988 * @see #search(Name, Attributes, String[]) |
|
989 * @see java.text.MessageFormat |
|
990 */ |
|
991 public NamingEnumeration<SearchResult> |
|
992 search(Name name, |
|
993 String filterExpr, |
|
994 Object[] filterArgs, |
|
995 SearchControls cons) |
|
996 throws NamingException; |
|
997 |
|
998 /** |
|
999 * Searches in the named context or object for entries that satisfy the |
|
1000 * given search filter. Performs the search as specified by |
|
1001 * the search controls. |
|
1002 * See {@link #search(Name, String, Object[], SearchControls)} for details. |
|
1003 * |
|
1004 * @param name |
|
1005 * the name of the context or object to search |
|
1006 * @param filterExpr |
|
1007 * the filter expression to use for the search. |
|
1008 * The expression may contain variables of the |
|
1009 * form "<code>{i}</code>" where <code>i</code> |
|
1010 * is a nonnegative integer. May not be null. |
|
1011 * @param filterArgs |
|
1012 * the array of arguments to substitute for the variables |
|
1013 * in <code>filterExpr</code>. The value of |
|
1014 * <code>filterArgs[i]</code> will replace each |
|
1015 * occurrence of "<code>{i}</code>". |
|
1016 * If null, equivalent to an empty array. |
|
1017 * @param cons |
|
1018 * the search controls that control the search. If null, |
|
1019 * the default search controls are used (equivalent |
|
1020 * to <tt>(new SearchControls())</tt>). |
|
1021 * @return an enumeration of <tt>SearchResult</tt>s of the objects |
|
1022 * that satisfy the filter; never null |
|
1023 * |
|
1024 * @throws ArrayIndexOutOfBoundsException if <tt>filterExpr</tt> contains |
|
1025 * <code>{i}</code> expressions where <code>i</code> is outside |
|
1026 * the bounds of the array <code>filterArgs</code> |
|
1027 * @throws InvalidSearchControlsException if <tt>cons</tt> contains |
|
1028 * invalid settings |
|
1029 * @throws InvalidSearchFilterException if <tt>filterExpr</tt> with |
|
1030 * <tt>filterArgs</tt> represents an invalid search filter |
|
1031 * @throws NamingException if a naming exception is encountered |
|
1032 */ |
|
1033 public NamingEnumeration<SearchResult> |
|
1034 search(String name, |
|
1035 String filterExpr, |
|
1036 Object[] filterArgs, |
|
1037 SearchControls cons) |
|
1038 throws NamingException; |
|
1039 } |