Na stránce princip je uveden obecný postup, jakým prochází soubor během validace. Zde se zaměříme na jádro vlastní validace, na šestý bod - "Spuštění vlastního validačního procesu".
Každá doména definuje proces, kterým validace souboru probíhá. Tento proces je definován XML souborem, který kromě základních řídících elementů obsahuje fragmenty scriptovacího jazyka, v němž je psán vlastní program. Použitý scriptovací jazyk je JavaScript (implementace Rhino), který byl vybrán pro svoji podobnost Javě a možnost zcela těsného spojení s Java třídami - lze využívat funkce nabízené Validačním serverem i případných Java knihoven.
Hlavní soubor definující proces validace se nazývá "process.xml" (název může být změněn - viz konfigurace serveru) a je uložen v adresáři domény.
Pro začátek bude nejlepší ukázka:
<?xml version="1.0" ?> <!DOCTYPE validation-process PUBLIC "-//Validation-Process //" "process.dtd"> <validation-process> <!-- volani podprocesu, ktery zkontroluje, zda se jedna o Java zdrojak --> <call process="/common/checkjavasource.xml"> <param name="file">inputFile</param> </call> <!-- Vse uvnitr tohoto elementu ma casovy limit provedeni 5000 ms --> <time-limited time="5000" exceed-message="ppa1.prekrocil"> <!-- prelozim zaslany soubor --> <call process="/common/compilejava.xml"> <param name="file">inputFile</param> </call> </time-limited> <!-- Pokud uz je ve ValidationResult nejaka chyba, koncim --> <quit-if-error/> <!-- Script --> <script> var testOuput = new java.io.File(workDir,'test.out'); var vzorOuput = new java.io.File(domainDir,'vzor.out'); </script> <time-limited time="3000" exceed-message="ppa1.prekrocil"> <!-- zjistim vystup testovane tridy --> <call process="/common/invokejava.xml"> <param name="mainClass">className</param> <param name="classPath">workDir</param> <param name="stdIn">null</param> <param name="stdOut">testOutput</param> <param name="stdErr">null</param> <param name="args">null</param> </call> </time-limited> <!-- porovnam co vylezlo a co melo vylezt --> <call process="/common/comparefiles.xml"> <param name="file1">vzorOutput</param> <param name="file2">testOutput</param> </call> </validation-process>
K dispozici je process.dtd definující strukturu těchto XML souborů.
Tento příklad provádí následující kroky:
O struktuře XML souborů s popisem procesů je celý tento dokument
Každé validaci je přiřazena instance třídy FullValidationResult, do které se během validace ukládají všechny relevantní informace. Tyto informace jsou tří druhů: Informace, varování a chyba. První dva druhy se liší pouze způsobem, jakým jsou poté vizuálně reprezentovány (tj. info "zeleně", varování "žlutě"), ale nijak nemění výsledek validace.
Výsledek validace ale ovlivňují chyby, které mohou být přidány do výstupu validace buď "ručně" použitím příslušných XML elementů, nebo přímo některými službami validačního serveru (např. třída jistící překlad Java tříd přidá chyby překladu). Každá chyba přidaná do FullValidationResult je celé číslo - kód - definovaný v rozhraní ValidationResult, Chybové kódy jsou:
VR_OK | Validace proběhla v pořádku |
---|---|
VR_SERVER_ERROR | Validace neuspěla kvůli interní chybě validačního serveru. |
VR_COMPILATION_ERROR | Chyba při překladu |
VR_RUNTIME_ERROR | Chyba při běhu validovaného programu |
VR_BAD_RESULTS | Špatné výstupy validovaného programu |
VR_TIMEOUT | Vypršení času - validace či některá její část překročila max. povolenou dobu |
VR_INVALID_DOMAIN | Neexistující validační doména |
VR_INVALID_INPUT | Chybný vstup validace (špatné parametry v ValidationInput) |
VR_INVALID_LIBRARY_CALL | Použití nepovolené knihovny programovacího jazyka |
VR_CUSTOM_ERROR | Nespecifikovaná chyba - může jí generovat script, pokud nezapadá do uvedených druhů chyb |