blob: e8faa0b4c36b562bf4994d1a2b2ff6fa8d9d59fb [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; Advanced Axis2 Databinding Framework Features</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" /><meta http-equiv="content-type" content="text/html; charset=us-ascii" /> </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 ">Advanced Axis2 Databinding Framework Features</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="../../svn.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="http://svn.apache.org/viewvc/axis/axis2/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>Advanced Axis2 Databinding Framework Features</h1>
<p>The aim of this section is provide an insight into the newly
added advanced features of the Axis2 Databinding (ADB)
Framework.</p>
<section>
<h2><a name="Content"></a>Content</h2>
<ul>
<li><a href="#typeSupport">xsi:type Support</a></li>
<li><a href="#helper">Helper Mode</a></li>
<li><a href="#more">Additional ADB Topics</a></li>
</ul>
<a name="typeSupport" id="typeSupport"></a>
<section>
<h2><a name="xsi:type_Support"></a>xsi:type Support</h2>
<p>This is implemented by adding a extension mapping class. The
code that calls the extension mapper is generated inside the
Factory.parse method of the beans and gets activated when the
xsi:type attribute is present. The following code fragment shows
what the generated type mapper looks like :</p>
<div>
<pre>
public static java.lang.Object getTypeObject(java.lang.String namespaceURI,
java.lang.String typeName,
javax.xml.stream.XMLStreamReader reader) throws java.lang.Exception{
if (
&quot;http://soapinterop.org/types&quot;.equals(namespaceURI) &amp;&amp;
&quot;SOAPStruct&quot;.equals(typeName)){
return com.test.SOAPStruct.Factory.parse(reader);
}
throw new java.lang.RuntimeException(&quot;Unsupported type &quot; + namespaceURI + &quot; &quot; + typeName);
}
</pre></div>
<p>Inside every Factory.parse method, the extension mapper gets
called when a xsi:type attribute is encountered
<b>and</b> that type is not the type that is currently
being parsed.</p>
<p>The following code fragment shows how the ADB deserialize method
calls the mapper class:</p>
<div>
<pre>
if (reader.getAttributeValue(&quot;http://www.w3.org/2001/XMLSchema-instance&quot;,&quot;type&quot;)!=null){
java.lang.String fullTypeName = reader.getAttributeValue(&quot;http://www.w3.org/2001/XMLSchema-instance&quot;,
&quot;type&quot;);
if (fullTypeName!=null){
java.lang.String nsPrefix = fullTypeName.substring(0,fullTypeName.indexOf(&quot;:&quot;));
nsPrefix = nsPrefix==null?&quot;&quot;:nsPrefix;
java.lang.String type = fullTypeName.substring(fullTypeName.indexOf(&quot;:&quot;)+1);
if (!&quot;SOAPStruct&quot;.equals(type)){
//find namespace for the prefix
java.lang.String nsUri = reader.getNamespaceContext().getNamespaceURI(nsPrefix);
return (SOAPStruct)org.soapinterop.types.ExtensionMapper.getTypeObject(
nsUri,type,reader);
}
}
}
</pre></div>
<p>This makes xsi:type based parsing possible and results in proper
xsi:type based serializations at runtime.</p>
<p>By default, the mapping package is derived from the
targetnamespace of the first schema that is encountered. The
package name can also be explicitly set by a CompilerOption:</p>
<div>
<pre>
CompilerOptions compilerOptions = new CompilerOptions();
compilerOptions.setWriteOutput(true);
<b>compilerOptions.setMapperClassPackage(&quot;com.test&quot;);</b>
compilerOptions.setOutputLocation(new File(&quot;src&quot;));
try {
SchemaCompiler schemaCompiler = new SchemaCompiler(compilerOptions);
XmlSchemaCollection xmlSchemaCollection = new XmlSchemaCollection();
XmlSchema xmlSchema =xmlSchemaCollection.read(new FileReader(&quot;schema/sample.xsd&quot;),null);
schemaCompiler.compile(xmlSchema);
} catch (Exception e) {
e.printStackTrace();
}
</pre></div>
<a name="helper" id="helper"></a>
<section>
<h2><a name="Helper_mode"></a>Helper mode</h2>
<p>Helper mode is a fairly new feature. In the helper mode, the
beans are plain Java beans and all the
deserialization/serialization code is moved to a helper class. For
example, the simple schema mentioned in the ADB-howto document will
yield four classes instead of the two previously generated:</p>
<ol style="list-style-type: decimal">
<li>MyElement.java</li>
<li>MyElementHelper.java</li>
<li>SOAPStruct.java</li>
<li>SOAPStructHelper.java</li>
</ol>
<p>The helpers basically contain all the serialization code that
otherwise would go into the ADBBeans. Hence the beans in the helper
mode are much more simplified. Also note that the helper mode is
available only if you are in unpacked mode. The code generator by
default does not expand the classes.</p>
<p>Helper mode can be switched on by using the setHelperMode method
in CompilerOptions:</p>
<div>
<pre>
<b>compilerOptions.setHelperMode(true);</b>
</pre></div>
<a name="more" id="more"></a>
<section>
<h2><a name="Additional_ADB_Topics"></a>Additional ADB Topics</h2>
<ul>
<li><a href="adb-tweaking.html">Tweaking the ADB Code
Generator</a>- explains available mechanisms to extend ADB and
possibly adopt it to compile schemas to support other
languages.</li>
<li><a href="adb-codegen-integration.html">ADB and Axis2
Integration</a> - explains how the ADB schema compiler was attached
to the Axis2 framework</li>
</ul>
<hr />
</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>