/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠNet flix , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . netflix . spin n aker . k ork . plugins . sdk . http client Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . netflix . spin n aker . k ork . plugins . api . http client . Response Ċ import Ġjava . io . InputStream Ċ import Ġjava . lang . Exception Ċ import Ġjava . util . Optional Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ /** Ċ Ġ* ĠAn ĠOk Http - back ed ĠHTTP Ġclient Ġ[ Response ]. Ċ Ġ*/ Ċ class ĠOk 3 Response ( ĊĠ Ġprivate Ġval ĠobjectMapper : ĠObjectMapper , ĊĠ Ġprivate Ġval Ġresponse : Ġokhttp 3 . Response ?, ĊĠ Ġprivate Ġval Ġexception : ĠException ? Ċ ) Ġ: ĠResponse Ġ{ ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠOk 3 HttpClient Ġwill Ġclose Ġthe Ġresponse Ġimmediately Ġafter Ġcreating Ġthis Ġresponse Ġobject . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠUsing Ġ` peek Body ` Ġwill Ġcopy Ġthe Ġresponse Ġbody Ġinto Ġa Ġdifferent Ġscope Ġso Ġthat Ġthe Ġoriginal Ġcan Ġbe Ġclosed ĊĠĠ Ġ* Ġand Ġthis Ġobject Ġcan Ġexist Ġas Ġlong Ġas Ġit Ġneeds Ġto . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġval Ġresponse Body : ĠResponse Body ? Ġ= Ġresponse ?. peek Body ( Long . MAX _ VALUE ) ĊĊĠ Ġprivate Ġval Ġlog Ġby Ġlazy Ġ{ ĠLoggerFactory . getLogger ( java Class ) Ġ} ĊĊĠ Ġoverride Ġfun Ġget Body (): ĠInputStream ? Ġ{ ĊĠĠĠ Ġreturn Ġresponse Body ?. use Ġ{ Ġit . byte Stream () Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġget Body ( expected Type : ĠClass < T >): ĠT ? Ġ{ ĊĠĠĠ Ġval Ġbody Ġ= Ġresponse Body ?. use Ġ{ Ġit . string () Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġreturn ĠobjectMapper . readValue ( body , Ġexpected Type ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Exception (): ĠOptional < Exception > Ġ= ĊĠĠĠ ĠOptional . of Nullable ( exception ) ĊĊĠ Ġoverride Ġfun Ġget StatusCode (): ĠInt Ġ= ĊĠĠĠ Ġresponse ?. code () Ġ?: Ġ- 1 ĊĊĠ Ġoverride Ġfun Ġget Headers (): ĠMap < String , ĠString > Ġ= ĊĠĠĠ Ġresponse ĊĠĠĠĠĠ Ġ? . headers () ĊĠĠĠĠĠ Ġ? . to Multimap () ĊĠĠĠĠĠ Ġ? . map Ġ{ Ġit . key Ġto Ġit . value . join ToString (",") Ġ} ĊĠĠĠĠĠ Ġ? . toMap () ĊĠĠĠĠĠ Ġ?: Ġempty Map () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThis Ġmethod Ġshould Ġnot Ġbe Ġcalled Ġby Ġanyone , Ġas Ġit 's Ġthe ĠJava Ġfinal ization Ġmethod Ġand Ġwill Ġbe Ġused Ġto Ġcleanup ĊĠĠ Ġ* Ġany Ġopen Ġstreams Ġwhen Ġthe Ġobject Ġis Ġdestroyed . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġfinalize () Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġresponse ?. body ()?. close () ĊĠĠĠĠĠ Ġresponse Body ?. close () ĊĠĠĠ Ġ} Ġcatch Ġ(@ Suppress (" Too Generic Exception Ca ught ") Ġe : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġlog . warn (" Failed Ġto Ġcleanup Ġresource ", Ġe ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ