Skip to main content

Validation

The LionWeb-JVM project includes a comprehensive validation framework located in the io.lionweb.utils package. Validators return a ValidationResult containing zero or more Issue objects, each with a severity level and a human-readable message.

Issue Severity

Every Issue has an IssueSeverity:

SeverityMeaning
ERRORThe model or language is structurally invalid and cannot be used reliably.
WARNINGSomething is unusual but may still be usable.
INFOInformational note, not a problem.

Validating a Language Definition

Use LanguageValidator to check that a language you have authored programmatically (or loaded from JSON) is internally consistent — for example, that all feature types resolve, that IDs are unique, and that required fields are populated.

import io.lionweb.language.Language;
import io.lionweb.utils.Issue;
import io.lionweb.utils.LanguageValidator;
import io.lionweb.utils.ValidationResult;

LanguageValidator validator = new LanguageValidator();
ValidationResult result = validator.validate(myLanguage);

if (!result.isSuccessful()) {
for (Issue issue : result.getIssues()) {
System.out.println(issue.getSeverity() + ": " + issue.getMessage());
}
}

isSuccessful() returns true when there are no ERROR-level issues.

Validating a Node Tree

Use NodeTreeValidator to check the structural integrity of a model — for example, that containment relationships are well-formed and that nodes have valid IDs.

import io.lionweb.model.Node;
import io.lionweb.utils.NodeTreeValidator;
import io.lionweb.utils.ValidationResult;

NodeTreeValidator validator = new NodeTreeValidator();
ValidationResult result = validator.validate(rootNode);

if (!result.isSuccessful()) {
result.getIssues().forEach(issue ->
System.out.println(issue.getSeverity() + ": " + issue.getMessage()));
}

Validating a Serialization Chunk

Use ChunkValidator when loading untrusted JSON files to verify that the chunk structure is valid before attempting full deserialization.

import io.lionweb.serialization.LowLevelJsonSerialization;
import io.lionweb.serialization.data.SerializationChunk;
import io.lionweb.utils.ChunkValidator;
import io.lionweb.utils.ValidationResult;

LowLevelJsonSerialization lowLevel = new LowLevelJsonSerialization();
SerializationChunk chunk = lowLevel.deserializeSerializationBlock(jsonFile);

ChunkValidator validator = new ChunkValidator();
ValidationResult result = validator.validate(chunk);

if (!result.isSuccessful()) {
result.getIssues().forEach(System.out::println);
}

Use PartitionChunkValidator instead when the chunk is expected to contain exactly one partition (a common constraint in repository interactions).

Specific Validators

ClassValidates
LanguageValidatorLanguage definitions (concepts, features, IDs, keys)
NodeTreeValidatorNode tree structure and containment integrity
ChunkValidatorRaw SerializationChunk objects loaded from JSON
PartitionChunkValidatorChunks expected to contain a single partition

Validation Utilities

CommonChecks provides reusable helper methods used internally by the validators above. You can call these directly if you need to implement a custom validator by extending the Validator base class.