SMSException.java revision 0be04b49d445e7ee16f8005ce1efc0c80659fd85
/**
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the License). You may not use this file except in
* compliance with the License.
*
* You can obtain a copy of the License at
* See the License for the specific language governing
* permission and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* Header Notice in each file and include the License file
* at opensso/legal/CDDLv1.0.txt.
* If applicable, add the following below the CDDL Header,
* with the fields enclosed by brackets [] replaced by
* your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
*
* $Id: SMSException.java,v 1.7 2009/01/28 05:35:03 ww203982 Exp $
*
*/
/*
* Portions Copyrighted [2011] [ForgeRock AS]
*/
/**
* The exception class whose instance is thrown if there is any error during the
* operation of objects of the <code>com.sun.identity.sms</code> package. This
* class maps the exception that occurred at a lower level to a high level
* error. Using the exception status code <code>getExceptionCode()</code> the
* errors are categorized as a <code>ABORT</code>, <code>RETRY</code>,
* <code>CONFIG_PROBLEM</code> or <code>LDAP_OP_FAILED</code> (typically a
* bug).
*
* @supported.all.api
*/
private int exceptionStatus = STATUS_NONE;
/**
* Default constructor for <code> SMSException </code>
*/
public SMSException() {
super();
}
/**
* @param status
* The exception status code.
* @param errorCode
* Key to resource bundle.
*/
super();
}
/**
* @param status
* The Exception status code.
* @param exMessage
* The message provided by the object which is throwing the
* exception
* @param errorCode
* Key to resource bundle.
*/
}
/**
* @param msg
* The message provided by the object which is throwing the
* exception
*/
}
/**
* @param msg
* The message provided by the object which is throwing the
* exception
* @param errorCode
* Key to resource bundle.
*/
}
/**
* Constructs an <code>SMSException</code>.
*
* @param t
* The <code>Throwable</code> object provided by the object
* which is throwing the exception
* @param errorCode
* Key to resource bundle.
*/
// super(t); (can be used with JDK 1.4 and higher)
rootCause = t;
}
/**
* Constructs an <code>SMSException</code>.
*
* @param message
* exception message.
* @param t
* The <code>Throwable</code> object provided by the object
* which is throwing the exception.
* @param errorCode
* Key to resource bundle.
*/
// super(message, t); (can be used with JDK 1.4 and higher)
rootCause = t;
}
/**
* Constructs an <code>SMSException</code>.
*
* @param rbName
* Resource bundle Name to be used for getting localized error
* message.
* @param message
* exception message.
* @param t
* The <code>Throwable</code> object provided by the object
* which is throwing the exception.
* @param errorCode
* Key to resource bundle.
*/
// super(message, t); (can be used with JDK 1.4 and higher)
rootCause = t;
this.bundleName = rbName;
}
}
/**
* This constructor is used to pass the localized error message At this
* level, the locale of the caller is not known and it is not possible to
* throw localized error message at this level. Instead this constructor
* provides Resource Bundle name and error code for correctly locating the
* error message. The default <code>getMessage()</code> will always return
* English messages only. This is in consistent with current JRE.
*
* @param rbName
* Resource bundle Name to be used for getting localized error
* message.
* @param errorCode
* Key to resource bundle. You can use <code>ResourceBundle rb =
* ResourceBunde.getBundle(rbName,locale);
* String localizedStr = rb.getString(errorCode)</code>.
* @param args
* arguments to message. If it is not present pass the as null.
*/
this.bundleName = rbName;
}
/**
* Returns a localized error message
*
* @param locale
* Uses the locale object to create the appropriate localized
* error message
* @return localized error message.
* @see #SMSException(String, String, Object[])
*/
} else {
}
}
return result;
}
/**
* Returns <code>ResourceBundle</code> Name associated with this error
* message.
*
* @return <code>ResourceBundle</code> name associated with this error
* message.
* @see #SMSException(String, String, Object[])
*/
public String getResourceBundleName() {
return bundleName;
}
/**
* Returns error code associated with this error message.
*
* @return Error code associated with this error message.
* @see #SMSException(String, String, Object[])
*/
public String getErrorCode() {
return errorCode;
}
/**
* Returns arguments for formatting this error message.
*
* @return arguments for formatting this error message. You need to use
* <code>MessageFormat</code> class to format the message It can
* be null.
* @see #SMSException(String, String, Object[])
*/
public Object[] getMessageArgs() {
return args;
}
/**
* Returns the status code for this exception.
*
* @return Integer representing the exception status code
*/
public int getExceptionCode() {
return exceptionStatus;
}
/**
* The this package can set the exception code.
*
* @param status
* The exception status code.
*/
void setExceptionCode(int status) {
}
if (exceptionStatus != -1) {
}
}
}
}
/**
* Returns the error message of this exception.
*
* @return String representing the error message
*/
public String getMessage() {
return message;
}
if (bundleName != null) {
}
}
private void exceptionMapper() {
return;
}
if (rootCause instanceof LDAPException) {
message = mapLDAPException();
} else if (rootCause instanceof LDAPServiceException) {
// do nothing
} else if (rootCause instanceof EventException) {
} else if (rootCause instanceof XMLException) {
} else if (rootCause instanceof InvalidAuthContextException) {
} else if (rootCause instanceof SSOException) {
} else {
}
}
private String mapLDAPException() {
switch (resultCode) {
// ////////////////////////////////
// Errors that need to be handled
// ////////////////////////////////
// Helpless errors
// All errors are helpless situations
// but some are more helpless than the others.
// These errors are either problems in connection
// or configuration. So, some can be retired and
// some are already busted.
case LDAPException.SERVER_DOWN:
case LDAPException.OTHER:
break;
break;
case LDAPException.BUSY:
break;
break;
// Application must show exactly what is happening
case LDAPException.NO_SUCH_OBJECT:
break;
break;
break;
break;
case LDAPException.REFERRAL:
break;
// We screwed up with something
case LDAPException.PROTOCOL_ERROR:
break;
// Exception code that means logical operation.
case LDAPException.COMPARE_TRUE:
case LDAPException.COMPARE_FALSE:
break;
default:
}
return message;
}
// Error codes
/** No status code is set */
public static final int STATUS_NONE = -1;
/** Retry connection to data store */
public static final int STATUS_RETRY = 0;
/** Repeated retry to data store failed */
public static final int STATUS_REPEATEDLY_FAILED = 0;
/** Status to abort operation */
public static final int STATUS_ABORT = 1;
/**
* If root LDAP cause is <code>LDAP_PARTIAL_RESULTS </code> then this
* status is set
*/
public static final int STATUS_QUO_ANTE = 2;
/**
* If root LDAP cause is an LDAP exception with one of the following error
* codes then this status is set.
* <p>
*
* <PRE>
*
* NO_SUCH_OBJECT OBJECT_CLASS_VIOLATION NAMING_VIOLATION
* CONSTRAINT_VIOLATION INVALID_DN_SYNTAX ENTRY_ALREADY_EXISTS
* ATTRIBUTE_OR_VALUE_EXISTS PROTOCOL_ERROR UNDEFINED_ATTRIBUTE_TYPE
*
* </PRE>
*/
public static final int STATUS_LDAP_OP_FAILED = 3;
/**
* If the root LDAP exception is <code> INVALID_CREDENTIALS </code> or
* <code> REFERRAL </code> then this status is set
*/
public static final int STATUS_CONFIG_PROBLEM = 4;
/** If root cause is other than any of those listed in other status codes */
public static final int STATUS_UNKNOWN_EXCEPTION = 5;
/** If the root LDAP cause is <code> INSUFFICIENT_ACCESS_RIGHTS </code> */
public static final int STATUS_NO_PERMISSION = 8;
/** the operation is not allowed. */
public static final int STATUS_NOT_ALLOW = 9;
}