Part of EPIC #554. Implemented — under review in #687.
registerNodeValidator({ nodeType, name?, skipOnImport?, advanced? }, validate) rejects saves with field-level (propertyName) or node-level violations surfaced in Content Editor and GraphQL errors. Bridge design (ADR-0005): a single Bean Validation bean registered under sentinel nt:base — exactly-once execution per changed node, no clobbering of Java validators — with four repeatable class-level constraints mirroring Jahia's default/advanced/skip-on-import phases. Messages follow JahiaMessageInterpolator semantics: {bundle.key} → resource-bundle i18n, anything else verbatim. Fail-closed on throwing validators. Async callbacks supported (#688).
Live-verified on Jahia 8.2 (phases, verbatim special-character messages, GqlConstraintViolationException shape). Docs: reference 3-node-validators. Tests: full Bean Validation chain against real Hibernate Validator 6.2.0.Final + registrar state machine + nodeValidatorTest.cy.ts.
Part of EPIC #554. Implemented — under review in #687.
registerNodeValidator({ nodeType, name?, skipOnImport?, advanced? }, validate)rejects saves with field-level (propertyName) or node-level violations surfaced in Content Editor and GraphQL errors. Bridge design (ADR-0005): a single Bean Validation bean registered under sentinelnt:base— exactly-once execution per changed node, no clobbering of Java validators — with four repeatable class-level constraints mirroring Jahia's default/advanced/skip-on-import phases. Messages followJahiaMessageInterpolatorsemantics:{bundle.key}→ resource-bundle i18n, anything else verbatim. Fail-closed on throwing validators. Async callbacks supported (#688).Live-verified on Jahia 8.2 (phases, verbatim special-character messages, GqlConstraintViolationException shape). Docs: reference 3-node-validators. Tests: full Bean Validation chain against real Hibernate Validator 6.2.0.Final + registrar state machine +
nodeValidatorTest.cy.ts.