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

###############################################################################
################### Schema Compiler properties for Axis2/C  ###################
###############################################################################
#
# The bean writer class
# The bean writer is the class used by the schema compiler to write the beans
# and should implement the org.apache.axis2.schema.writer.BeanWriter
# inteface
#
schema.bean.writer.class=org.apache.axis2.schema.writer.CStructWriter
#
# bean writer template
# The bean writers template is it's own responsibilty. (A bean writer provider
# may choose not to use a template at all!) However the property loader will
# load the following templates (reference) and provide it and in the case when the
# bean writer is not statically bound to a template, this'll be useful.
#
schema.bean.writer.template=/org/apache/axis2/schema/template/CADBBeanTemplate
#
# The type map to be used by the schema compiler
#
schema.bean.typemap=org.apache.axis2.schema.typemap.CTypeMap
