001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.camel.component.bean.validator;
018
019 import java.util.Map;
020
021 import javax.validation.Configuration;
022 import javax.validation.ConstraintValidatorFactory;
023 import javax.validation.MessageInterpolator;
024 import javax.validation.TraversableResolver;
025 import javax.validation.Validation;
026 import javax.validation.ValidatorFactory;
027
028 import org.apache.camel.Endpoint;
029 import org.apache.camel.impl.DefaultComponent;
030 import org.apache.camel.impl.ProcessorEndpoint;
031
032 /**
033 * Bean Validator Component for validating java beans against JSR 303 Validator
034 *
035 * @version $Revision: 19061 $
036 */
037 public class BeanValidatorComponent extends DefaultComponent {
038
039 protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
040 BeanValidator beanValidator = new BeanValidator();
041
042 MessageInterpolator messageInterpolator = resolveAndRemoveReferenceParameter(parameters, "messageInterpolator", MessageInterpolator.class);
043 TraversableResolver traversableResolver = resolveAndRemoveReferenceParameter(parameters, "traversableResolver", TraversableResolver.class);
044 ConstraintValidatorFactory constraintValidatorFactory = resolveAndRemoveReferenceParameter(parameters, "constraintValidatorFactory", ConstraintValidatorFactory.class);
045 String group = getAndRemoveParameter(parameters, "group", String.class);
046
047 Configuration configuration = Validation.byDefaultProvider().configure();
048
049 if (messageInterpolator != null) {
050 configuration.messageInterpolator(messageInterpolator);
051 }
052
053 if (traversableResolver != null) {
054 configuration.traversableResolver(traversableResolver);
055 }
056
057 if (constraintValidatorFactory != null) {
058 configuration.constraintValidatorFactory(constraintValidatorFactory);
059 }
060
061 ValidatorFactory validatorFactory = configuration.buildValidatorFactory();
062 beanValidator.setValidatorFactory(validatorFactory);
063
064 if (group != null) {
065 beanValidator.setGroup(getCamelContext().getClassResolver().resolveMandatoryClass(group));
066 }
067
068 return new ProcessorEndpoint(uri, this, beanValidator);
069 }
070 }