blob: 09eb6b67cd9e5880bce1744390746a8dfb9153eb [file] [log] [blame]
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.9.2 at 2021-08-01
| Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="Date-Revision-yyyymmdd" content="20210801" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache Axis2 &#x2013; ADB Tweaking Guide</title>
<link rel="stylesheet" href="../../css/apache-maven-fluido-1.6.min.css" />
<link rel="stylesheet" href="../../css/site.css" />
<link rel="stylesheet" href="../../css/print.css" media="print" />
<script type="text/javascript" src="../../js/apache-maven-fluido-1.6.min.js"></script>
<meta name="generator" content="HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /> </head>
<body class="topBarDisabled">
<div class="container-fluid">
<div id="banner">
<div class="pull-left"><a href="http://www.apache.org/" id="bannerLeft"><img src="http://www.apache.org/images/asf_logo_wide.png" alt="Apache Axis2"/></a></div>
<div class="pull-right"><a href="../.././" id="bannerRight"><img src="../../images/axis.jpg" /></a></div>
<div class="clear"><hr/></div>
</div>
<div id="breadcrumbs">
<ul class="breadcrumb">
<li id="publishDate">Last Published: 2021-08-01<span class="divider">|</span>
</li>
<li id="projectVersion">Version: 1.8.0<span class="divider">|</span></li>
<li class=""><a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
<li class=""><a href="../../index.html" title="Axis2/Java">Axis2/Java</a><span class="divider">/</span></li>
<li class="active ">ADB Tweaking Guide</li>
</ul>
</div>
<div class="row-fluid">
<div id="leftColumn" class="span2">
<div class="well sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">Axis2/Java</li>
<li><a href="../../index.html" title="Home"><span class="none"></span>Home</a> </li>
<li><a href="../../download.html" title="Downloads"><span class="none"></span>Downloads</a> </li>
<li><a href="javascript:void(0)" title="Release Notes"><span class="icon-chevron-down"></span>Release Notes</a>
<ul class="nav nav-list">
<li><a href="../../release-notes/1.6.1.html" title="1.6.1"><span class="none"></span>1.6.1</a> </li>
<li><a href="../../release-notes/1.6.2.html" title="1.6.2"><span class="none"></span>1.6.2</a> </li>
<li><a href="../../release-notes/1.6.3.html" title="1.6.3"><span class="none"></span>1.6.3</a> </li>
<li><a href="../../release-notes/1.6.4.html" title="1.6.4"><span class="none"></span>1.6.4</a> </li>
<li><a href="../../release-notes/1.7.0.html" title="1.7.0"><span class="none"></span>1.7.0</a> </li>
<li><a href="../../release-notes/1.8.0.html" title="1.8.0"><span class="none"></span>1.8.0</a> </li>
</ul>
</li>
<li><a href="../../modules/index.html" title="Modules"><span class="none"></span>Modules</a> </li>
<li><a href="../../tools/index.html" title="Tools"><span class="none"></span>Tools</a> </li>
<li class="nav-header">Documentation</li>
<li><a href="../../docs/toc.html" title="Table of Contents"><span class="none"></span>Table of Contents</a> </li>
<li><a href="../../docs/installationguide.html" title="Installation Guide"><span class="none"></span>Installation Guide</a> </li>
<li><a href="../../docs/quickstartguide.html" title="QuickStart Guide"><span class="none"></span>QuickStart Guide</a> </li>
<li><a href="../../docs/userguide.html" title="User Guide"><span class="none"></span>User Guide</a> </li>
<li><a href="../../docs/jaxws-guide.html" title="JAXWS Guide"><span class="none"></span>JAXWS Guide</a> </li>
<li><a href="../../docs/pojoguide.html" title="POJO Guide"><span class="none"></span>POJO Guide</a> </li>
<li><a href="../../docs/spring.html" title="Spring Guide"><span class="none"></span>Spring Guide</a> </li>
<li><a href="../../docs/webadminguide.html" title="Web Administrator's Guide"><span class="none"></span>Web Administrator's Guide</a> </li>
<li><a href="../../docs/migration.html" title="Migration Guide (from Axis1)"><span class="none"></span>Migration Guide (from Axis1)</a> </li>
<li class="nav-header">Resources</li>
<li><a href="../../faq.html" title="FAQ"><span class="none"></span>FAQ</a> </li>
<li><a href="../../articles.html" title="Articles"><span class="none"></span>Articles</a> </li>
<li><a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki"><span class="none"></span>Wiki</a> </li>
<li><a href="../../refLib.html" title="Reference Library"><span class="none"></span>Reference Library</a> </li>
<li><a href="../../apidocs/index.html" title="Online Java Docs"><span class="none"></span>Online Java Docs</a> </li>
<li class="nav-header">Get Involved</li>
<li><a href="../../overview.html" title="Overview"><span class="none"></span>Overview</a> </li>
<li><a href="../../git.html" title="Checkout the Source"><span class="none"></span>Checkout the Source</a> </li>
<li><a href="../../mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a> </li>
<li><a href="../../release-process.html" title="Release Process"><span class="none"></span>Release Process</a> </li>
<li><a href="../../guidelines.html" title="Developer Guidelines"><span class="none"></span>Developer Guidelines</a> </li>
<li><a href="../../siteHowTo.html" title="Build the Site"><span class="none"></span>Build the Site</a> </li>
<li class="nav-header">Project Information</li>
<li><a href="../../team-list.html" title="Project Team"><span class="none"></span>Project Team</a> </li>
<li><a href="../../issue-tracking.html" title="Issue Tracking"><span class="none"></span>Issue Tracking</a> </li>
<li><a href="https://github.com/apache/axis-axis2-java-core/java/core/trunk/" class="externalLink" title="Source Code"><span class="none"></span>Source Code</a> </li>
<li><a href="../../thanks.html" title="Acknowledgements"><span class="none"></span>Acknowledgements</a> </li>
<li class="nav-header">Apache</li>
<li><a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License"><span class="none"></span>License</a> </li>
<li><a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship"><span class="none"></span>Sponsorship</a> </li>
<li><a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks"><span class="none"></span>Thanks</a> </li>
<li><a href="http://www.apache.org/security/" class="externalLink" title="Security"><span class="none"></span>Security</a> </li>
</ul>
<hr />
<div id="poweredBy">
<div class="clear"></div>
<div class="clear"></div>
<div class="clear"></div>
<div class="clear"></div>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../../images/logos/maven-feather.png" /></a>
</div>
</div>
</div>
<div id="bodyColumn" class="span10" >
<html xmlns="http://www.w3.org/1999/xhtml">
<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>
<section>
<h2><a name="Content"></a>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>
<section>
<h2><a name="Introduction"></a>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>
<section>
<h2><a name="Know_the_Configuration"></a>Know the Configuration</h2>
<p>The configuration for the ADB framework is in the
<b>schema-compile.properties</b> file found in the
<b>org.apache.axis2.schema</b> 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
<b>org.apache.axis2.schema.writer.BeanWriter</b>
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
<b>org.apache.axis2.schema.typemap.TypeMap</b> 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>
<section>
<h2><a name="The_First_Tweak_-_Generate_Plain_Java_Beans"></a>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
<b>org.apache.axis2.schema.template</b> package. To make
this work replace the
<b>/org/apache/axis2/databinding/schema/template/ADBBeanTemplate.xsl</b>
with the
<b>/org/apache/axis2/databinding/schema/template/PlainBeanTemplate.xsl</b>
in the schema-compile.properties<b>.</b></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>
<section>
<h2><a name="A_More_Advanced_Tweak_-_Generate_Code_for_Another_Language"></a>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
<b>org.apache.axis2.schema.writer.JavaBeanWriter</b>
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
<b>org.apache.axis2.schema.typemap.JavaTypeMap</b> 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 <i>not</i> 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>
</html>
</div>
</div>
</div>
<hr/>
<footer>
<div class="container-fluid">
<div class="row-fluid">
<p>Copyright &copy;2004&#x2013;2021
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
</div>
</div>
</footer>
</body>
</html>