Ein Validation Result bündelt das Ergebnis einer Validierung und besteht aus 0 bis n Validation Messages, welche alle einen unterschiedlichen Message Type haben können. Ein ValidationResult ist imutable, wodurch sichergestellt ist, dass sich ein einmal ausgewertetes Ergebnis nicht mehr ändern kann.
                         Für den Zugriff auf die einzelnen Messages bietet die
                         Schnittstelle IValidationResult die
                         folgenden Methoden:
                       
            
    List<IValidationMessage> getAll();
    List<IValidationMessage> getErrors();
    List<IValidationMessage> getInfoErrors();
    List<IValidationMessage> getWarnings();
    List<IValidationMessage> getInfos();
                         Die Methode getAll() liefert alle Messages, die anderen
                         Methoden liefern die Messages des entsprechenden Typs. Die
                         Messages sind in der Reihenfolge angeordnet, wie sie
                         hinzugefügt wurden. Die Ergebnisliste ist nicht modifizierbar
                         (unmodifieable). Die Default
                         Implementierung erzeugt die Listen lazy
                         bei der ersten Anfrage. (Das gilt auch für die
                         All Liste.) Falls man mit der
                         First Worst
                            Message auskommt, kann das Rechenleistung und Speicher
                         sparen.
                       
            
                         In einigen Anwendungsfällen kann es ausreichen, nur die erste
                         aufgetretenen Message mit höchstem Schweregrad zu kennen. Dazu
                         kann die folgende Methode auf einem
                         IValidationResult verwendet werden:
                       
            
    IValidationMessage getWorstFirst();
                         Diese Methode liefert immer
                         eine Message zurück. Gibt es keine
                         echten Messages, wird eine
                         Message vom Typ OK zurückgegeben. Diese hat
                         per Konvention keinen Message Text und Message Context.
                         Ansonsten wird die Message zurückgegeben, welche den höchsten
                         Schweregrad hat. Existieren mehrere Messages mit diesem
                         Schweregrad, wird die herangezogen, welche als erstes
                         aufgetreten ist, bzw. dem Ergebnis hinzugefügt wurde.
                       
            
Die Default Implementierung aktualisiert den Wert immer direkt beim Hinzufügen neuer Messages (Bei der Message Verkettung oder mit Hilfe des Validation Result Builder), so dass dieser nicht explizit berechnet werden muss.
Die Abfrage der First Worst Message ist also effizienter als die Verwendung der Message Listen
In bestimmten Fällen sind die eigentlichen Messages gar nicht relevant, sondern nur, ob das Ergebnis valide ist oder nicht. Dafür kann die folgende Methode verwendet werden:
    boolean isValid();
                         Diese gibt false zurück, falls es
                         mindestens eine Messages gibt, welche nicht valid ist und
                         ansonsten true.
                       
            
Die Methode:
    boolean isOk();
                         liefert false zurück, falls es mindestens
                         eine Message mit Schweregrad INFO oder
                         höher gibt, und sonst true
                       
            
                         Die Accessor Klasse ValidationResult
                         liefert folgende statische Methoden zur Erzeugung eines
                         IValidationResult mit genau einer
                         Validation Message:
                       
            
    public static IValidationResult create() {...}
    public static IValidationResult ok() {...}
    public static IValidationResult create(final IValidationMessage message) {...}
    public static IValidationResult warning(final String text) {...}
    public static IValidationResult infoError(final String text) {...}
    public static IValidationResult error(final String text){...}
    public static IValidationResult warning(final String context, final String text) {...}
    public static IValidationResult infoError(final String context, final String text) {...}
    public static IValidationResult error(final String context, final String text){...}
                         Mit Hilfe der folgenden Methode kann ein
                         IValidationResultBuilder
                         erzeugt werden:
                       
            
    public static IValidationResultBuilder builder() {...}Ein Validation Result ist immutable. Daher können zu einem Ergebnis nachträglich auch keine Messages hinzugefügt werden. Es ist jedoch möglich, zu einem Validation Result eine Message hinzuzufügen, indem man das Ergebnis kopiert und dabei die neue Nachricht hinzufügt. Dazu können die folgenden Methoden verwendet werden:
    IValidationResult withMessage(final IValidationMessage message);
    IValidationResult withError(final String text);
    IValidationResult withInfoError(final String text);
    IValidationResult withWarning(final String text);
    IValidationResult withInfo(final String text);
    IValidationResult withError(final String context, final String text);
    IValidationResult withInfoError(final String context, final String text);
    IValidationResult withWarning(final String context, final String text);
    IValidationResult withInfo(final String context, final String text);
                         Das resultierende Validation Result ist eine Kopie des
                         aktuellen Validation Results, welchem die übergebene Message
                         hinzugefügt wurde. Die Methode
                         withMessage() verlangt eine
                         IValidationMessage, die anderen Methoden
                         sind Convenience Methoden, welche die
                         Validation Message
                         mit Hilfe des Parameter text (und optional
                         context) erzeugen.
                       
            
Das folgende Beispiel soll das verdeutlichen:
  1      IValidationResult result = ValidationResult.create();
  2      result = result.withInfo("Info message");
  3      result = result.withError("Error message");
  4      result = result.withWarning("Warn message");
                         Es werden dem initialen Validation Result (Zeile 1) drei
                         weitere Messages hinzugefügt. Bei dieser Methode ist darauf zu
                         achten, dass das result immer wieder neue
                         zugewiesen werden muss. Um diese potentielle Fehlerquelle zu
                         vermeiden, kann auch ein
                         IValidationResultBuilder
                         verwendet werden.
                       
            
                         Mit Hilfe der folgenden Methode kann der Context für alle
                         Validation Messages
                         eines IValidationResult geändert werden,
                         indem eine Kopie erzeugt wird und auf dieser der Context
                         geändert wird:
                       
            
    IValidationResult withContext(final String context);
                         Die Schnittstelle IValidationResultBuilder
                         hat die folgenden Methoden:
                       
            
    IValidationResultBuilder addMessage(final IValidationMessage message);
    IValidationResultBuilder addInfo(final String text);
    IValidationResultBuilder addWarning(final String text);
    IValidationResultBuilder addInfoError(final String text);
    IValidationResultBuilder addError(final String text);
    IValidationResultBuilder addInfo(final String context, final String text);
    IValidationResultBuilder addWarning(final String context, final String text);
    IValidationResultBuilder addInfoError(final String context, final String text);
    IValidationResultBuilder addError(final String context, final String text);
    IValidationResultBuilder addResult(final IValidationResult result);
    IValidationResult build();
                         Der Builder liefert Methoden zum Hinzufügen von
                         Validation Messages.
                         Mit Hilfe der Methode addResult() kann man
                         alle Messages eines anderen
                         IValidationResult hinzufügen. Mit Hilfe der
                         Methode build() wird das erzeugte
                         IValidationResult zurückgegeben.
                       
            
                         Das folgende Beispiel verwendet den
                         IValidationResultBuilder für die Erzeugung
                         eines Validation Result:
                       
            
  1      final IValidationResultBuilder builder = ValidationResult.builder();
  2      builder
  3          .addInfo("Info message")
  4          .addError("Error message")
  5          .addWarning("Warn message");
  6          
  7      final IValidationResult result = builder.build();Das resultierende Validation Result ist identisch mit dem obigen Beispiel bei der Message Verkettung. Der Vorteil beim Builder Ansatz ist, dass die Neuzuweisung entfällt (welche bei der Message Verkettung versehentlich vergessen werden könnte).