Class ControlFactory
When a service provider receives a response control, it uses control factories to return the specific/appropriate control class implementation.
- Since:
- 1.3
- See Also:
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedCreates a new instance of a control factory. -
Method Summary
Methods declared in class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitModifier and TypeMethodDescriptionprotected Objectclone()Answers a new instance of the same class as the receiver, whose slots have been filled in with the values in the slots of the receiver.booleanCompares the argument to the receiver, and answers true if they represent the same object using a class specific comparison.protected voidfinalize()Deprecated, for removal: This API element is subject to removal in a future version.May cause performance issues, deadlocks and hangs.getClass()Answers the unique instance of java.lang.Class which represents the class of the receiver.inthashCode()Answers an integer hash code for the receiver.final voidnotify()Causes one thread which iswaiting on the receiver to be made ready to run.final voidCauses all threads which arewaiting on the receiver to be made ready to run.toString()Answers a string containing a concise, human-readable description of the receiver.final voidwait()Causes the thread which sent this message to be made not ready to run pending some change in the receiver (as indicated bynotifyornotifyAll).final voidwait(long time) Causes the thread which sent this message to be made not ready to run either pending some change in the receiver (as indicated bynotifyornotifyAll) or the expiration of the timeout.final voidwait(long time, int frac) Causes the thread which sent this message to be made not ready to run either pending some change in the receiver (as indicated bynotifyornotifyAll) or the expiration of the timeout.
-
Constructor Details
-
ControlFactory
protected ControlFactory()Creates a new instance of a control factory.
-
-
Method Details
-
getControlInstance
Creates a control using this control factory.The factory is used by the service provider to return controls that it reads from the LDAP protocol as specialized control classes. Without this mechanism, the provider would be returning controls that only contained data in BER encoded format.
Typically,
ctlis a "basic" control containing BER encoded data. The factory is used to create a specialized control implementation, usually by decoding the BER encoded data, that provides methods to access that data in a type-safe and friendly manner.For example, a factory might use the BER encoded data in basic control and return an instance of a VirtualListReplyControl.
If this factory cannot create a control using the argument supplied, it should return null. A factory should only throw an exception if it is sure that it is the only intended factory and that no other control factories should be tried. This might happen, for example, if the BER data in the control does not match what is expected of a control with the given OID. Since this method throws
NamingException, any other internally generated exception that should be propagated must be wrapped inside aNamingException.- Parameters:
ctl- A non-null control.- Returns:
- A possibly null Control.
- Throws:
NamingException- Ifctlcontains invalid data that prevents it from being used to create a control. A factory should only throw an exception if it knows how to produce the control (identified by the OID) but is unable to because of, for example invalid BER data.
-
getControlInstance
public static Control getControlInstance(Control ctl, Context ctx, Hashtable<?, ?> env) throws NamingExceptionCreates a control using known control factories.The following rule is used to create the control:
- Use the control factories specified in
the
LdapContext.CONTROL_FACTORIESproperty of the environment, and of the provider resource file associated withctx, in that order. The value of this property is a colon-separated list of factory class names that are tried in order, and the first one that succeeds in creating the control is the one used. If none of the factories can be loaded, returnctl. If an exception is encountered while creating the control, the exception is passed up to the caller.
Note that a control factory must be public and must have a public constructor that accepts no arguments. In cases where the factory is in a named module then it must be in a package which is exported by that module to the
java.namingmodule.- Parameters:
ctl- The non-null control object containing the OID and BER data.ctx- The possibly null context in which the control is being created. If null, no such information is available.env- The possibly null environment of the context. This is used to find the value of theLdapContext.CONTROL_FACTORIESproperty.- Returns:
- A control object created using
ctl; orctlif a control object cannot be created using the algorithm described above. - Throws:
NamingException- if a naming exception was encountered while attempting to create the control object. If one of the factories accessed throws an exception, it is propagated up to the caller. If an error was encountered while loading and instantiating the factory and object classes, the exception is wrapped inside aNamingExceptionand then rethrown.
- Use the control factories specified in
the
-