loading table of contents...

7.15.3. Immediate Validation

Write requests that violate hard constraints of your document type model can be aborted when a validator fails. Typical use cases include:

  • Preventing a client from uploading an image that is too large.

  • Making sure that a document does not link to itself directly.

[Caution]Caution

Blocking writes is not normally useful for text properties, because text values are saved continuously as the user enters data, and a write interceptor might not be able to operate appropriately during the first saves. For blobs or link lists, the impact on the user experience is typically less of a problem. In any case, you need to make sure that the user experience is not impacted negatively.

For implementing immediate validation, you can create an instance of the class ValidatingContentWriteInterceptor as a Spring bean and populate its validators property with a list of PropertyValidator objects. When the validators are configured to report an error issue, an offending write will not be executed (that is, the requested value will not be saved).

A configuration that limits the size of images in the data property of CMPicture documents to 1 Mbyte might look like this (class names are wrapped for layout reasons):

<bean id="myValidatingInterceptor"
      class="com.coremedia.rest.cap.intercept.
        ValidatingContentWriteInterceptor">
  <property name="type" value="CMPicture"/>
  <property name="validators">
    <list>
      <bean class="com.coremedia.rest.cap.validators.
              MaxBlobSizeValidator">
        <property name="property" value="data"/>
        <property name="maxSize" value="1000000"/>
      </bean>
    </list>
  </property>
</bean>

Example 7.66. Configuring Immediate Validation


Remember that the validators become active during creation, too, so that an immediate validator might validate initial values set by an earlier write interceptor.