<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<validators>
  <validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
  <validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
  <validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
  <validator name="double" class="com.opensymphony.xwork.validator.validators.DoubleRangeFieldValidator"/>
  <validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
  <validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
  <validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
  <validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
  <validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
  <validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
  <validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
  <validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
  <validator name="regex" class="com.opensymphony.xwork.validator.validators.RegexFieldValidator"/>
  <validator name="cronexpression" class="org.apache.maven.continuum.web.validator.CronExpressionValidator"/>
  <validator name="wagon-url" class="org.apache.maven.continuum.web.validator.WagonUrlValidator"/>
  <validator name="installationValidator" class="org.apache.maven.continuum.web.validator.InstallationValidator"/>
</validators>



