/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠWeb 3 ĠLabs ĠL TD . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . web 3 j . cord a . protocol Ċ Ċ import Ġjava . lang . reflect . Invocation Handler Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . lang . reflect . Proxy Ċ import Ġjavax . ws . rs . Client ErrorException Ċ import Ġorg . glass fish . j ersey . client . proxy . Web Resource Factory Ċ import Ġorg . web 3 j . cord a . api . Authentication Filter Ċ Ċ object ĠClient Builder Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġa ĠJ AX - RS Ġclient Ġwith Ġthe Ġgiven Ġtype Ġ[ T ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġbuild ( type : ĠClass < T >, Ġservice : ĠC ord a Service , Ġtoken : ĠString ? Ġ= Ġnull ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( type . is Interface ) Ġ{ Ġ" Client Ġclass Ġmust Ġbe Ġan Ġinterface " Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġservice . client . target ( service . uri ) ĊĠĠĠĠĠĠĠ Ġtoken ?. run Ġ{ Ġtarget . register ( Authentication Filter . token ( token )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠWeb Resource Factory . new Resource ( type , Ġtarget ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġa ĠJ AX - RS Ġclient Ġwhich Ġmaps Ġclient Ġerrors Ġto Ġother Ġexceptions . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġbuild ( ĊĠĠĠĠĠĠĠ Ġtype : ĠClass < T >, ĊĠĠĠĠĠĠĠ Ġservice : ĠC ord a Service , ĊĠĠĠĠĠĠĠ Ġmapper : Ġ( Client ErrorException ) Ġ-> ĠRuntimeException , ĊĠĠĠĠĠĠĠ Ġtoken : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= Ġbuild ( type , Ġservice , Ġtoken ) ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠClient ErrorHandler ( client , Ġmapper ) ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn ĠProxy . new Proxy Instance ( type . class Loader , ĠarrayOf ( type ), Ġhandler ) Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠClient ErrorHandler < T >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġclient : ĠT , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmapper : Ġ( Client ErrorException ) Ġ-> ĠRuntimeException ĊĠĠĠ Ġ) Ġ: ĠInvocation Handler Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( proxy : ĠAny , Ġmethod : ĠMethod , Ġargs : ĠArray < out ĠAny >? ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInvoke Ġthe Ġoriginal Ġmethod Ġon Ġthe Ġclient ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmethod . invoke ( client , Ġ*( args Ġ?: ĠarrayOf ())). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Proxy . is Proxy Class ( it . java Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġresult Ġis Ġa ĠJ ersey Ġweb Ġresource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġwe Ġneed Ġto Ġwrap Ġit Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProxy . new Proxy Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . returnType . class Loader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( method . returnType ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClient ErrorHandler ( it , Ġmapper ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClient ErrorException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġmapper . invoke ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvocation TargetException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġif Ġ( e . target Exception Ġis ĠClient ErrorException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . invoke ( e . target Exception Ġas ĠClient ErrorException ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . target Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ