| <!-- | |
| ~ 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> |