javax.xml.bind.Validator Maven / Gradle / Ivy
/*
* Copyright (c) 2003, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package javax.xml.bind;
/**
* As of Jakarta XML Binding, this class is deprecated and optional.
*
* The {@code Validator} class is responsible for controlling the validation
* of content trees during runtime.
*
*
*
* Three Forms of Validation
*
*
* - Unmarshal-Time Validation
* - This form of validation enables a client application to receive
* information about validation errors and warnings detected while
* unmarshalling XML data into a Java content tree and is completely
* orthogonal to the other types of validation. To enable or disable
* it, see the javadoc for
* {@link Unmarshaller#setValidating(boolean) Unmarshaller.setValidating}.
* All JAXB 1.0 Providers are required to support this operation.
*
*
* - On-Demand Validation
* - This form of validation enables a client application to receive
* information about validation errors and warnings detected in the
* Java content tree. At any point, client applications can call
* the {@link Validator#validate(Object) Validator.validate} method
* on the Java content tree (or any sub-tree of it). All JAXB 1.0
* Providers are required to support this operation.
*
*
* - Fail-Fast Validation
* - This form of validation enables a client application to receive
* immediate feedback about modifications to the Java content tree
* that violate type constraints on Java Properties as defined in
* the specification. Jakarta XML Binding Providers are not required support
* this type of validation. Of the Jakarta XML Binding Providers that do support
* this type of validation, some may require you to decide at schema
* compile time whether or not a client application will be allowed
* to request fail-fast validation at runtime.
*
*
*
*
*
* The {@code Validator} class is responsible for managing On-Demand Validation.
* The {@code Unmarshaller} class is responsible for managing Unmarshal-Time
* Validation during the unmarshal operations. Although there is no formal
* method of enabling validation during the marshal operations, the
* {@code Marshaller} may detect errors, which will be reported to the
* {@code ValidationEventHandler} registered on it.
*
*
*
* Using the Default EventHandler
*
* If the client application does not set an event handler on their
* {@code Validator}, {@code Unmarshaller}, or {@code Marshaller} prior to
* calling the validate, unmarshal, or marshal methods, then a default event
* handler will receive notification of any errors or warnings encountered.
* The default event handler will cause the current operation to halt after
* encountering the first error or fatal error (but will attempt to continue
* after receiving warnings).
*
*
*
*
* Handling Validation Events
*
* There are three ways to handle events encountered during the unmarshal,
* validate, and marshal operations:
*
* - Use the default event handler
* - The default event handler will be used if you do not specify one
* via the {@code setEventHandler} API's on {@code Validator},
* {@code Unmarshaller}, or {@code Marshaller}.
*
*
* - Implement and register a custom event handler
* - Client applications that require sophisticated event processing
* can implement the {@code ValidationEventHandler} interface and
* register it with the {@code Unmarshaller} and/or
* {@code Validator}.
*
*
* - Use the {@link javax.xml.bind.util.ValidationEventCollector ValidationEventCollector}
* utility
* - For convenience, a specialized event handler is provided that
* simply collects any {@code ValidationEvent} objects created
* during the unmarshal, validate, and marshal operations and
* returns them to the client application as a
* {@code java.util.Collection}.
*
*
*
*
*
* Validation and Well-Formedness
*
*
* Validation events are handled differently depending on how the client
* application is configured to process them as described in the previous
* section. However, there are certain cases where a Jakarta XML Binding Provider indicates
* that it is no longer able to reliably detect and report errors. In these
* cases, the Jakarta XML Binding Provider will set the severity of the ValidationEvent to
* FATAL_ERROR to indicate that the unmarshal, validate, or marshal operations
* should be terminated. The default event handler and
* {@code ValidationEventCollector} utility class must terminate processing
* after being notified of a fatal error. Client applications that supply their
* own {@code ValidationEventHandler} should also terminate processing after
* being notified of a fatal error. If not, unexpected behaviour may occur.
*
*
*
*
* There currently are not any properties required to be supported by all
* Jakarta XML Binding Providers on Validator. However, some providers may support
* their own set of provider specific properties.
*
*
*
* @author - Ryan Shoemaker, Sun Microsystems, Inc.
- Kohsuke Kawaguchi, Sun Microsystems, Inc.
- Joe Fialli, Sun Microsystems, Inc.
* @see JAXBContext
* @see Unmarshaller
* @see ValidationEventHandler
* @see ValidationEvent
* @see javax.xml.bind.util.ValidationEventCollector
* @since 1.6, JAXB 1.0
* @deprecated since JAXB 2.0
*/
public interface Validator {
/**
* Allow an application to register a validation event handler.
*
* The validation event handler will be called by the Jakarta XML Binding Provider if any
* validation errors are encountered during calls to
* {@link #validate(Object) validate}. If the client application does not
* register a validation event handler before invoking the validate method,
* then validation events will be handled by the default event handler which
* will terminate the validate operation after the first error or fatal error
* is encountered.
*
* Calling this method with a null parameter will cause the Validator
* to revert back to the default default event handler.
*
* @param handler the validation event handler
* @throws JAXBException if an error was encountered while setting the
* event handler
* @deprecated since JAXB2.0
*/
public void setEventHandler( ValidationEventHandler handler )
throws JAXBException;
/**
* Return the current event handler or the default event handler if one
* hasn't been set.
*
* @return the current ValidationEventHandler or the default event handler
* if it hasn't been set
* @throws JAXBException if an error was encountered while getting the
* current event handler
* @deprecated since JAXB2.0
*/
public ValidationEventHandler getEventHandler()
throws JAXBException;
/**
* Validate the Java content tree starting at {@code subrootObj}.
*
* Client applications can use this method to validate Java content trees
* on-demand at runtime. This method can be used to validate any arbitrary
* subtree of the Java content tree. Global constraint checking will not
* be performed as part of this operation (i.e. ID/IDREF constraints).
*
* @param subrootObj the obj to begin validation at
* @throws JAXBException if any unexpected problem occurs during validation
* @throws ValidationException
* If the {@link ValidationEventHandler ValidationEventHandler}
* returns false from its {@code handleEvent} method or the
* {@code Validator} is unable to validate the content tree rooted
* at {@code subrootObj}
* @throws IllegalArgumentException
* If the subrootObj parameter is null
* @return true if the subtree rooted at {@code subrootObj} is valid, false
* otherwise
* @deprecated since JAXB2.0
*/
public boolean validate( Object subrootObj ) throws JAXBException;
/**
* Validate the Java content tree rooted at {@code rootObj}.
*
* Client applications can use this method to validate Java content trees
* on-demand at runtime. This method is used to validate an entire Java
* content tree. Global constraint checking will be performed as
* part of this operation (i.e. ID/IDREF constraints).
*
* @param rootObj the root obj to begin validation at
* @throws JAXBException if any unexpected problem occurs during validation
* @throws ValidationException
* If the {@link ValidationEventHandler ValidationEventHandler}
* returns false from its {@code handleEvent} method or the
* {@code Validator} is unable to validate the content tree rooted
* at {@code rootObj}
* @throws IllegalArgumentException
* If the rootObj parameter is null
* @return true if the tree rooted at {@code rootObj} is valid, false
* otherwise
* @deprecated since JAXB2.0
*/
public boolean validateRoot( Object rootObj ) throws JAXBException;
/**
* Set the particular property in the underlying implementation of
* {@code Validator}. This method can only be used to set one of
* the standard Jakarta XML Binding defined properties above or a provider specific
* property. Attempting to set an undefined property will result in
* a PropertyException being thrown. See
* Supported Properties.
*
* @param name the name of the property to be set. This value can either
* be specified using one of the constant fields or a user
* supplied string.
* @param value the value of the property to be set
*
* @throws PropertyException when there is an error processing the given
* property or value
* @throws IllegalArgumentException
* If the name parameter is null
* @deprecated since JAXB2.0
*/
public void setProperty( String name, Object value )
throws PropertyException;
/**
* Get the particular property in the underlying implementation of
* {@code Validator}. This method can only be used to get one of
* the standard Jakarta XML Binding defined properties above or a provider specific
* property. Attempting to get an undefined property will result in
* a PropertyException being thrown. See
* Supported Properties.
*
* @param name the name of the property to retrieve
* @return the value of the requested property
*
* @throws PropertyException
* when there is an error retrieving the given property or value
* property name
* @throws IllegalArgumentException
* If the name parameter is null
* @deprecated since JAXB2.0
*/
public Object getProperty( String name ) throws PropertyException;
}