<!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; Service Archive Generator Wizard Guide for Eclipse Plug-in</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>
      </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 ">Service Archive Generator Wizard Guide for Eclipse Plug-in</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" >

    
        <h1>Service Archive Generator Wizard Guide for Eclipse Plug-in</h1>
        
<p>This document will guide you through the installation and usage
        of the archive generator Eclipse plug-in.</p>
        
<p><a href="../../download.html">[Download Plugin Tool]</a></p>
        
<ul>
<li><a href="#Introduction">Introduction</a></li>
<li><a href="#Installation">Installation</a></li>
<li><a href="#Operation">Operation</a></li>
<li><a href="#Appendix">Appendix</a></li></ul>
        <section>
<h2><a name="Introduction"></a>Introduction</h2>
            
<p>As part of the Axis2 tool set, the service archive generator is
            an important tool that allows the generation of service archives
            (&quot;aar&quot; file or a &quot;jar&quot; files) that can be deployed as a web
            services to the Axis2.</p>
        </section>
        <section>
<h2><a name="Installation"></a>Installation</h2>
            
<p>
                Installation instructions for the plugin can be found
                <a href="plugin-installation.html">here</a>.
            </p>
        </section>
        <section>
<h2><a name="Operation"></a>Operation</h2>
            
<p>If the plug-in is properly installed you should see a new wizard
            under the &quot;New&quot; section. (Use the File -&gt; New -&gt; Other or
            Ctrl + N )</p>
            
<p align="center"><img src="images/ServiceWizardSelection.jpg" alt="ServiceWizardSelection" /></p>
            
<p>Selecting the wizard and pressing the &quot;Next&quot; button will start
            the service generator wizard. Following is the first page of the
            wizard.</p>
            
<p><b>Page 1:</b></p>
            
<p align="center"><img src="images/ServicePage1.jpg" alt="ServicePage1" /></p>
            
<p>Once the class file folder(which should be a folder in the
            file system) is browsed and selected, the &quot;Next&quot; button will be
            enabled and you can move to the next page. Note that you have the
            option of either including all the files or the class files only of
            the folder on page 1.</p>
            
<p><b>Page 2:</b></p>
            
<p>Page 2 of the wizard as seen below requires you to locate/browse
            the WSDL file. If you do not wish to add a WSDL file to the service
            archive, select skip WSDL, else you can select the location of the
            WSDL file by selecting the select WSDL option.</p>
            
<p align="center"><img src="images/service_page2.jpg" alt="service_page2" /></p>
            
<p><b>Page 3:</b></p>
            
<p>Select the services.xml file on this wizard page by browsing or
            select the option of generating service xml automatically, after
            which you can click &quot;Next&quot; button to go to the next page. Notice
            how the browsing option disables when the &quot;Generate service xml
            automatically&quot; check box is ticked.</p>
            
<p align="center"><img src="images/service_page3.jpg" alt="service_page3" /></p>
            
            
<p><b>Page 4:</b></p>
            
            
<p>The next step is to add the libraries. The library addition page
            looks like this :</p>
            
<p align="center"><img src="images/service_page5.jpg" alt="service_page5" /></p>
            
<p>The library name (with full path) can be either typed on the
            text box or browsed for using the &quot;Browse&quot; button.</p>
            
<p align="center"><img src="images/service_page5_browsed.jpg" alt="service_page5_browsed" /></p>
            
<p>Once there is a library name with full path on the text box, hit
            the &quot;Add&quot; button to add the library to the list. Added libraries
            should be displayed in the &quot;Added libraries&quot; list box. This way you
            can add as many external libraries as you wish. See the screen
            shots below.</p>
            
<p align="center"><img src="images/service_page5_hl.jpg" alt="service_page5_hl" /></p>
            
<p align="center"><img src="images/service_page5_added.jpg" alt="service_page5_added" /></p>
            
<p>If any added library needs to be removed, highlight it or in
            other words, select it from the &quot;Added libraries&quot; list and hit on
            the &quot;Remove&quot; button as shown below. Click on the &quot;Next&quot; button to
            proceed to the last page of the wizard if the user did not select
            to auto generate the services.xml file. If user select to auto
            generate the services.xml file then the services.xml option page
            will be displayed.</p>
            
<p align="center"><img src="images/service_page5_remove.jpg" alt="service_page5_remove" /></p>
            
<p><b>Page 5:</b></p>
            
<p>This page only appears if the user select to generate the
            services.xml at page 3 of the wizard. If the user have selected a
            services.xml then the user will be directed to the last page of the
            wizard.</p>
            
<p>After entering the correct service name and valid fully
            qualified class name, try to load the existing methods of that
            class by clicking the load button.</p>
            
<p align="center"><img src="images/service_page4_load.jpg" alt="service_page4_load" /></p>
            
<p>If successfully loaded the user will be presented with a table
            at the bottom of the page with the details of the loaded class. By
            checking and unchecking the user can select the necessary methods
            to include in the services.xml</p>
            
<p align="center"><img src="images/service_page4_table.jpg" alt="service_page4_table" /></p>
            
<p>By clicking on the search declared method only check box, the
            user can remove the inherited methods from the class. Click on the
            &quot;Next&quot; button to proceed to the last page of the wizard</p>
            
<p align="center"><img src="images/service_page4_search_declared.jpg" alt="service_page4_search_declared" /></p>
            
<p><b>Page 6:</b></p>
            
<p>The last page of the wizard asks for the output file location
            and the output archive file name. To be able to finish the wizard,
            user must enter valid output file location and output file
            name.</p>
            
<p align="center"><img src="images/service_page6.jpg" alt="service_page6" /></p>
            
<p>Once all the parameters are filled, hit the &quot;Finish&quot; button to
            complete the wizard and generate the service archive.</p>
            
<p align="center"><img src="images/success_msg.jpg" alt="success_msg" /></p>
            
<p>If you see the above message, then you've successfully generated
            the service archive! This service archive can be hot deployed
            (deployed at run time) to the axis2</p>
        </section>
        <section>
<h2><a name="Appendix"></a>Appendix</h2>
            
<ul>
            
<li>Eclipse reference - <a class="externalLink" href="http://www.eclipse.org/">http://www.eclipse.org/</a></li>
            
<li>Custom Ant Tasks - <a class="externalLink" href="http://ant.apache.org/manual/develop.html">http://ant.apache.org/manual/develop.html</a></li>
            </ul>
        </section>
    

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