Preparations

 


Naming Exceptions

Many methods in the JNDI packages throw a NamingException when they need to indicate that the operation requested cannot be performed. Commonly, you will see a try/catch wrapper around the methods that can throw a NamingException:
try {
    Context ctx = new InitialContext();
    Object obj = ctx.lookup("somename");
} catch (NamingException e) {
    // Handle the error
    System.err.println(e);
}

 

 

Exception Class Hierarchy

The JNDI has a rich exception hierarchy stemming from the NamingException class. The class names of the exceptions are self-explanatory and are listed later in this discussion. To handle a particular subclass of NamingException specially, you catch the subclass separately. For example, the following code specially treats the AuthenticationException and its subclasses.

try {
    Context ctx = new InitialContext();
    Object obj = ctx.lookup("somename");
} catch (AuthenticationException e) {
    // attempt to reacquire the authentication information
    ...
} catch (NamingException e) {
    // Handle the error
    System.err.println(e);
}

 

 

Enumerations

Operations such as Context.list() and DirContext.search() return a NamingEnumeration . In these cases, if an error occurs and no results are returned, then NamingException or one of its appropriate subclasses will be thrown at the time that the method is invoked. If an error occurs but there are some results to be returned, then a NamingEnumeration is returned so that you can get those results. When all of the results are exhausted, invoking NamingEnumeration.hasMore() will cause a NamingException (or one of its subclasses) to be thrown to indicate the error. At that point, the enumeration becomes invalid and no more methods should be invoked on it.

For example, if you perform a search() and specify a count limit (n) of how many answers to return, then the search() will return an enumeration consisting of at most n results. If the number of results exceeds n, then when NamingEnumeration.hasMore() is invoked for the n+1 time, a SizeLimitExceededException will be thrown. See the count limit discussion in this trail for sample code.

 

 

Examples in This Tutorial

In the inline sample code that is embedded within the text of this tutorial, the try/catch clauses are usually omitted for the sake of readability. Typically, because only code fragments are shown here, only the lines that are directly useful in illustrating a concept are included. You will see appropriate placements of the try/catch clauses for NamingException if you look in the source files that accompany this tutorial.

 

 

Exceptions in the javax.naming Package

Following are the exceptions contained in the javax.naming package:

NamingException
CannotProceedException
CommunicationException
ConfigurationException
ContextNotEmptyException
InsufficientResourcesException
InterruptedNamingException
InvalidNameException
LimitExceededException
SizeLimitExceededException
TimeLimitExceededException
LinkException
LinkLoopException
MalformedLinkException
NameAlreadyBoundException
NameNotFoundException
NamingSecurityException
AuthenticationException
AuthenticationNotSupportedException
NoPermissionException
NoInitialContextException
NotContextException
OperationNotSupportedException
PartialResultException
ReferralException
ServiceUnavailableException

 

 

Exceptions in the javax.naming.directory Package

Following are the exceptions in the javax.naming.directory package:

NamingException
AttributeInUseException
AttributeModificationException
InvalidAttributeIdentifierException
InvalidAttributesException
InvalidAttributeValueException
InvalidSearchControlsException
InvalidSearchFilterException
NoSuchAttributeException
SchemaViolationException

 

 

Exceptions in the javax.naming.ldap Package

Following are the exceptions in the javax.naming.directory package:
NamingException
ReferralException
LdapReferralException