/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package java.security.cert;
import java.security.GeneralSecurityException;
/**
* The exception that is thrown when a certification path (or certificate chain)
* cannot be validated.
* <p>
* A {@code CertPathValidatorException} may optionally include the certification
* path instance that failed the validation and the index of the failed
* certificate.
*/
public class CertPathValidatorException extends GeneralSecurityException {
private static final long serialVersionUID = -3083180014971893139L;
/**
* the certification path.
*/
private CertPath certPath;
/**
* the index of the certificate.
*/
private int index = -1;
/**
* Creates a new {@code CertPathValidatorException} with the specified
* message , cause, certification path and certificate index in the
* certification path.
*
* @param msg
* the detail message for this exception.
* @param cause
* the cause.
* @param certPath
* the certification path that failed the validation.
* @param index
* the index of the failed certificate.
* @throws IllegalArgumentException
* if {@code certPath} is {@code null} and index is not {@code
* -1}.
* @throws IndexOutOfBoundsException
* if {@code certPath} is not {@code null} and index is not
* referencing an certificate in the certification path.
*/
public CertPathValidatorException(String msg, Throwable cause,
CertPath certPath, int index) {
super(msg, cause);
// check certPath and index parameters
if ((certPath == null) && (index != -1)) {
throw new IllegalArgumentException("Index should be -1 when CertPath is null");
}
if ((certPath != null) && ((index < -1) || (index >= certPath.getCertificates().size()))) {
throw new IndexOutOfBoundsException();
}
this.certPath = certPath;
this.index = index;
}
/**
* Creates a new {@code CertPathValidatorException} with the specified
* message and cause.
*
* @param msg
* the detail message for this exception.
* @param cause
* the cause why the path could not be validated.
*/
public CertPathValidatorException(String msg, Throwable cause) {
super(msg, cause);
}
/**
* Creates a new {@code CertPathValidatorException} with the specified
* cause.
*
* @param cause
* the cause why the path could not be validated.
*/
public CertPathValidatorException(Throwable cause) {
super(cause);
}
/**
* Creates a new {@code CertPathValidatorException} with the specified
* message.
*
* @param msg
* the detail message for this exception.
*/
public CertPathValidatorException(String msg) {
super(msg);
}
/**
* Creates a new {@code CertPathValidatorException}.
*/
public CertPathValidatorException() {
}
/**
* Returns the certification path that failed validation.
*
* @return the certification path that failed validation, or {@code null} if
* none was specified.
*/
public CertPath getCertPath() {
return certPath;
}
/**
* Returns the index of the failed certificate in the certification path.
*
* @return the index of the failed certificate in the certification path, or
* {@code -1} if none was specified.
*/
public int getIndex() {
return index;
}
}