Best practice if you are a BIG organization is to use DataPower. It will perform validations for you along with various functions. As for best practice, I would suggest DataPower just because it was designed for this, but you need to make sure that you are developing code that can validate, otherwise you would get into validation problems at runtime.
I also DO NOT recommend using @SchemaValidation, as this is more vendor-specific than standard.
In doing so, I wrote the following when I was playing around interceptors for my Java EE help application, which does not use any specific provider APIs.
public class XmlValidationInterceptor { private static final Logger LOG; public static final String LOGGER_NAME = "xml.validation";
source share