<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../jacoco-resources/report.gif" type="image/gif"/><title>CodecException.java</title><link rel="stylesheet" href="../../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../../index.html" class="el_report">Apache Shiro :: Test Coverage</a> &gt; <a href="../index.html" class="el_bundle">shiro-lang</a> &gt; <a href="index.source.html" class="el_package">org.apache.shiro.codec</a> &gt; <span class="el_source">CodecException.java</span></div><h1>CodecException.java</h1><pre class="source lang-java linenums">/*
 * 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
 * &quot;License&quot;); 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
 * &quot;AS IS&quot; 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.shiro.codec;

import org.apache.shiro.ShiroException;

/**
 * Root exception related to issues during encoding or decoding.
 *
 * @since 0.9
 */
public class CodecException extends ShiroException {

    /**
     * Creates a new &lt;code&gt;CodecException&lt;/code&gt;.
     */
    public CodecException() {
<span class="nc" id="L34">        super();</span>
<span class="nc" id="L35">    }</span>

    /**
     * Creates a new &lt;code&gt;CodecException&lt;/code&gt;.
     *
     * @param message the reason for the exception.
     */
    public CodecException(String message) {
<span class="nc" id="L43">        super(message);</span>
<span class="nc" id="L44">    }</span>

    /**
     * Creates a new &lt;code&gt;CodecException&lt;/code&gt;.
     *
     * @param cause the underlying cause of the exception.
     */
    public CodecException(Throwable cause) {
<span class="nc" id="L52">        super(cause);</span>
<span class="nc" id="L53">    }</span>

    /**
     * Creates a new &lt;code&gt;CodecException&lt;/code&gt;.
     *
     * @param message the reason for the exception.
     * @param cause   the underlying cause of the exception.
     */
    public CodecException(String message, Throwable cause) {
<span class="nc" id="L62">        super(message, cause);</span>
<span class="nc" id="L63">    }</span>
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.3.201901230119</span></div></body></html>