<!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> | |
<title>ADB Tweaking Guide</title> | |
<link href="../../css/axis-docs.css" rel="stylesheet" type="text/css" media="all" /> | |
</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 is written with future extensions in mind, with a clear and | |
flexible way to extend or modify it's 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 require | |
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 love 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 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 language is OOP | |
based (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 enough 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 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> |