# 
# Copyright 2004 The Apache Software Foundation.
# Licensed  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.
#
#
# Example properties indent the output, require validation
# on input and turn debugging on.
#
org.exolab.castor.parser.validation=false
org.exolab.castor.parser.namespaces=true
org.exolab.castor.indent=true
org.exolab.castor.debug=false


