blob: c793b1b70bdfe01f782febb6ef837080de0b3692 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at Apr 17, 2012 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Apache Axis2 -
Advanced Axis2 Databinding Framework Features</title>
<style type="text/css" media="all">
@import url("../../css/maven-base.css");
@import url("../../css/maven-theme.css");
@import url("../../css/site.css");
</style>
<link rel="stylesheet" href="../../css/print.css" type="text/css" media="print" />
<meta name="Date-Revision-yyyymmdd" content="20120417" />
<meta http-equiv="Content-Language" content="en" />
<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="composite">
<div id="banner">
<a href="http://www.apache.org/" id="bannerLeft">
<img src="http://www.apache.org/images/asf_logo_wide.png" alt="Apache Axis2" />
</a>
<a href="" id="bannerRight">
<img src="../../images/axis.jpg" alt="Apache Axis2" />
</a>
<div class="clear">
<hr/>
</div>
</div>
<div id="breadcrumbs">
<div class="xleft">
<span id="publishDate">Last Published: 2012-04-17</span>
&nbsp;| <span id="projectVersion">Version: 1.6.2</span>
</div>
<div class="xright"> <a href="../../index.html" title="Axis2/Java">Axis2/Java</a>
|
<a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a>
</div>
<div class="clear">
<hr/>
</div>
</div>
<div id="leftColumn">
<div id="navcolumn">
<h5>Axis2/Java</h5>
<ul>
<li class="none">
<a href="../../index.html" title="Home">Home</a>
</li>
</ul>
<h5>Downloads</h5>
<ul>
<li class="none">
<a href="../../download.cgi" title="Releases">Releases</a>
</li>
<li class="none">
<a href="../../modules/index.html" title="Modules">Modules</a>
</li>
<li class="none">
<a href="../../tools/index.html" title="Tools">Tools</a>
</li>
</ul>
<h5>Documentation</h5>
<ul>
<li class="none">
<a href="../../docs/toc.html" title="Table of Contents">Table of Contents</a>
</li>
<li class="none">
<a href="../../docs/installationguide.html" title="Installation Guide">Installation Guide</a>
</li>
<li class="none">
<a href="../../docs/quickstartguide.html" title="QuickStart Guide">QuickStart Guide</a>
</li>
<li class="none">
<a href="../../docs/userguide.html" title="User Guide">User Guide</a>
</li>
<li class="none">
<a href="../../docs/jaxws-guide.html" title="JAXWS Guide">JAXWS Guide</a>
</li>
<li class="none">
<a href="../../docs/pojoguide.html" title="POJO Guide">POJO Guide</a>
</li>
<li class="none">
<a href="../../docs/spring.html" title="Spring Guide">Spring Guide</a>
</li>
<li class="none">
<a href="../../docs/webadminguide.html" title="Web Administrator's Guide">Web Administrator's Guide</a>
</li>
<li class="none">
<a href="../../docs/migration.html" title="Migration Guide (from Axis1)">Migration Guide (from Axis1)</a>
</li>
</ul>
<h5>Resources</h5>
<ul>
<li class="none">
<a href="../../faq.html" title="FAQ">FAQ</a>
</li>
<li class="none">
<a href="../../articles.html" title="Articles">Articles</a>
</li>
<li class="none">
<a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki">Wiki</a>
</li>
<li class="none">
<a href="../../refLib.html" title="Reference Library">Reference Library</a>
</li>
<li class="none">
<a href="../../api/index.html" title="Online Java Docs">Online Java Docs</a>
</li>
</ul>
<h5>Get Involved</h5>
<ul>
<li class="none">
<a href="../../overview.html" title="Overview">Overview</a>
</li>
<li class="none">
<a href="../../svn.html" title="Checkout the Source">Checkout the Source</a>
</li>
<li class="none">
<a href="../../mail-lists.html" title="Mailing Lists">Mailing Lists</a>
</li>
<li class="none">
<a href="../../release-process.html" title="Release Process">Release Process</a>
</li>
<li class="none">
<a href="../../guidelines.html" title="Developer Guidelines">Developer Guidelines</a>
</li>
<li class="none">
<a href="../../siteHowTo.html" title="Build the Site">Build the Site</a>
</li>
</ul>
<h5>Project Information</h5>
<ul>
<li class="none">
<a href="../../team-list.html" title="Project Team">Project Team</a>
</li>
<li class="none">
<a href="../../issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
</li>
<li class="none">
<a href="http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/" class="externalLink" title="Source Code">Source Code</a>
</li>
<li class="none">
<a href="../../thanks.html" title="Acknowledgements">Acknowledgements</a>
</li>
<li class="none">
<a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License">License</a>
</li>
<li class="none">
<a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">Sponsorship</a>
</li>
<li class="none">
<a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">Thanks</a>
</li>
<li class="none">
<a href="http://www.apache.org/security/" class="externalLink" title="Security">Security</a>
</li>
</ul>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
<img class="poweredBy" alt="Built by Maven" src="../../images/logos/maven-feather.png" />
</a>
</div>
</div>
<div id="bodyColumn">
<div id="contentBox">
<!-- ~ 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. --><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>
<div class="section"><h2>Content<a name="Content"></a></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>
<div class="section"><h2>xsi:type Support<a name="xsi:type_Support"></a></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>
<div class="section"><h2>Helper mode<a name="Helper_mode"></a></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>
<div class="section"><h2>Additional ADB Topics<a name="Additional_ADB_Topics"></a></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 class="clear">
<hr/>
</div>
<div id="footer">
<div class="xright">Copyright &#169; 2004-2012
<a href="http://www.apache.org/">The Apache Software Foundation</a>.
All Rights Reserved.
</div>
<div class="clear">
<hr/>
</div>
</div>
</body>
</html>