package Ġorg . jboss . rest easy . reactive . server . runtime . kotlin Ċ Ċ import Ġio . vertx . core . Vert x Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . eclipse . micro profile . context . Managed Executor Ċ import Ġorg . jboss . rest easy . reactive . server . core . Re ste asy Reactive RequestContext Ċ import Ġorg . jboss . rest easy . reactive . server . spi . Endpoint Invoker Ċ import Ġorg . jboss . rest easy . reactive . server . spi . Server Rest Handler Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ private Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Coroutine Invocation Handler :: class . java ) Ċ Ċ class ĠCor outine Invocation Handler ( private Ġval Ġinvok er : ĠEndpoint Invoker , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcoroutine Scope : ĠCor outine Scope ) Ġ: ĠServer Rest Handler Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ( request Context : ĠRe ste asy Reactive RequestContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Context . result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( inv oker Ġ! is ĠCor outine Endpoint Invoker ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context . handle Exception ( IllegalStateException (" Not Ġa Ġcoroutine Ġinvok er "), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdispatcher : ĠCor outine Dispatcher Ġ= ĠVert x . current Context ()?. let (:: Vert x Dispatcher ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" No ĠVert x Ġcontext Ġfound ") ĊĊĠĠĠĠĠĠĠ Ġlogger . debug (" Handling Ġrequest Ġwith Ġdispatcher Ġ{}", Ġdispatcher ) ĊĊĠĠĠĠĠĠĠ Ġrequest Context . require C DI Request Scope () ĊĠĠĠĠĠĠĠ Ġrequest Context . suspend () ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch ( context Ġ= Ġdispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context . result Ġ= Ġinvok er . invoke Coroutine ( request Context . endpoint Instance , Ġrequest Context . parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpassing Ġtrue Ġsince Ġthe Ġtarget Ġdoesn 't Ġchange Ġand Ġwe Ġwant Ġresponse Ġfilters Ġto Ġbe Ġable Ġto Ġknow Ġwhat Ġthe Ġresource Ġmethod Ġwas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context . handle Exception ( t , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Context . resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ