/*
 * Copyright  1999-2004 The Apache Software Foundation.
 *
 *  Licensed 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 org.apache.savan;

import org.apache.axis2.AxisFault;

/** To convey a exception that occured in Savan. */
public class SavanException extends AxisFault {

    public SavanException(String cause) {
        super(cause);
    }

    public SavanException(String cause, Exception superException) {
        super(cause, superException);
    }

    public SavanException(Exception superException) {
        super(superException);
    }
}
