<!-- | |
~ 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. | |
--> | |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head> | |
<meta name="generator" content= | |
"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /> | |
<title>ADB Tweaking Guide</title> | |
</head> | |
<body lang="en" xml:lang="en"> | |
<h1>ADB Tweaking Guide</h1> | |
<p>This document explains the mechanisms available to extend ADB | |
and possibly adopt it to compile schemas to support other | |
languages.</p> | |
<h2>Content</h2> | |
<ul> | |
<li><a href="#intro">Introduction</a></li> | |
<li><a href="#config">Know the Configuration</a></li> | |
<li><a href="#first_tweak">The First Tweak - Generate Plain Java | |
Beans</a></li> | |
<li><a href="#advanced_tweak">A More Advanced Tweak - Generate Code | |
for Another Language</a></li> | |
</ul> | |
<a name="intro" id="intro"></a> | |
<h2>Introduction</h2> | |
<p>ADB was written with future extensibility in mind, with a clear | |
and flexible way to extend or modify its functionality. Available | |
mechanisms to extend ADB and possibly adopt it to compile schemas | |
to support other languages are described below.</p> | |
<a name="config" id="config"></a> | |
<h2>Know the Configuration</h2> | |
<p>The configuration for the ADB framework is in the | |
<strong>schema-compile.properties</strong> file found in the | |
<strong>org.apache.axis2.schema</strong> package. This properties | |
file has the following important properties</p> | |
<ul> | |
<li>schema.bean.writer.class | |
<p>This is the writer class. This is used by the schema compiler to | |
write the beans and should implement the | |
<strong>org.apache.axis2.schema.writer.BeanWriter</strong> | |
interface. The schema compiler delegates the bean writing task to | |
the specified instance of the BeanWriter.</p> | |
</li> | |
<li>schema.bean.writer.template | |
<p>This specifies the template to be used in the BeanWriter. The | |
BeanWriter author is free to use any mechanism to write the classes | |
but the default mechanism is to use a xsl template. This property | |
may be left blank if the BeanWriter implementation does not use a | |
template.</p> | |
</li> | |
<li>schema.bean.typemap | |
<p>This is the type map to be used by the schema compiler. It | |
should be an implementation of the | |
<strong>org.apache.axis2.schema.typemap.TypeMap</strong> interface. | |
The default typemap implementation encapsulates a hashmap with type | |
QName to Class name string mapping.</p> | |
</li> | |
</ul> | |
<a name="first_tweak" id="first_tweak"></a> | |
<h2>The First Tweak - Generate Plain Java Beans</h2> | |
<p>The first, most simple tweak for the code generator could be to | |
switch to plain bean generation. The default behavior of the ADB | |
framework is to generate ADBBeans, but most users, if they want to | |
use ADB as a standalone compiler, would prefer to have plain java | |
beans. This can in fact be done by simply changing the template | |
used.</p> | |
<p>The template for plain java beans is already available in the | |
<strong>org.apache.axis2.schema.template</strong> package. To make | |
this work replace the | |
<strong>/org/apache/axis2/databinding/schema/template/ADBBeanTemplate.xsl</strong> | |
with the | |
<strong>/org/apache/axis2/databinding/schema/template/PlainBeanTemplate.xsl</strong> | |
in the schema-compile.properties<strong>.</strong></p> | |
<p>Congratulations! You just tweaked ADB to generate plain java | |
beans.</p> | |
<p>To generate custom formats, the templates need to be modified. | |
The schema for the xml generated by the JavaBeanWriter is available | |
in the source tree under the Other directory in the codegen module. | |
Advanced users with knowledge of XSLT can easily modify the | |
templates to generate code in their own formats.</p> | |
<a name="advanced_tweak" id="advanced_tweak"></a> | |
<h2>A More Advanced Tweak - Generate Code for Another Language</h2> | |
<p>To generate code for another language, there are two main | |
components that need to be written.</p> | |
<ul> | |
<li>The BeanWriter | |
<p>Implement the BeanWriter interface for this class. A nice | |
example is the | |
<strong>org.apache.axis2.schema.writer.JavaBeanWriter</strong> | |
which has a lot of reusable code. In fact if the target language is | |
object-oriented (such as C# or even C++), one would even be able to | |
extend the JavaBeanWriter itself.</p> | |
</li> | |
<li>The TypeMap | |
<p>Implement the TypeMap interface for this class. The | |
<strong>org.apache.axis2.schema.typemap.JavaTypeMap</strong> class | |
is a simple implementation for the typemap where the QName to class | |
name strings are kept inside a hashmap instance. This technique is | |
fairly sufficient and only the type names would need to change to | |
support another language.</p> | |
</li> | |
</ul> | |
<p>Surprisingly, this is all that needs to be done to have other | |
language support for ADB. Change the configuration and you are | |
ready to generate code for other languages!</p> | |
<p>This tweaking guide is supposed to be a simple guideline for | |
anyone who wishes to dig deep into the mechanics of the ADB code | |
generator. Users are free to experiment with it and modify the | |
schema compiler accordingly to their needs. Also note that the | |
intention of this section is <em>not</em> to be a step by step | |
guide to custom code generation. Anyone who wish to do so would | |
need to dig into the code and get their hands dirty!</p> | |
</body> | |
</html> |