A
constraint violation has a
message (and template), but also a
path to the property that did not pass validation.
In your example, you specify the message template, which leads to the message being loaded from
ViolationMessages.properties. The property node takes the current property path (for the root object that's empty), and appends
something to it. Those are two different attributes of the constraint violation.