public class org.apache.catalina.valves.JsonErrorReportValve extends org.apache.catalina.valves.ErrorReportValve
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.catalina.valves.JsonErrorReportValve
  super_class: org.apache.catalina.valves.ErrorReportValve
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.JsonErrorReportValve this
         0: .line 39
            aload 0 /* this */
            invokespecial org.apache.catalina.valves.ErrorReportValve.<init>:()V
         1: .line 40
            return
        end local 0 // org.apache.catalina.valves.JsonErrorReportValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/catalina/valves/JsonErrorReportValve;

  protected void report(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response, java.lang.Throwable);
    descriptor: (Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;Ljava/lang/Throwable;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=12, args_size=4
        start local 0 // org.apache.catalina.valves.JsonErrorReportValve this
        start local 1 // org.apache.catalina.connector.Request request
        start local 2 // org.apache.catalina.connector.Response response
        start local 3 // java.lang.Throwable throwable
         0: .line 45
            aload 2 /* response */
            invokevirtual org.apache.catalina.connector.Response.getStatus:()I
            istore 4 /* statusCode */
        start local 4 // int statusCode
         1: .line 51
            iload 4 /* statusCode */
            sipush 400
            if_icmplt 2
            aload 2 /* response */
            invokevirtual org.apache.catalina.connector.Response.getContentWritten:()J
            lconst_0
            lcmp
            ifgt 2
            aload 2 /* response */
            invokevirtual org.apache.catalina.connector.Response.setErrorReported:()Z
            ifne 3
         2: .line 52
      StackMap locals: int
      StackMap stack:
            return
         3: .line 57
      StackMap locals:
      StackMap stack:
            new java.util.concurrent.atomic.AtomicBoolean
            dup
            iconst_0
            invokespecial java.util.concurrent.atomic.AtomicBoolean.<init>:(Z)V
            astore 5 /* result */
        start local 5 // java.util.concurrent.atomic.AtomicBoolean result
         4: .line 58
            aload 2 /* response */
            invokevirtual org.apache.catalina.connector.Response.getCoyoteResponse:()Lorg/apache/coyote/Response;
            getstatic org.apache.coyote.ActionCode.IS_IO_ALLOWED:Lorg/apache/coyote/ActionCode;
            aload 5 /* result */
            invokevirtual org.apache.coyote.Response.action:(Lorg/apache/coyote/ActionCode;Ljava/lang/Object;)V
         5: .line 59
            aload 5 /* result */
            invokevirtual java.util.concurrent.atomic.AtomicBoolean.get:()Z
            ifne 7
         6: .line 60
            return
         7: .line 63
      StackMap locals: java.util.concurrent.atomic.AtomicBoolean
      StackMap stack:
            ldc "org.apache.catalina.valves"
            aload 1 /* request */
            invokevirtual org.apache.catalina.connector.Request.getLocales:()Ljava/util/Enumeration;
            invokestatic org.apache.tomcat.util.res.StringManager.getManager:(Ljava/lang/String;Ljava/util/Enumeration;)Lorg/apache/tomcat/util/res/StringManager;
            astore 6 /* smClient */
        start local 6 // org.apache.tomcat.util.res.StringManager smClient
         8: .line 64
            aload 2 /* response */
            aload 6 /* smClient */
            invokevirtual org.apache.tomcat.util.res.StringManager.getLocale:()Ljava/util/Locale;
            invokevirtual org.apache.catalina.connector.Response.setLocale:(Ljava/util/Locale;)V
         9: .line 65
            aconst_null
            astore 7 /* type */
        start local 7 // java.lang.String type
        10: .line 66
            aload 3 /* throwable */
            ifnull 13
        11: .line 67
            aload 6 /* smClient */
            ldc "errorReportValve.exceptionReport"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            astore 7 /* type */
        12: .line 68
            goto 14
        13: .line 69
      StackMap locals: org.apache.tomcat.util.res.StringManager java.lang.String
      StackMap stack:
            aload 6 /* smClient */
            ldc "errorReportValve.statusReport"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            astore 7 /* type */
        14: .line 71
      StackMap locals:
      StackMap stack:
            aload 2 /* response */
            invokevirtual org.apache.catalina.connector.Response.getMessage:()Ljava/lang/String;
            astore 8 /* message */
        start local 8 // java.lang.String message
        15: .line 72
            aload 8 /* message */
            ifnonnull 17
            aload 3 /* throwable */
            ifnull 17
        16: .line 73
            aload 3 /* throwable */
            invokevirtual java.lang.Throwable.getMessage:()Ljava/lang/String;
            astore 8 /* message */
        17: .line 75
      StackMap locals: java.lang.String
      StackMap stack:
            aconst_null
            astore 9 /* description */
        start local 9 // java.lang.String description
        18: .line 76
            aload 6 /* smClient */
            new java.lang.StringBuilder
            dup
            ldc "http."
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 4 /* statusCode */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ".desc"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            astore 9 /* description */
        19: .line 77
            aload 9 /* description */
            ifnonnull 23
        20: .line 78
            aload 8 /* message */
            ifnull 21
            aload 8 /* message */
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 22
        21: .line 79
      StackMap locals: java.lang.String
      StackMap stack:
            return
        22: .line 81
      StackMap locals:
      StackMap stack:
            aload 6 /* smClient */
            ldc "errorReportValve.noDescription"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            astore 9 /* description */
        23: .line 84
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "{\n  \"type\": \""
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        24: .line 85
            aload 7 /* type */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\",\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        25: .line 86
            ldc "  \"message\": \""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 8 /* message */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\"\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        26: .line 87
            ldc "  \"description\": \""
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 9 /* description */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "\"\n"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        27: .line 88
            ldc "}"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        28: .line 84
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 10 /* jsonReport */
        start local 10 // java.lang.String jsonReport
        29: .line 91
            aload 2 /* response */
            ldc "application/json"
            invokevirtual org.apache.catalina.connector.Response.setContentType:(Ljava/lang/String;)V
        30: .line 92
            aload 2 /* response */
            ldc "utf-8"
            invokevirtual org.apache.catalina.connector.Response.setCharacterEncoding:(Ljava/lang/String;)V
        31: .line 93
            goto 36
      StackMap locals: org.apache.catalina.valves.JsonErrorReportValve org.apache.catalina.connector.Request org.apache.catalina.connector.Response java.lang.Throwable int java.util.concurrent.atomic.AtomicBoolean org.apache.tomcat.util.res.StringManager java.lang.String java.lang.String java.lang.String java.lang.String
      StackMap stack: java.lang.Throwable
        32: astore 11 /* t */
        start local 11 // java.lang.Throwable t
        33: .line 94
            aload 11 /* t */
            invokestatic org.apache.tomcat.util.ExceptionUtils.handleThrowable:(Ljava/lang/Throwable;)V
        34: .line 95
            aload 0 /* this */
            getfield org.apache.catalina.valves.JsonErrorReportValve.container:Lorg/apache/catalina/Container;
            invokeinterface org.apache.catalina.Container.getLogger:()Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isDebugEnabled:()Z
            ifeq 36
        35: .line 96
            aload 0 /* this */
            getfield org.apache.catalina.valves.JsonErrorReportValve.container:Lorg/apache/catalina/Container;
            invokeinterface org.apache.catalina.Container.getLogger:()Lorg/apache/juli/logging/Log;
            ldc "status.setContentType"
            aload 11 /* t */
            invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 11 // java.lang.Throwable t
        36: .line 99
      StackMap locals:
      StackMap stack:
            aload 2 /* response */
            invokevirtual org.apache.catalina.connector.Response.getReporter:()Ljava/io/PrintWriter;
            astore 11 /* writer */
        start local 11 // java.io.Writer writer
        37: .line 100
            aload 11 /* writer */
            ifnull 43
        38: .line 101
            aload 11 /* writer */
            aload 10 /* jsonReport */
            invokevirtual java.io.Writer.write:(Ljava/lang/String;)V
        39: .line 102
            aload 2 /* response */
            invokevirtual org.apache.catalina.connector.Response.finishResponse:()V
        40: .line 103
            return
        end local 11 // java.io.Writer writer
        41: .line 105
      StackMap locals:
      StackMap stack: java.io.IOException
            pop
            goto 43
        42: .line 107
      StackMap locals:
      StackMap stack: java.lang.IllegalStateException
            pop
        43: .line 110
      StackMap locals:
      StackMap stack:
            return
        end local 10 // java.lang.String jsonReport
        end local 9 // java.lang.String description
        end local 8 // java.lang.String message
        end local 7 // java.lang.String type
        end local 6 // org.apache.tomcat.util.res.StringManager smClient
        end local 5 // java.util.concurrent.atomic.AtomicBoolean result
        end local 4 // int statusCode
        end local 3 // java.lang.Throwable throwable
        end local 2 // org.apache.catalina.connector.Response response
        end local 1 // org.apache.catalina.connector.Request request
        end local 0 // org.apache.catalina.valves.JsonErrorReportValve this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   44     0         this  Lorg/apache/catalina/valves/JsonErrorReportValve;
            0   44     1      request  Lorg/apache/catalina/connector/Request;
            0   44     2     response  Lorg/apache/catalina/connector/Response;
            0   44     3    throwable  Ljava/lang/Throwable;
            1   44     4   statusCode  I
            4   44     5       result  Ljava/util/concurrent/atomic/AtomicBoolean;
            8   44     6     smClient  Lorg/apache/tomcat/util/res/StringManager;
           10   44     7         type  Ljava/lang/String;
           15   44     8      message  Ljava/lang/String;
           18   44     9  description  Ljava/lang/String;
           29   44    10   jsonReport  Ljava/lang/String;
           33   36    11            t  Ljava/lang/Throwable;
           37   41    11       writer  Ljava/io/Writer;
      Exception table:
        from    to  target  type
          29    31      32  Class java.lang.Throwable
          29    40      41  Class java.io.IOException
          29    40      42  Class java.lang.IllegalStateException
    MethodParameters:
           Name  Flags
      request    
      response   
      throwable  
}
SourceFile: "JsonErrorReportValve.java"