package Ġcom . topo graf ix . g px Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonInclude Ċ import Ġcom . fasterxml . jackson . databind . Module Ċ import Ġkotlin . test . assertEquals Ċ import Ġorg . junit . Test Ġas Ġtest Ċ import Ġcom . fasterxml . jackson . module . kotlin .* Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġcom . fasterxml . jackson . data format . xml . Xml Mapper Ċ import Ġcom . fasterxml . jackson . data format . xml . annotation . Jack son XmlElement Wrapper Ċ import Ġcom . fasterxml . jackson . data format . xml . annotation . Jack son Xml Property Ċ import Ġcom . fasterxml . jackson . data format . xml . annotation . Jack son Xml Text Ċ import Ġkotlin . test . assertNotNull Ċ import Ġcom . fasterxml . jackson . datatype . js r 3 1 0 . Java Time Module Ċ Ċ import Ġcom . fasterxml . jackson . module . param names . Parameter Names Module Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . InputStream Ċ import Ġjava . time . LocalDateTime Ċ import Ġjavax . validation . Constraint Violation Ċ import Ġjavax . validation . Validation Ċ import Ġjavax . validation . constraints . Size Ċ import Ġjavax . validation . constraints . Max Ċ import Ġjavax . validation . Validator Ċ import Ġjavax . validation . Validator Factory Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue ĊĊ Ċ const Ġval ĠXML Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< g px Ġversion =" 1 . 1 " Ġcreator =" GDAL Ġ 2 . 1 . 3 " Ġxmlns : xsi =" http :// www . w 3 . org / 2 0 0 1 / XMLSchema - instance " Ġxmlns : o gr =" http :// os geo . org / gdal " Ġxmlns =" http :// www . topo graf ix . com / GP X / 1 / 1 " Ġx si : schema Location =" http :// www . topo graf ix . com / GP X / 1 / 1 Ġhttp :// www . topo graf ix . com / GP X / 1 / 1 / g px . xsd "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< metadata > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< bounds Ġmin lat =" 4 4 0 . 7 5 4 7 8 3 0 0 0 0 0 0 0 0 3 " Ġmin lon ="- 1 1 9 . 2 3 5 4 8 3 0 0 0 0 0 0 0 4 5 " Ġmax lat =" 4 0 . 7 6 8 2 1 7 0 0 0 0 0 0 0 0 7 " Ġmax lon ="- 1 1 9 . 1 8 8 4 6 7 0 0 0 0 0 0 0 3 1 "/> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< time > 2 0 1 1 - 0 2 - 2 6 T 1 8 : 3 6 : 0 1 </ time > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ metadata > ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< w pt Ġlat =" 4 0 . 8 0 2 5 3 9 9 4 7 4 9 8 5 5 9 " Ġlon ="- 1 1 9 . 1 9 4 2 3 6 7 5 4 3 7 8 4 8 "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< name > Ab om ination </ name > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< ele > 2 0 3 4 . 5 </ ele > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< time > 2 0 1 8 - 1 2 - 3 1 T 1 8 : 3 6 : 0 1 </ time > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< mag var > 0 . 2 4 </ mag var > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< ge oid height > 3 3 3 . 9 9 </ ge oid height > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< cmt > comments Ġhere </ cmt > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< desc > description Ġhere </ desc > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< src > US GS </ src > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< fix > 2 d </ fix > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< extensions > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< o gr : description > ID : Ġ 7 6 5 0 </ o gr : description > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< o gr : tes sell ate >- 1 </ o gr : tes sell ate > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< o gr : extr ude > 0 </ o gr : extr ude > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< o gr : visibility >- 1 </ o gr : visibility > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ extensions > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ w pt > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< w pt Ġlat =" 4 0 . 7 8 9 5 4 7 7 5 4 0 6 0 1 5 9 " Ġlon ="- 1 1 9 . 2 1 1 0 1 9 8 2 8 7 5 2 0 4 3 "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< name > Ak le ' Ġthe ĠDrag on </ name > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< dg ps id > 9 9 9 9 </ dg ps id > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ w pt > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< trk > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< name > Run way Ġ 7 L / 2 5 R </ name > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< trk seg > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< trk pt Ġlat =" 4 0 . 7 5 4 7 8 3 " Ġlon ="- 1 1 9 . 2 3 5 4 8 3 "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ trk pt > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< trk pt Ġlat =" 4 0 . 7 6 0 9 5 " Ġlon ="- 1 1 9 . 2 1 8 0 8 3 "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ trk pt > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ trk seg > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ trk > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< trk > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< name > Run way Ġ 7 R / 2 5 L </ name > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< trk seg > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< trk pt Ġlat =" 4 0 . 7 6 2 7 6 7 " Ġlon ="- 1 1 9 . 2 0 6 2 5 "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ trk pt > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< trk pt Ġlat =" 4 0 . 7 6 8 2 1 7 " Ġlon ="- 1 1 9 . 1 8 8 4 6 7 "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ trk pt > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ trk seg > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ trk > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ</ g px > """ Ċ Ċ class ĠG px Test () Ċ { ĊĊĠĠĠ Ġ@ test Ġfun Ġtest Black Rock City Xml File Parsing () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġxml Mapper Ġ= ĠXml Mapper () ĊĠĠĠĠĠĠĠ Ġxml Mapper . register Module ( Parameter Names Module ()) ĊĠĠĠĠĠĠĠ Ġxml Mapper . set Serialization In clusion ( JsonInclude . Include . NON _ NULL ) ĊĠĠĠĠĠĠĠ Ġxml Mapper . configure ( Serialization Feature . IND ENT _ OUTPUT , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġxml Mapper . register Module ( Java Time Module () Ġas ĠModule ?) ĊĠĠĠĠĠĠĠ Ġxml Mapper . disable ( Serialization Feature . WRITE _ DAT ES _ AS _ TIMESTAMP S ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile (" src / test / resources / Black Rock City . g px ") ĊĠĠĠĠĠĠĠ Ġval ĠinputStream : InputStream Ġ= ĠFileInputStream ( file ) ĊĠĠĠĠĠĠĠ Ġval Ġg px 1 Ġ= Ġxml Mapper . readValue < G px >( inputStream ) ĊĠĠĠĠĠĠĠ Ġval Ġxml 2 Ġ= Ġxml Mapper . writeValue AsString ( g px 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġg px 2 Ġ= Ġxml Mapper . readValue < G px >( xml 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( g px 1 , Ġg px 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ test Ġfun Ġtest Jack son Kotlin G px From Xml () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġxml Mapper Ġ= ĠXml Mapper () ĊĠĠĠĠĠĠĠ Ġxml Mapper . register Module ( Parameter Names Module ()) ĊĠĠĠĠĠĠĠ Ġxml Mapper . register Module ( Java Time Module ()) ĊĠĠĠĠĠĠĠ Ġxml Mapper . disable ( Serialization Feature . WRITE _ DAT ES _ AS _ TIMESTAMP S ) ĊĠĠĠĠĠĠĠ Ġxml Mapper . set Serialization In clusion ( JsonInclude . Include . NON _ NULL ); ĊĠĠĠĠĠĠĠ Ġxml Mapper . configure ( Serialization Feature . IND ENT _ OUTPUT , Ġtrue ); ĊĊĠĠĠĠĠĠĠ Ġval Ġg px 1 Ġ= Ġxml Mapper . readValue < G px >( XML ) ĊĠĠĠĠĠĠĠ Ġprintln ( g px 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġxml 2 Ġ= Ġxml Mapper . writeValue AsString ( g px 1 ) ĊĠĠĠĠĠĠĠ Ġprintln ( xml 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġg px 2 Ġ= Ġxml Mapper . readValue < G px >( xml 2 ) ĊĠĠĠĠĠĠĠ Ġprintln ( g px 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( g px 1 , Ġg px 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ test Ġfun Ġtest Java 8 Named Parameters () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeclared Construct ors Ġ= ĠBounds :: class . java . declared Construct ors ĊĠĠĠĠĠĠĠ Ġvar Ġparams Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( declared Method Ġin Ġdeclared Construct ors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("${ declared Method . name } (" ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( param Ġin Ġdeclared Method . parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("${ param . name }, Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . add ( param . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( params . contains All ( set Of (" min lat "," min lon "," max lat "," max lon "))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ test Ġfun Ġtest Jack son Kotlin Bounds From Xml () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġxml Mapper Ġ= ĠXml Mapper () ĊĠĠĠĠĠĠĠ Ġxml Mapper . register Module ( Parameter Names Module ()) ĊĠĠĠĠĠĠĠ Ġxml Mapper . set Serialization In clusion ( JsonInclude . Include . NON _ NULL ); ĊĠĠĠĠĠĠĠ Ġxml Mapper . configure ( Serialization Feature . IND ENT _ OUTPUT , Ġtrue ); ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds 0 Ġ= ĠBounds ( min lat Ġ= Ġ 5 0 . 5 , Ġmin lon Ġ= Ġ 1 3 4 . 6 , Ġmax lat Ġ= Ġ 6 0 . 0 , Ġmax lon Ġ= Ġ 1 5 6 . 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġxml 1 Ġ= Ġxml Mapper . writeValue AsString ( bounds 0 ) ĊĠĠĠĠĠĠĠ Ġprintln ( xml 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġbounds 1 Ġ= Ġxml Mapper . readValue < Bounds >( xml 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( bounds 0 , Ġbounds 1 ) ĊĠĠĠĠĠĠĠ Ġ// val Ġg px 1 Ġ= Ġxml Mapper . readValue < G px >( XML ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ test Ġfun Ġtest Jack son Kotlin Metadata From Xml () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġxml Mapper Ġ= ĠXml Mapper () ĊĠĠĠĠĠĠĠ Ġxml Mapper . register Module ( Parameter Names Module ()) ĊĠĠĠĠĠĠĠ Ġxml Mapper . set Serialization In clusion ( JsonInclude . Include . NON _ NULL ); ĊĠĠĠĠĠĠĠ Ġxml Mapper . configure ( Serialization Feature . IND ENT _ OUTPUT , Ġtrue ); ĊĠĠĠĠĠĠĠ Ġxml Mapper . register Module ( Java Time Module ()) ĊĠĠĠĠĠĠĠ Ġxml Mapper . disable ( Serialization Feature . WRITE _ DAT ES _ AS _ TIMESTAMP S ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġcopyright Ġ= ĠCopyright ( author Ġ= Ġ" Dr . ĠD ude ", Ġyear Ġ= Ġ 2 0 1 8 , Ġlicense Ġ= Ġ" PH D Ġ# 8 8 ") ĊĠĠĠĠĠĠĠ Ġval Ġlink Ġ= ĠLink ( href Ġ= Ġ" http :// google . com /", Ġtext Ġ= Ġ" D ude ĠLink ", Ġtype Ġ= Ġ" fake ") ĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= ĠEmail ( id Ġ= Ġ" d ude ", Ġdomain Ġ= Ġ" d ude . com ") ĊĠĠĠĠĠĠĠ Ġval Ġperson Ġ= ĠPerson ( name Ġ= Ġ" D ude ", Ġemail Ġ= Ġemail , Ġlink Ġ= Ġlink ) ĊĊĠĠĠĠĠĠĠ Ġval Ġm 1 Ġ= ĠMetadata ( name Ġ= Ġ" D ude ", Ġdesc =" bad Ġboy ", Ġlinks Ġ= Ġmutable ListOf (), Ġtime Ġ= ĠLocalDateTime . now (), Ġkeywords =" bad Ġboy ", ĊĠĠĠĠĠĠĠĠ Ġbounds = Bounds ( min lat Ġ= Ġ 5 0 . 5 , Ġmin lon Ġ= Ġ 1 3 4 . 6 , Ġmax lat Ġ= Ġ 6 0 . 0 , Ġmax lon Ġ= Ġ 1 5 6 . 9 ), Ġextensions Ġ= ĠExtensions ( linked Map Of (" A " Ġto Ġ" 1 ", Ġ" B " Ġto Ġ" 2 ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopyright Ġ= Ġcopyright , Ġauthor Ġ= Ġperson ) ĊĠĠĠĠĠĠĠ Ġ// m 1 . extensions Ġ= ĠExtensions ( mutable Map Of (" A " Ġto Ġ" 1 ", Ġ" B " Ġto Ġ" 2 ")) ĊĠĠĠĠĠĠĠ Ġval Ġxml 1 Ġ= Ġxml Mapper . writeValue AsString ( m 1 ) ĊĠĠĠĠĠĠĠ Ġprintln ( xml 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġm 2 Ġ= Ġxml Mapper . readValue < Metadata >( xml 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( m 1 , Ġm 2 ) ĊĠĠĠĠĠĠĠ Ġ// val Ġg px 1 Ġ= Ġxml Mapper . readValue < G px >( XML ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ test Ġfun Ġtest Jack son Kotlin G px Bounds ToJson () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmapper Ġ= Ġj ack son ObjectMapper () ĊĠĠĠĠĠĠĠ Ġval Ġbounds 0 Ġ= ĠBounds ( min lat Ġ= Ġ 5 0 . 5 , Ġmin lon Ġ= Ġ 1 3 4 . 6 , Ġmax lat Ġ= Ġ 6 0 . 0 , Ġmax lon Ġ= Ġ 1 5 6 . 9 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjson 0 Ġ= Ġmapper . writeValue AsString ( bounds 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds 1 Ġ= Ġmapper . readValue < Bounds >( json 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( bounds 0 , Ġbounds 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds 2 : Bounds Ġ= Ġmapper . readValue ( json 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( bounds 0 , Ġbounds 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ test Ġfun Ġtest Basic Validation In Kotlin () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠUser Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ get : Size ( min = 5 , Ġmax = 1 5 ) Ġ// Ġadded Ġannotation Ġuse - site Ġtarget Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ get : Max ( 1 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġage : Int ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// given Ġa Ġvalidator ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠValidation . build Default Validator Factory () ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= Ġfactory . get Validator () ĊĠĠĠĠĠĠĠ Ġval Ġm oo Ġ= ĠUser (" m oo ", Ġ 1 5 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġviolations Ġ= Ġvalidator . validate ( m oo ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( vi olations . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġval Ġv 1 Ġ= Ġviolations . find Ġ{ Ġit . property Path . toString () Ġ== Ġ" name " Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( v 1 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( v 1 . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( v 1 . leaf Bean Ġis ĠUser ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" name ", Ġv 1 . property Path . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" m oo ", Ġv 1 . invalid Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( v 1 . message . contains (" 5 Ġand Ġ 1 5 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġv 2 Ġ= Ġviolations . find Ġ{ Ġit . property Path . toString () Ġ== Ġ" age " Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( v 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( v 2 . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( v 2 . leaf Bean Ġis ĠUser ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 5 0 , Ġv 2 . invalid Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( v 2 . message . contains (" 1 3 0 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ test Ġfun Ġbean Validation () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ// given Ġa Ġvalidator ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠValidation . build Default Validator Factory () ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= Ġfactory . get Validator () ĊĊĠĠĠĠĠĠĠ Ġval Ġxml Mapper Ġ= ĠXml Mapper () ĊĠĠĠĠĠĠĠ Ġxml Mapper . register Module ( Parameter Names Module ()) ĊĠĠĠĠĠĠĠ Ġxml Mapper . register Module ( Java Time Module ()) ĊĠĠĠĠĠĠĠ Ġxml Mapper . disable ( Serialization Feature . WRITE _ DAT ES _ AS _ TIMESTAMP S ) ĊĠĠĠĠĠĠĠ Ġxml Mapper . set Serialization In clusion ( JsonInclude . Include . NON _ NULL ); ĊĠĠĠĠĠĠĠ Ġxml Mapper . configure ( Serialization Feature . IND ENT _ OUTPUT , Ġtrue ); ĊĊĠĠĠĠĠĠĠ Ġ// marshall Ġxml Ġcode Ġinto Ġschema - gen Ġgenerated ĠPO J Os ĊĠĠĠĠĠĠĠ Ġval Ġg px Ġ= Ġxml Mapper . readValue < G px >( XML ) ĊĠĠĠĠĠĠĠ Ġ// and Ġrun Ġvalidator Ġon Ġg px Ġtree ĊĠĠĠĠĠĠĠ Ġval Ġviolations Ġ= Ġvalidator . validate ( g px ) ĊĊĠĠĠĠĠĠĠ Ġ// then Ġshould Ġfind Ġnested Ġmin Ġsize Ġviolation Ġin Ġg px . metadata . bounds . min lat ĊĠĠĠĠĠĠĠ ĠassertFalse ( vi olations . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġval Ġv 1 Ġ= Ġviolations . find Ġ{ Ġit . property Path . toString (). endsWith (" dg ps id ") Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( v 1 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( v 1 . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( v 1 . leaf Bean Ġis ĠW pt ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 9 9 9 9 , Ġv 1 . invalid Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( v 1 . message . contains (" 1 0 2 3 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġv 2 Ġ= Ġviolations . find Ġ{ Ġit . property Path . toString (). endsWith (" min lat ") Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( v 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( v 2 . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( v 2 . leaf Bean Ġis ĠBounds ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( v 2 . get Invalid Value (), Ġg px . metadata ?. bounds ?. min lat ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( v 2 . message . contains (" 9 0 . 0 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }