/** Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠExp edia , Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . exp edi ag roup . graphql . examples . spark Ċ Ċ import Ġorg . apache . log 4 j . Property Configurator Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġspark . Spark . before Ċ import Ġspark . Spark . get Ċ import Ġspark . Spark . init ExceptionHandler Ċ import Ġspark . Spark . internal ServerError Ċ import Ġspark . Spark . options Ċ import Ġspark . Spark . port Ċ import Ġspark . Spark . post Ċ import Ġjava . util . Properties Ċ Ċ class ĠApplication Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Logger () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport ( 5 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefine Routes () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinit Logger () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Properties Ġ= ĠProperties () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Properties . setProperty (" log 4 j . root Logger ", Ġ" DEBUG , CONSOLE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Properties . setProperty (" log 4 j . appender . CONSOLE ", Ġ" rg . apache . log 4 j . Console Appender ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Properties . setProperty (" log 4 j . appender . CONSOLE . layout ", Ġ" rg . apache . log 4 j . Pattern Layout ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Properties . setProperty (" log 4 j . appender . CONSOLE . layout . conversion Pattern ", Ġ"% d { yyyy - MM - dd ĠHH : mm : ss } Ġ%- 5 p Ġ% c { 1 } :% m % n ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Configurator . configure ( log Properties ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdefine Routes () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ExceptionHandler Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . exit ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/ hello ") Ġ{ Ġ_, Ġ_ Ġ-> Ġ" Hello , ĠWorld " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgraph QL Handler Ġ= ĠGraphQL Handler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost ("/ graphql ") Ġ{ Ġrequest , Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph QL Handler . handle ( request , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal ServerError () Ġ{ Ġ_, Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . status ( 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . type (" application / text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unable Ġto Ġprocess Ġrequest " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions ("/ graphql ") Ġ{ Ġ_, Ġ_ Ġ-> Ġ" ok " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore ("/ graphql ") Ġ{ Ġrequest , Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . header (" Access - Control - Allow - Origin ", Ġ"* ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . header (" Access - Control - Allow - Methods ", Ġ" GET , POST , OPTIONS ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ