package Ġcom . pre z . api Ċ Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . core . Nested Exception Utils Ċ import Ġorg . springframework . core . annotation . Order Ċ import Ġorg . springframework . http . HttpStatus . INTERNAL _ SERVER _ ERROR Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . web . server . ResponseStatus Exception Ċ import Ġorg . springframework . web . server . Server Web Exchange Ċ import Ġorg . springframework . web . server . Web ExceptionHandler Ċ import Ġreactor . core . publisher . Mono Ċ Ċ /** Ċ Ġ* ĠSince ĠWeb flux / Spring Ġdoes Ġnot Ġhandle ĠCLIENT ĠDIS CONNECTED ĠERROR Ġ( Ġto Ġbe Ġexact , Ġit Ġ" handles " Ġit Ġby Ġreturning Ġa Ġ` 2 0 0 ` Ġhttp Ġstatus Ġcode Ġresponse Ġwith Ġan Ġempty Ġbody Ġ), Ċ Ġ* Ġthis Ġclass Ġtries Ġto Ġimplement Ġsome Ġlogic Ġfor Ġthis Ġcase Ġonly , Ġmostly Ġby Ġrepro ducing Ġthe Ġbehaviour Ġof Ġthe Ġ" fault y " ĠSpring Ġone . Ċ Ġ* Ġ@ see Ġ[ org . springframework . web . server . adapter . Http Web Handler Adapter . handle Un resolved Error ] Ġline Ġ 2 6 5 Ġto Ġ 2 7 0 . Ċ Ġ*/ Ċ @ Component Ċ @ Order (- 2 ) Ċ class ĠDis connected Client Web ExceptionHandler Ġ: ĠWeb ExceptionHandler Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠLoggerFactory . getLogger ( Disconnected Client Web ExceptionHandler :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ( exchange : ĠServer Web Exchange , Ġex : ĠThrowable ): ĠMono < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Query Ġ= Ġexchange . request . uri . query ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġexchange . response ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Commit ted Ġ&& Ġis Disconnected Client Error ( ex ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAfter Ġthe Ġresponse Ġis Ġcommitted , Ġpropagate Ġerrors Ġto Ġthe Ġserver Ġand Ġlight Ġa Ġc andle ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . error (" Error Ġfor Ġ${ request Query } Ġbut ĠServer HttpResponse Ġalready Ġcommitted Ġ( Ġ${ response . statusCode } Ġ) ", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMono . error ( ResponseStatus Exception ( INTERNAL _ SERVER _ ERROR , Ġ" Unexpected Ġerror Ġ: Ġ${ ex . java Class . name } ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! response . is Commit ted Ġ&& Ġis Disconnected Client Error ( ex ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . set StatusCode ( INTERNAL _ SERVER _ ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . error (" 5 0 0 ĠServer ĠError Ġfor Ġ${ request Query }", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMono . empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠMono . error ( ex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp let ely Ġcopied Ġfrom Ġ[ org . springframework . web . server . adapter . Http Web Handler Adapter . DIS CONNECTED _ CLIENT _ EXCEPTION S ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠSimilar Ġdeclaration Ġexists Ġin ĠAbstract Sock Js Session .. ĊĠĠĠ Ġprivate Ġval Ġdisconnected Client Exceptions Ġ= Ġset Of (" Abort ed Exception ", Ġ" Client Abort Exception ", Ġ" EOF Exception ", Ġ" E of Exception ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp let ely Ġcopied Ġfrom Ġ[ org . springframework . web . server . adapter . Http Web Handler Adapter . is Disconnected Client Error ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Disconnected Client Error ( ex : ĠThrowable ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠNested Exception Utils . get Most Specific Cause ( ex ). message ?. lowercase (). or Empty () ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage . contains (" broken Ġpipe ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġmessage . contains (" connection Ġreset Ġby Ġpeer ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( disconnected Client Exceptions . contains ( ex . java Class . simple Name )) ĊĠĠĠ Ġ} Ċ }