
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--

    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>
  <head>

<link type="text/css" rel="stylesheet" href="/resources/site.css">
<script src='/resources/space.js'></script>

<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<meta name="keywords" content="business integration, EAI, SOA, Service Oriented Architecture, web services, SOAP, JBI, JMS, WSDL, XML, EDI, Electronic Data Interchange, standards support, integration standards, application integration, middleware, software, solutions, services, CXF, open source">
<meta name="description" content="Apache CXF, Services Framework - Aegis Mapping Files">


<link type="text/css" rel="stylesheet" href="/resources/highlighter/styles/shCoreCXF.css">
<link type="text/css" rel="stylesheet" href="/resources/highlighter/styles/shThemeCXF.css">

<script src='/resources/highlighter/scripts/shCore.js'></script>
<script src='/resources/highlighter/scripts/shBrushBash.js'></script>
<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
  SyntaxHighlighter.defaults['toolbar'] = false;
  SyntaxHighlighter.all();
</script>


    <title>
Apache CXF -- Aegis Mapping Files
    </title>
  </head>
<body onload="init()">


<table width="100%" cellpadding="0" cellspacing="0">
  <tr>
    <td id="cell-0-0" colspan="2">&nbsp;</td>
    <td id="cell-0-1">&nbsp;</td>
    <td id="cell-0-2" colspan="2">&nbsp;</td>
  </tr>
  <tr>
    <td id="cell-1-0">&nbsp;</td>
    <td id="cell-1-1">&nbsp;</td>
    <td id="cell-1-2">
      <!-- Banner -->
<div class="banner" id="banner"><div><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td align="left" colspan="1" nowrap>
<a shape="rect" href="http://cxf.apache.org/" title="Apache CXF"><span style="font-weight: bold; font-size: 170%; color: white">Apache CXF</span></a>
</td><td align="right" colspan="1" nowrap>
<a shape="rect" href="http://www.apache.org/" title="The Apache Sofware Foundation"><img border="0" alt="ASF Logo" src="http://cxf.apache.org/images/asf-logo.png"></a>
</td></tr></table></div></div>
      <!-- Banner -->
      <div id="top-menu">
        <table border="0" cellpadding="1" cellspacing="0" width="100%">
          <tr>
            <td>
              <div align="left">
                <!-- Breadcrumbs -->
<a href="index.html">Index</a>&nbsp;&gt;&nbsp;<a href="databindings.html">DataBindings</a>&nbsp;&gt;&nbsp;<a href="aegis-databinding-20x.html">Aegis Databinding (2.0.x)</a>&nbsp;&gt;&nbsp;<a href="aegis-mapping-files.html">Aegis Mapping Files</a>
                <!-- Breadcrumbs -->
              </div>
            </td>
            <td>
              <div align="right">
                <!-- Quicklinks -->
<div id="quicklinks"><p><a shape="rect" href="http://cxf.apache.org/download.html">Download</a> | <a shape="rect" href="http://cxf.apache.org/docs/index.html">Documentation</a></p></div>
                <!-- Quicklinks -->
              </div>
            </td>
          </tr>
        </table>
      </div>
    </td>
    <td id="cell-1-3">&nbsp;</td>
    <td id="cell-1-4">&nbsp;</td>
  </tr>
  <tr>
    <td id="cell-2-0" colspan="2">&nbsp;</td>
    <td id="cell-2-1">
      <table>
        <tr valign="top">
          <td height="100%">
            <div id="wrapper-menu-page-right">
              <div id="wrapper-menu-page-top">
                <div id="wrapper-menu-page-bottom">
                  <div id="menu-page">
                    <!-- NavigationBar -->
<div id="navigation"><ul class="alternate"><li><a shape="rect" href="overview.html">Overview</a></li><li><a shape="rect" href="how-tos.html">How-Tos</a></li><li><a shape="rect" href="frontends.html">Frontends</a></li><li><a shape="rect" href="databindings.html">DataBindings</a></li><li><a shape="rect" href="transports.html">Transports</a></li><li><a shape="rect" href="configuration.html">Configuration</a></li><li><a shape="rect" href="debugging-and-logging.html">Debugging and Logging</a></li><li><a shape="rect" href="tools.html">Tools</a></li><li><a shape="rect" href="restful-services.html">RESTful Services</a></li><li><a shape="rect" href="wsdl-bindings.html">WSDL Bindings</a></li><li><a shape="rect" href="service-routing.html">Service Routing</a></li><li><a shape="rect" href="dynamic-languages.html">Dynamic Languages</a></li><li><a shape="rect" href="ws-support.html">WS-* Support</a></li><li><a shape="rect" href="advanced-integration.html">Advanced Integration</a></li><li><a shape="rect" href="deployment.html">Deployment</a></li><li><a shape="rect" href="schemas-and-namespaces.html">Use of Schemas and Namespaces</a></li></ul><hr><ul class="alternate"><li><p>Search</p></li></ul><form enctype="application/x-www-form-urlencoded" method="get" id="cse-search-box" action="http://www.google.com/cse">
  <div>
    <input type="hidden" name="cx" value="002890367768291051730:o99qiwa09y4">
    <input type="hidden" name="ie" value="UTF-8">
    <input type="text" name="q" size="21">
    <input type="submit" name="sa" value="Search">
  </div>
</form>
<script type="text/javascript" src="http://www.google.com/cse/brand?form=cse-search-box&amp;lang=en"></script><hr><ul class="alternate"><li><a shape="rect" href="http://cxf.apache.org/javadoc/latest/">API 3.2.x (Javadoc)</a></li><li><a shape="rect" href="http://cxf.apache.org/javadoc/latest-3.1.x/">API 3.1.x (Javadoc)</a></li><li><a shape="rect" href="http://cxf.apache.org/">CXF Website</a></li></ul><p>&#160;</p><p><a shape="rect" class="external-link" href="http://www.apache.org/events/current-event.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://www.apache.org/events/current-event-125x125.png" data-image-src="http://www.apache.org/events/current-event-125x125.png"></span></a></p></div>
                    <!-- NavigationBar -->
                  </div>
              </div>
            </div>
          </div>
         </td>
         <td height="100%">
           <!-- Content -->
           <div class="wiki-content">
<div id="ConfluenceContent"><h1 id="AegisMappingFiles-ControllingMappingswithXML">Controlling Mappings with XML</h1>

<p>Its easy to control how your service and its beans are mapped to xml. Mapping files provide a way to do this without modifying your code at all. But, most of this can be done through Java generics or annotations as well. (Most of this was developed for XFire users originally on Java 1.4)</p>

<p>Mapping files must exist in the same package as your bean or service class on the class path. In the above example the mapping file  would be named "/org/codehaus/xfire/Employee.aegis.xml", with the following format:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default">
&lt;mappings&gt;
  &lt;mapping uri="" name=""&gt;
    &lt;method name="methodName"&gt;
      &lt;return-type mappedName="" componentType=""/&gt;
      &lt;parameter index="" mappedName=""/&gt;
    &lt;/method&gt;
    &lt;property name="" mappedName="" style="attribute|element" componentType=""/&gt;
  &lt;/mapping&gt;
&lt;/mappings&gt;
</pre>
</div></div>
<p>When you are creating <strong>ClassName</strong>.aegis.xml files to control type mapping, you will have only one <strong>mapping</strong> element, and you don't <em>need</em> any attributes on the <strong>mapping</strong> element. You use <strong>property</strong> elements to specify how to map your properties. You must supply <strong>name=</strong> to select the property. There are more examples of specific cases below.</p>

<p><strong>Note that &lt;method&gt; is used to configure methods on your service and &lt;property&gt; is used to configure properties on your javabeans.</strong><br clear="none">
<strong>The above example highlights many of the possible elements, most are optional and the format encourages minimally specified mappings.</strong></p>

<h2 id="AegisMappingFiles-ControllingNaming">Controlling Naming</h2>

<p>Lets pretend that in the above example you would like the elements names to be capatilized and in the namespace "urn:north-pole:operations".  You could achieve this through a mapping file like so:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default">
&lt;mappings xmlns:np="urn:north-pole:operations"&gt;
  &lt;mapping name="np:Employee"&gt;
    &lt;property name="name" mappedName="Name"/&gt;
    &lt;property name="title" mappedName="Title"/&gt;
  &lt;/mapping&gt;
&lt;/mappings&gt;
</pre>
</div></div>
<p>Notice that the namespace was declared on the mappings element and then the prefix was used to specify the element QNames for the name/title properties.</p>

<p>This will result in a mapping like so:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default">
&lt;np:Employee xmlns:np="urn:north-pole:operations"&gt;
  &lt;np:Name&gt;Santa Claus&lt;/np:Name&gt;
  &lt;np:Title&gt;Chief Present Officer (CPO)&lt;/np:Title&gt;
&lt;/np:Employee&gt;
</pre>
</div></div>

<h2 id="AegisMappingFiles-Ignoringproperties">Ignoring properties</h2>

<p>If you don't want to serialize a certain property it is easy to ignore it:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default">
&lt;mappings&gt;
  &lt;mapping&gt;
    &lt;property name="propertyName" ignore="true"/&gt;
  &lt;/mapping&gt;
&lt;/mappings&gt;
</pre>
</div></div>

<h2 id="AegisMappingFiles-ControllingminOccursandnillable">Controlling minOccurs and nillable</h2>

<p>The default Aegis mapping is to assume that, since any Java object can be <strong>null</strong>, that the corresponding schema elements should have minOccurs of 0 and nillable of true. There are properties on the mappings for to control this.</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default">
&lt;mappings&gt;
  &lt;mapping&gt;
    &lt;property name='everpresentProperty' minOccurs='1' nillable='false'/&gt;
 &lt;/mapping&gt;
&lt;mappings&gt;
</pre>
</div></div>

<h2 id="AegisMappingFiles-UsingtheAegisbasictypes">Using the Aegis basic types</h2>

<p>In order to make use of the various types that Aegis provides in the "org.apache.cxf.aegis.type.basic" package, follow this example which allows the wsdl to use the "xsd:date" instead of the "xsd:dateTime".</p>

<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default">
&lt;mappings xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
	&lt;mapping&gt;
		&lt;property name="birthDate" 
			type="org.codehaus.xfire.aegis.type.basic.DateType" 
			typeName="xsd:date"
			/&gt;
	&lt;/mapping&gt;
&lt;/mappings&gt;
</pre>
</div></div></div>
           </div>
           <!-- Content -->
         </td>
        </tr>
      </table>
   </td>
   <td id="cell-2-2" colspan="2">&nbsp;</td>
  </tr>
  <tr>
   <td id="cell-3-0">&nbsp;</td>
   <td id="cell-3-1">&nbsp;</td>
   <td id="cell-3-2">
     <div id="footer">
       <!-- Footer -->
       <div id="site-footer">
         <a href="http://cxf.apache.org/privacy-policy.html">Privacy Policy</a> - 
         (<a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=60888">edit page</a>) 
	 (<a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=60888&amp;showComments=true&amp;showCommentArea=true#addcomment">add comment</a>)<br>
	Apache CXF, CXF, Apache, the Apache feather logo are trademarks of The Apache Software Foundation.<br>
        All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <!-- Footer -->
     </div>
   </td>
   <td id="cell-3-3">&nbsp;</td>
   <td id="cell-3-4">&nbsp;</td>
  </tr>
  <tr>
    <td id="cell-4-0" colspan="2">&nbsp;</td>
    <td id="cell-4-1">&nbsp;</td>
    <td id="cell-4-2" colspan="2">&nbsp;</td>
  </tr>
</table>

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-4458903-1");
pageTracker._trackPageview();
} catch(err) {}</script>

</body>
</html>

