[Pki-devel] [PATCH] 542 Added support for exception chains in EBaseException.
Fraser Tweedale
ftweedal at redhat.com
Wed Jan 21 05:15:47 UTC 2015
On Tue, Jan 20, 2015 at 02:52:00PM -0600, Endi Sukma Dewata wrote:
> The EBaseException has been modified to provide constructors that
> can be used to chain exceptions. This way the root cause of the
> exception can be traced back to help troubleshooting.
>
> Some codes have been modified to utilize the proper exception
> chaining.
>
> https://fedorahosted.org/pki/ticket/915
>
>
> --
> Endi S. Dewata
ACK
> From 6db8b7999007f25b87cd81182222a537fe0c2edc Mon Sep 17 00:00:00 2001
> From: "Endi S. Dewata" <edewata at redhat.com>
> Date: Tue, 20 Jan 2015 09:25:32 -0500
> Subject: [PATCH] Added support for exception chains in EBaseException.
>
> The EBaseException has been modified to provide constructors that
> can be used to chain exceptions. This way the root cause of the
> exception can be traced back to help troubleshooting.
>
> Some codes have been modified to utilize the proper exception
> chaining.
>
> https://fedorahosted.org/pki/ticket/915
> ---
> base/common/src/com/netscape/certsrv/apps/CMS.java | 14 ++---
> .../com/netscape/certsrv/base/EBaseException.java | 60 +++++++++++++++++-----
> .../dogtagpki/server/rest/SystemConfigService.java | 18 +++----
> .../cmscore/authentication/AuthSubsystem.java | 20 +++++---
> .../ChallengePhraseAuthentication.java | 3 +-
> 5 files changed, 76 insertions(+), 39 deletions(-)
>
> diff --git a/base/common/src/com/netscape/certsrv/apps/CMS.java b/base/common/src/com/netscape/certsrv/apps/CMS.java
> index 63c1a2cbde2ffdb0ce116c664ab373aeba91f5a3..8b4bac2c0985637ceab6d55bf3d2b9a00b848412 100644
> --- a/base/common/src/com/netscape/certsrv/apps/CMS.java
> +++ b/base/common/src/com/netscape/certsrv/apps/CMS.java
> @@ -17,8 +17,6 @@
> // --- END COPYRIGHT BLOCK ---
> package com.netscape.certsrv.apps;
>
> -import java.io.ByteArrayOutputStream;
> -import java.io.PrintStream;
> import java.math.BigInteger;
> import java.security.NoSuchAlgorithmException;
> import java.security.cert.Certificate;
> @@ -1586,21 +1584,19 @@ public final class CMS {
> CMS.startup();
>
> } catch (EBaseException e) { // catch everything here purposely
> - CMS.debug("CMS:Caught EBaseException");
> CMS.debug(e);
>
> // Raidzilla Bug #57592: Always print error message to stdout.
> - System.out.println(e.toString());
> + System.out.println(e);
>
> shutdown();
> throw e;
> +
> } catch (Exception e) { // catch everything here purposely
> - ByteArrayOutputStream bos = new ByteArrayOutputStream();
> - PrintStream ps = new PrintStream(bos);
> -
> - e.printStackTrace(ps);
> + CMS.debug(e);
> System.out.println(Constants.SERVER_SHUTDOWN_MESSAGE);
> - throw new EBaseException(bos.toString());
> +
> + throw new EBaseException(e);
> // cms.shutdown();
> }
> }
> diff --git a/base/common/src/com/netscape/certsrv/base/EBaseException.java b/base/common/src/com/netscape/certsrv/base/EBaseException.java
> index 140a6acbcfc71b291ff059b09c8ec7eb3c6199fb..78d9a6d2d68083a39a91e4ae135bff3541406dad 100644
> --- a/base/common/src/com/netscape/certsrv/base/EBaseException.java
> +++ b/base/common/src/com/netscape/certsrv/base/EBaseException.java
> @@ -63,25 +63,24 @@ public class EBaseException extends Exception {
> }
>
> /**
> - * Constructs an instance of the exception given the resource key and
> - * a exception parameter.
> + * Constructs an instance of this exception given the resource key and
> + * the cause exception.
> *
> - * <PRE>
> - * try {
> - * ...
> - * } catch (IOExeption e) {
> - * throw new EBaseException(BaseResources.INTERNAL_ERROR_1, e);
> - * }
> - * </PRE>
> - * <P>
> + * <pre>
> + * try {
> + * ...
> + * } catch (IOExeption e) {
> + * throw new EBaseException(BaseResources.INTERNAL_ERROR_1, e);
> + * }
> + * </pre>
> *
> * @param msgFormat The resource key
> - * @param param The parameter as an exception
> + * @param cause The cause exception
> */
> - public EBaseException(String msgFormat, Exception param) {
> - super(msgFormat);
> + public EBaseException(String msgFormat, Exception cause) {
> + super(msgFormat, cause);
> mParams = new Exception[1];
> - mParams[0] = param;
> + mParams[0] = cause;
> }
>
> /**
> @@ -98,6 +97,39 @@ public class EBaseException extends Exception {
> }
>
> /**
> + * Constructs an instance of this exception given the resource key,
> + * an array of parameters, and the cause exception.
> + * <P>
> + *
> + * @param msgFormat The resource key
> + * @param params Array of params
> + * @param cause The cause exception
> + */
> + public EBaseException(String msgFormat, Object params[], Exception cause) {
> + super(msgFormat, cause);
> + mParams = params;
> + }
> +
> + /**
> + * Constructs an instance of this exception given the cause exception.
> + *
> + * <pre>
> + * try {
> + * ...
> + * } catch (IOExeption e) {
> + * throw new EBaseException(e);
> + * }
> + * </pre>
> + *
> + * @param cause The cause exception
> + */
> + public EBaseException(Exception cause) {
> + super(cause.getMessage() == null ? cause.getClass().getName() : cause.getMessage(), cause);
> + mParams = new Exception[1];
> + mParams[0] = cause;
> + }
> +
> + /**
> * Returns the list of parameters.
> * <P>
> *
> diff --git a/base/server/cms/src/org/dogtagpki/server/rest/SystemConfigService.java b/base/server/cms/src/org/dogtagpki/server/rest/SystemConfigService.java
> index 47048c31a06b44cd992d4ebd1f09ff550bde9bf0..a594dad0510242357e86201e9d1125f9d0f929f8 100644
> --- a/base/server/cms/src/org/dogtagpki/server/rest/SystemConfigService.java
> +++ b/base/server/cms/src/org/dogtagpki/server/rest/SystemConfigService.java
> @@ -174,7 +174,7 @@ public class SystemConfigService extends PKIService implements SystemConfigResou
> cs.commit(false);
> } catch (EBaseException e) {
> CMS.debug(e);
> - throw new PKIException("Unable to commit config parameters to file");
> + throw new PKIException("Unable to commit config parameters to file", e);
> }
> initializeDatabase(data);
>
> @@ -200,8 +200,8 @@ public class SystemConfigService extends PKIService implements SystemConfigResou
> ConfigurationUtils.setCertPermissions(cert.getCertTag());
> CMS.debug("Processed '" + cert.getCertTag() + "' certificate.");
> } catch (Exception e) {
> - e.printStackTrace();
> - throw new PKIException("Error in configuring system certificates" + e);
> + CMS.debug(e);
> + throw new PKIException("Error in configuring system certificates" + e, e);
> }
> if (ret != 0) {
> throw new PKIException("Error in configuring system certificates");
> @@ -234,8 +234,8 @@ public class SystemConfigService extends PKIService implements SystemConfigResou
> try {
> ConfigurationUtils.removePreopConfigEntries();
> } catch (EBaseException e) {
> - e.printStackTrace();
> - throw new PKIException("Errors when removing preop config entries: " + e);
> + CMS.debug(e);
> + throw new PKIException("Errors when removing preop config entries: " + e, e);
> }
>
> // Create an empty file that designates the fact that although
> @@ -915,8 +915,8 @@ public class SystemConfigService extends PKIService implements SystemConfigResou
> cs.putString("securitydomain.host", host);
> cs.putInteger("securitydomain.httpsadminport",port);
> } catch (Exception e) {
> - e.printStackTrace();
> - throw new PKIException("Failed to resolve security domain URL");
> + CMS.debug(e);
> + throw new PKIException("Failed to resolve security domain URL", e);
> }
>
> getCertChainFromSecurityDomain(host, port);
> @@ -957,8 +957,8 @@ public class SystemConfigService extends PKIService implements SystemConfigResou
> try {
> installToken = ConfigurationUtils.getInstallToken(host, port, user, pass);
> } catch (Exception e) {
> - e.printStackTrace();
> - throw new PKIException("Failed to obtain installation token from security domain: " + e);
> + CMS.debug(e);
> + throw new PKIException("Failed to obtain installation token from security domain: " + e, e);
> }
>
> if (installToken == null) {
> diff --git a/base/server/cmscore/src/com/netscape/cmscore/authentication/AuthSubsystem.java b/base/server/cmscore/src/com/netscape/cmscore/authentication/AuthSubsystem.java
> index 549ce01f97fde8fb0ea3da9fb194451a43fdc128..137edb5c5a75916fb8a2b2fdf07ab0a6aa56f0fe 100644
> --- a/base/server/cmscore/src/com/netscape/cmscore/authentication/AuthSubsystem.java
> +++ b/base/server/cmscore/src/com/netscape/cmscore/authentication/AuthSubsystem.java
> @@ -219,21 +219,26 @@ public class AuthSubsystem implements IAuthSubsystem {
> isEnable = true;
>
> log(ILogger.LL_INFO, CMS.getLogMessage("CMSCORE_AUTH_ADD_AUTH_INSTANCE", insName));
> +
> } catch (ClassNotFoundException e) {
> log(ILogger.LL_FAILURE, CMS.getLogMessage("CMSCORE_AUTH_AUTHSUB_ERROR", e.toString()));
> - throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className));
> + throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className), e);
> +
> } catch (IllegalAccessException e) {
> log(ILogger.LL_FAILURE, CMS.getLogMessage("CMSCORE_AUTH_AUTHSUB_ERROR", e.toString()));
> - throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className));
> + throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className), e);
> +
> } catch (InstantiationException e) {
> log(ILogger.LL_FAILURE, CMS.getLogMessage("CMSCORE_AUTH_AUTHSUB_ERROR", e.toString()));
> - throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className));
> + throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className), e);
> +
> } catch (EBaseException e) {
> log(ILogger.LL_FAILURE, CMS.getLogMessage("CMSCORE_AUTH_AUTH_INIT_ERROR", insName, e.toString()));
> // Skip the authenticaiton instance if
> // it is mis-configurated. This give
> // administrator another chance to
> // fix the problem via console
> +
> } catch (Throwable e) {
> log(ILogger.LL_FAILURE, CMS.getLogMessage("CMSCORE_AUTH_AUTH_INIT_ERROR", insName, e.toString()));
> // Skip the authenticaiton instance if
> @@ -330,15 +335,18 @@ public class AuthSubsystem implements IAuthSubsystem {
> authMgrInst = (IAuthManager)
> Class.forName(className).newInstance();
> return (authMgrInst.getConfigParams());
> +
> } catch (InstantiationException e) {
> log(ILogger.LL_FAILURE, CMS.getLogMessage("CMSCORE_AUTH_INSTANCE_NOT_CREATED", e.toString()));
> - throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className));
> +
> + throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className), e);
> } catch (ClassNotFoundException e) {
> log(ILogger.LL_FAILURE, CMS.getLogMessage("CMSCORE_AUTH_INSTANCE_NOT_CREATED", e.toString()));
> - throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className));
> + throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className), e);
> +
> } catch (IllegalAccessException e) {
> log(ILogger.LL_FAILURE, CMS.getLogMessage("CMSCORE_AUTH_INSTANCE_NOT_CREATED", e.toString()));
> - throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className));
> + throw new EAuthException(CMS.getUserMessage("CMS_ACL_CLASS_LOAD_FAIL", className), e);
> }
> }
>
> diff --git a/base/server/cmscore/src/com/netscape/cmscore/authentication/ChallengePhraseAuthentication.java b/base/server/cmscore/src/com/netscape/cmscore/authentication/ChallengePhraseAuthentication.java
> index f5bde0b54731c46d0ccff2dbc64d435995b23915..11b6104bf93096da03f622c291eabc4016271228 100644
> --- a/base/server/cmscore/src/com/netscape/cmscore/authentication/ChallengePhraseAuthentication.java
> +++ b/base/server/cmscore/src/com/netscape/cmscore/authentication/ChallengePhraseAuthentication.java
> @@ -103,8 +103,9 @@ public class ChallengePhraseAuthentication implements IAuthManager {
>
> try {
> mSHADigest = MessageDigest.getInstance("SHA1");
> +
> } catch (NoSuchAlgorithmException e) {
> - throw new EAuthException(CMS.getUserMessage("CMS_AUTHENTICATION_INTERNAL_ERROR", e.getMessage()));
> + throw new EAuthException(CMS.getUserMessage("CMS_AUTHENTICATION_INTERNAL_ERROR", e.getMessage()), e);
> }
>
> log(ILogger.LL_INFO, CMS.getLogMessage("INIT_DONE", name));
> --
> 1.8.4.2
>
> _______________________________________________
> Pki-devel mailing list
> Pki-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/pki-devel
More information about the Pki-devel
mailing list