/* Ċ Ġ* Ġ ĠCopyright Ġ( c ) Ġ 2 0 1 6 , ĠKin vey , ĠInc . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠThis Ġsoftware Ġis Ġlicensed Ġto Ġyou Ġunder Ġthe ĠKin vey Ġterms Ġof Ġservice Ġlocated Ġat Ċ Ġ* Ġhttp :// www . kin vey . com / terms - of - use . ĠBy Ġdownloading , Ġaccessing Ġand / or Ġusing Ġthis Ċ Ġ* Ġsoftware , Ġyou Ġhereby Ġaccept Ġsuch Ġterms Ġof Ġservice Ġ Ġ( and Ġany Ġagreement Ġreferenced Ċ Ġ* Ġthere in ) Ġand Ġagree Ġthat Ġyou Ġhave Ġread , Ġunderstand Ġand Ġagree Ġto Ġbe Ġbound Ġby Ġsuch Ċ Ġ* Ġterms Ġof Ġservice Ġand Ġare Ġof Ġlegal Ġage Ġto Ġagree Ġto Ġsuch Ġterms Ġwith ĠKin vey . Ċ Ġ* Ċ Ġ* ĠThis Ġsoftware Ġcontains Ġvaluable Ġconf idential Ġand Ġpropri etary Ġinformation Ġof Ċ Ġ* ĠK IN VE Y , ĠINC Ġand Ġis Ġsubject Ġto Ġapplicable Ġlicensing Ġagreements . Ċ Ġ* ĠUnauthorized Ġreproduction , Ġtransmission Ġor Ġdistribution Ġof Ġthis Ġfile Ġand Ġits Ċ Ġ* Ġcontents Ġis Ġa Ġviolation Ġof Ġapplicable Ġlaws . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . kin vey . java . core Ċ Ċ import Ġcom . google . api . client . http . Http MediaType Ċ import Ġcom . google . api . client . http . HttpResponse Ċ import Ġcom . google . api . client . http . HttpResponse Exception Ċ import Ġcom . google . api . client . json . Json Ċ import Ġcom . google . api . client . json . Json Factory Ċ import Ġcom . google . api . client . json . Json Parser Ċ import Ġcom . google . common . io . Closer Ċ import Ġcom . kin vey . java . Kin vey Exception Ċ import Ġcom . kin vey . java . store . file . FileUtils Ċ Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ Ċ /** Ċ Ġ* Ġ@ author Ġm 0 rg an ic Ċ Ġ*/ Ċ open Ġclass ĠKin vey JsonResponse Exception Ċ /** Ċ Ġ* Ġ@ param Ġresponse Ġraw Ġhttp Ġresponse Ċ Ġ* Ġ@ param Ġdetails Ġ Ġdetail Ġmessage Ġgive Ġby Ġthe Ġresponse Ċ Ġ* Ġ@ param Ġmessage Ġ Ġgeneral Ġmessage Ċ Ġ*/ Ċ private Ġconstructor ( response : ĠHttpResponse ?, Ġopen Ġval Ġdetails : ĠKin vey Json Error ?, Ġoverride Ġval Ġmessage : ĠString ) ĊĠĠĠ Ġ: ĠHttpResponse Exception ( response ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠserialVersionUID Ġ= Ġ- 5 5 8 6 7 0 7 1 8 0 5 1 8 3 4 3 6 1 3 L ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġjson Factory Ġjson Ġfactory Ġto Ġuse Ġwhile Ġparsing Ġthe Ġresponse ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġresponse ĠĠĠ Ġraw Ġhttp Ġresponse ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġexception Ġobject Ġbuilt Ġup Ġfrom Ġthe Ġraw Ġhttp Ġresponse ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( json Factory : ĠJson Factory , Ġresponse : ĠHttpResponse ?): ĠKin vey JsonResponse Exception Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkin vey JsonResponse Exception : ĠKin vey JsonResponse Exception ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdetails : ĠKin vey Json Error ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response ?. is Success StatusCode Ġ== Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠHttp MediaType . equals Ignore Parameters ( Json . MEDIA _ TYPE , Ġresponse . contentType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġresponse . content Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparser : ĠJson Parser ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcloser Ġ= ĠClo ser . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= Ġcloser . register ( ByteArray OutputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . copy Streams ( response . content , ĠoutputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= ĠByteArrayInputStream ( output Stream . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser Ġ= Ġjson Factory . create Json Parser ( response . content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Ġ= ĠKin vey Json Error . parse ( json Factory , ĠinputStream , Ġresponse . content Charset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠKin vey Exception (" Unable Ġto Ġparse Ġthe ĠJSON Ġin Ġthe Ġresponse ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exam ine ĠBL Ġor ĠD LC Ġto Ġensure Ġdata Ġformat Ġis Ġcorrect . ĠIf Ġthe Ġexception Ġis Ġcaused Ġby Ġ` key Ġ< som key >`, Ġthen Ġ< some key > Ġmight Ġbe Ġa Ġdifferent Ġtype Ġthan Ġis Ġexpected Ġ( int Ġinstead Ġof Ġof Ġstring )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parser Ġ== Ġnull ) Ġ{ Ġresponse . ignore () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( details Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparser . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcloser . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġit Ġwould Ġbe Ġbad Ġto Ġthrow Ġan Ġexception Ġwhile Ġthrowing Ġan Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetail Message Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( details Ġ== Ġnull ) Ġ" unknown " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠString . format ("% s % n % s ", Ġdetails . error , Ġdetails . description ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġkin vey JsonResponse Exception Ġ= ĠKin vey JsonResponse Exception ( response , Ġdetails , Ġdetail Message ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġkin vey JsonResponse Exception ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ