#
# 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.
#


# Java class mapping of <xsd:element>'s and <xsd:complexType>'s 
#
org.exolab.castor.builder.javaclassmapping=element

# This property allows one to specify the super class of *all* 
# generated classes
#
#org.exolab.castor.builder.superclass=com.xyz.BaseObject

# XML namespace mapping to Java packages
#
#org.exolab.castor.builder.nspackages=\
  http://www.xyz.com/schemas/project=com.xyz.schemas.project,\
  http://www.xyz.com/schemas/person=com.xyz.schemas.person

# Set to true if you want to generate the equals method
# for each generated class
# false by default
#
#org.exolab.castor.builder.equalsmethod=true

# Set to true if you want to use Object Wrappers instead
# of primitives (e.g Float instead of float).
# false by default.
#
#org.exolab.castor.builder.primitivetowrapper=false

# Set to true if you want the generated class descriptors to
# expose the element and attribute names they contain.
# false by default.
#
#org.exolab.castor.builder.classdescfieldnames=false

# Set to true if you want the generated source code to contain
# Extra methods for the collection fields, such as get/set using
# the collection type in addition to the type-safe array.
# Set this to true if you want your code to be more compatible 
# with Castor JDO. This is false by default.
#
#org.exolab.castor.builder.extraCollectionMethods=true

# Use old-style (Castor 0.9.3.9) of naming that uppercases
# names after an underscore
#
#org.exolab.castor.xml.JavaNaming.upperCaseAfterUnderscore=true

