1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springmodules.validation.commons;
18
19 import java.io.IOException;
20 import java.io.InputStream;
21 import java.util.Locale;
22
23 import org.apache.commons.validator.Form;
24 import org.apache.commons.validator.Validator;
25 import org.apache.commons.validator.ValidatorResources;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28 import org.springframework.beans.FatalBeanException;
29 import org.springframework.beans.factory.InitializingBean;
30 import org.springframework.core.io.Resource;
31 import org.springframework.util.StringUtils;
32 import org.springframework.validation.Errors;
33 import org.xml.sax.SAXException;
34
35
36
37
38
39 public class DefaultValidatorFactory implements ValidatorFactory, InitializingBean {
40
41
42
43
44 public static final String ERRORS_KEY = "org.springframework.validation.Errors";
45
46
47
48
49 private static Logger log = LoggerFactory.getLogger(DefaultValidatorFactory.class);
50
51
52
53
54 private ValidatorResources validatorResources;
55
56
57
58
59
60
61
62 public void afterPropertiesSet() throws Exception {
63 if (this.validatorResources == null) {
64 throw new FatalBeanException("Unable to locate validation configuration. Property [validationLocations] is required.");
65 }
66 }
67
68
69
70
71
72
73
74
75 public void setValidationConfigLocations(Resource[] validationConfigLocations) {
76
77 if (DefaultValidatorFactory.log.isInfoEnabled()) {
78 DefaultValidatorFactory.log.info("Loading validation configurations from [" + StringUtils.arrayToCommaDelimitedString(validationConfigLocations) + "]");
79 }
80
81 try {
82 InputStream[] inputStreams = new InputStream[validationConfigLocations.length];
83
84 for (int i = 0; i < inputStreams.length; i++) {
85 inputStreams[i] = validationConfigLocations[i].getInputStream();
86 }
87
88 this.validatorResources = new ValidatorResources(inputStreams);
89 }
90 catch (IOException e) {
91 throw new FatalBeanException("Unable to read validation configuration due to IOException.", e);
92 }
93 catch (SAXException e) {
94 throw new FatalBeanException("Unable to parse validation configuration XML", e);
95 }
96 }
97
98
99
100
101
102
103
104 public Validator getValidator(String beanName, Object bean, Errors errors) {
105 Validator validator = new Validator(validatorResources, beanName);
106 validator.setParameter(DefaultValidatorFactory.ERRORS_KEY, errors);
107 validator.setParameter(Validator.BEAN_PARAM, bean);
108 return validator;
109 }
110
111
112
113
114
115
116
117
118
119
120
121 public boolean hasRulesForBean(String beanName, Locale locale) {
122 Form form = validatorResources.getForm(locale, beanName);
123 return (form != null);
124 }
125
126
127
128
129 public ValidatorResources getValidatorResources() {
130 return validatorResources;
131 }
132
133 }