blob: cf5b1c7baee8a7a64aa5bfe7f640cc310dafeb62 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../skin/tigris.css" type="text/css">
<link rel="stylesheet" href="../skin/mysite.css" type="text/css">
<link rel="stylesheet" href="../skin/site.css" type="text/css">
<link media="print" rel="stylesheet" href="../skin/print.css" type="text/css">
<title>Axis C++ Windows Developers Guide</title>
</head>
<body bgcolor="white" class="composite">
<div id="banner">
<table width="100%" cellpadding="8" cellspacing="0" summary="banner" border="0">
<tbody>
<tr>
<td align="left">
<div class="groupLogo">
<a href="http://ws.apache.org/"><img border="0" class="logoImage" alt="The Apache WebServices Project" src="../images/project-logo.jpg"></a>
</div>
</td><td align="right">
<div class="projectLogo">
<a href="http://ws.apache.org/axis/"><img border="0" class="logoImage" alt="The Apache Axis Project" src="../images/axis.jpg"></a>
</div>
</td><td valign="top" rowspan="2" align="right" class="search">
<form target="_blank" action="http://www.google.co.jp/search" method="get">
<table summary="search" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#a5b6c6" colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td colspan="3"><img height="8" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="ws.apache.org" name="sitesearch" type="hidden"><input value="ja" name="hl" type="hidden"><input value="UTF-8" name="ie" type="hidden"><input size="10" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="検索" type="submit">
<br>WS を検索
</td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td colspan="3"><img height="7" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td class="bottom-left-thick"></td><td bgcolor="#a5b6c6"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td class="bottom-right-thick"></td>
</tr>
</table>
</form>
</td>
</tr>
</tbody>
</table>
</div>
<table width="100%" cellpadding="0" cellspacing="0" border="0" summary="nav" id="breadcrumbs">
<tbody>
<tr class="status">
<td><a href="http://www.apache.org/">Apache</a> | <a href="http://ws.apache.org/">WS</a><a href=""></a></td><td id="tabs">
<div class="tab">
<span class="selectedTab"><a class="base-selected" href="../index.html">WebServices-Axis</a></span>
</div>
</td>
</tr>
</tbody>
</table>
<table id="main" width="100%" cellpadding="8" cellspacing="0" summary="" border="0">
<tbody>
<tr valign="top">
<td id="leftcol">
<div id="navcolumn">
<div class="menuBar">
<div class="menu">
<span class="menuLabel">Axis</span>
<div class="menuItem">
<a href="../index.html">はじめに</a>
</div>
<div class="menuItem">
<a href="../news.html">お知らせ</a>
</div>
<div class="menuItem">
<a href="http://wiki.apache.org/ws/ja/axis">FAQ/Wiki</a>
</div>
<div class="menu">
<span class="menuLabel">活動に参加</span>
<div class="menuItem">
<a href="../overview.html">概要</a>
</div>
<div class="menuItem">
<a href="../cvs.html">CVS リポジトリ</a>
</div>
<div class="menuItem">
<a href="../mail.html">メーリングリスト</a>
</div>
<div class="menuItem">
<a href="../ref.html">リファレンスライブラリ</a>
</div>
<div class="menuItem">
<a href="../bugs.html">バグ</a>
</div>
<div class="menuItem">
<a href="../howtobuild.html">サイト構築方法</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">Axis (Java)</span>
<div class="menuItem">
<a href="../java/index.html">ドキュメント</a>
</div>
<div class="menuItem">
<a href="../java/install.html">インストール</a>
</div>
<div class="menuItem">
<a href="../java/user-guide.html">ユーザガイド</a>
</div>
<div class="menuItem">
<a href="../java/developers-guide.html">開発者ガイド</a>
</div>
<div class="menuItem">
<a href="../java/integration-guide.html">統合ガイド</a>
</div>
<div class="menuItem">
<a href="../java/architecture-guide.html">アーキテクチャガイド</a>
</div>
<div class="menuItem">
<a href="../java/reference.html">リファレンスガイド</a>
</div>
<div class="menuItem">
<a href="../java/reading.html">読書ガイド</a>
</div>
<div class="menuItem">
<a href="../java/requirements.html">要件</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">Axis (C++)</span>
<div class="menuItem">
<a href="../cpp/index.html">Axis C++ 最新版</a>
</div>
<div class="menuItem">
<a href="../cpp/documentation.html">ドキュメント</a>
</div>
<div class="menuItem">
<a href="../cpp/download.html">ダウンロード</a>
</div>
<div class="menuItem">
<a href="http://wiki.apache.org/ws/FrontPage/AxisCPP">Wiki ページ [英語]</a>
</div>
<div class="menuItem">
<a href="../cpp/who.html">メンバ紹介</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">ダウンロード</span>
<div class="menuItem">
<a href="../releases.html">リリース</a>
</div>
<div class="menuItem">
<a href="../interim.html">暫定版</a>
</div>
<div class="menuItem">
<a href="http://cvs.apache.org/viewcvs/ws-axis/">ソースコード [英語]</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">翻訳</span>
<div class="menuItem">
<a href="http://ws.apache.org/axis/jp/">日本語</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">関連プロジェクト</span>
<div class="menuItem">
<a href="http://ws.apache.org/wsif/">WSIF [英語]</a>
</div>
<div class="menuItem">
<a href="http://cvs.apache.org/viewcvs/*checkout*/ws-wsil/java/README.htm">WSIL [英語]</a>
</div>
<div class="menuItem">
<a href="http://www-124.ibm.com/developerworks/projects/wsdl4j/">WSDL4J [英語]</a>
</div>
<div class="menuItem">
<a href="http://www.uddi4j.org/">UDDI4J [英語]</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">その他</span>
<div class="menuItem">
<a href="../who.html">メンバ紹介</a>
</div>
<div class="menuItem">
<a href="../contact.html">連絡先</a>
</div>
<div class="menuItem">
<a href="../legal.html">法関連</a>
</div>
<div class="menuItem">
<a href="../docs.html">メモ/ドキュメント</a>
</div>
</div>
</div>
</div>
</div>
</td><td>
<div id="bodycol">
<div class="app">
<div align="center">
<h1>Axis C++ Windows Developers Guide</h1>
</div>
<div class="h3">
<div class="h3">
<h3>Axis C++ Windows Developers Guide</h3>
</div>
<p>
<a href="#buildaxis">Building and Deploying Axis C++</a>
<br>
<a href="#cvscheckout">Getting a cvs checkout</a>
<br>
<a href="#getapacheexpat">Getting necessary third party software</a>
<br>
<a href="#installapacheexpat">Installing Apache and Expat</a>
<br>
<a href="#setupandbuildaxis">Setting up the build environment and building Axis</a>
<br>
<a href="#deployaxis">Deploying Axis in Apache</a>
<br>
<a href="#deploywebservice">Deploying a web service in Axis C++</a>
<br>
<a href="#generatefiles">Generating Serverside Skeletons/ wrappers and client side stubs</a>
<br>
<a href="#eclipse">Using eclipse to build and run WSDL2Ws</a>
<br>
<a href="#commandline">Building and running WSDL2Ws on the command line</a>
<br>
<a href="#builddeployws">Building and Deploying the web service</a>
<br>
<a href="#providedservices">Building and deploying the provided interop web services samples</a>
<br>
<a href="#providedclients">Building and deploying the provided interop client applications</a>
<br>
<a href="#consumews">Consuming the web service with Axis C++ client</a>
<br>
<a href="#runclient">Coding and Running the client</a>
<br>
<a href="#transport">Creating and Building your own transport layer</a>
<br>
<a href="#parser">Creating and Building your own parser</a>
</p>
<p>
<strong>Before going through this guide, please go through the</strong> <a href="winuser-guide.html"><strong>Windows User Guide</strong></a> <strong>and also be familiar with how to use binaries.</strong>
</p>
<p>
<strong>*Note:</strong>The Expat XML Parser module is not currently maintained and also contains some bugs. So it is removed from the 1.4 release. Please ignore any references to the Expat parser in the documentation. The documentation will be updated regarding this later.</p>
<p>
<a name="buildaxis"></a>
</p>
<div class="h3">
<h3>Axis C++</h3>
</div>
<p>
<a name="cvscheckout"></a>
</p>
<div class="h4">
<h4>Getting a cvs checkout</h4>
</div>
<p>Visit <a href="#http://ws.apache.org/">http://ws.apache.org/</a> Click on &ldquo;axis&rdquo; and then on &ldquo;CVS Repository&rdquo; to find details on how to access the CVS Repository. It will have instructions similar to the following.<br>
<br>&ldquo;Anyone can checkout the source code from our anonymous CVS server. To do so, simply use the following commands (if you are using a GUI CVS client, configure it appropriately):<br>
<br>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login<br> password: anoncvs<br>
<br>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout ws-axis<br>
<br>The examples given below are based on these lines of instructions.<br>
<br>To use the command line cvs client go to http://www.cvshome.org, click on the "CVS Downloads" link.In the resulting page under the heading "CVS downloads",there will be a link named "historical download pages", where you can download the cvs binaries for Windows. Download the Windows cvs binaries. Extract the cvs binaries from the downloaded zip file.When this is extracted there will be a &ldquo;cvs.exe&rdquo; file . Set the PATH environment variable to &ldquo;cvs.exe&rdquo;<br>
<br>You would have to do the following to get a checkout from the command line cvs client.<br>
<br>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login<br>Now you will be prompted for the password. Enter the password.<br>
<br>password: anoncvs<br>
<br>Now enter the following cvs command to checkout the axis Repository.<br>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout ws-axis<br>
<br>The checkout of the repository will be created in the current directory in a folder named &ldquo;ws-axis&rdquo;<br>
<br>The checked out folder ws-axis will be referred to as [Checkout_Folder] from this point on.<br>
</p>
<p>
<a name="getapacheexpat"></a>
</p>
<div class="h4">
<h4>Getting necessary third party software</h4>
</div>
<p>
<strong>Expat XML Parser</strong>
</p>
<p>
<strong>Note:</strong>The Expat XML Parser module is not currently maintained and also contains some bugs. For more information refer the *Note:at the top of the page.</p>
<p>
<br>You can get expat binaries from the url http://sourceforge.net/projects/expat/<br>This documentation was tested with the expat 1.95.7 which is distributed as expat_win32bin_1_95_7.exe.<br>
</p>
<p>(Axis Cpp Developers can use either Xerces-c or the Expat XML Parsers to build the Axis Cpp. The Source in CVS supports expat out of the box.)</p>
<p>
<strong>Apache Web Server</strong>
</p>
<br>
<p>Download the Apache web server from www.apache.org. Currently Axis supports apache 1.3.x and 2.X. This documentation was tested with Apache 1.3.28 and Apache 2.0.44.</p>
<p>
<a name="installapacheexpat"></a>
</p>
<div class="h4">
<h4>Installing Apache and Expat</h4>
</div>
<br>
<p>
<strong>Xerces</strong>
</p>
<br>
<p>Run the file xerces-c2_2_0-win32.The folder to which Xerces is unzipped will be referred to as [Xerces_Folder] from this point onwards.</p>
<br>
<p>
<strong>Expat</strong>
</p>
<br>
<p>
<strong>Note:</strong>The Expat XML Parser module is not currently maintained and also contains some bugs. For more information refer the *Note:at the top of the page.</p>
<p>Run the file expat_win32bin_1_95_7.exe . The folder to which Expat is unzipped will be referred to as [Expat_Folder] from this point onwards.</p>
<br>
<p>
<strong>Apache</strong>
</p>
<br>
<p>Install the Apache web server. By default Apache 1.3.X is installed in "C:\Program Files\Apache Group\Apache" and Apache 2.X in "C:\Program Files\Apache Group\Apache2". These locations will be referred to as [Apache_Folder] from this point onwards.</p>
<p>
<br>
</p>
<p>
<a name="setupandbuildaxis"></a>
</p>
<div class="h4">
<h4>Setting up the build environment and building Axis</h4>
</div>
<br>
<p>
<strong>For Expat Parser</strong>
</p>
<p>
<strong>Note:</strong>The Expat XML Parser module is not currently maintained and also contains some bugs. For more information refer the *Note:at the top of the page.</p>
<p>1) Copy [Expat_Folder]\source\lib\expat.h from expat binary distribution to [Checkout_Folder]\c\include\expat\ directory<br>
<br>2) Copy [Expat_Folder]\lib\libexpat.lib to [Checkout_Folder]\c\lib\expat\ directory.</p>
<br>
<br>
<p>
<strong>For Xerces Parser</strong>
</p>
<p>1) Copy [Xerces_Folder]\lib\xerces-c_2.lib to [Checkout_Folder]\c\lib\xerces\ directory.</p>
<p>2) Copy [Xerces_Folder]\include\xercesc to [Checkout_Folder]\c\include\xerces\ directory.</p>
<p>
<strong>For apache 1.3.X:</strong>
</p>
<p>1) Copy the include files in "[Apache_Folder]\include" directory to "[Checkout_Folder]\c\include\apache1_3\"<br>
<br>2) Copy the ApacheCore.lib file from [Apache_Folder]\libexec to [Checkout_Folder]\c\lib\apache1_3.</p>
<br>
<p>
<strong>For apache 2.X:</strong>
</p>
<p>1) Copy the include files in "[Apache_Folder]\include" directory to "[Checkout_Folder]\c\include\apache2_0\"<br>
<br> 2) Copy the following lib files libapr.lib, libhttpd.lib files from "[Apache_Folder]\lib" to "[Checkout_Folder]\c\lib\apache2_0".<br>
</p>
<br>
<p>
<strong>Building the AxisServer and AxisClient dlls</strong>
</p>
<br>
<p>Build the AxisServer and AxisClient projects.(Click on file in Visual C++ ,open Visual C++ Distribution workspace (Distribution.dsw) at [Checkout_Folder]\c\vc\. In the workspace window, File View, right click on the AxisServer project and AxisClient project ).Which will build the AxisServer.dll and AxisClient.dll</p>
<br>
<p>
<strong>Building Apache Modules (Apache 1.3.X and Apache 2.X)</strong>
</p>
<p>In Visual C++ (The version used for this documentation was Visual C++ 6.0) click on file ,open Visual C++ Distribution workspace (Distribution.dsw) at [Checkout_Folder]\c\vc\. In the workspace window, File View, right click on either the project "Apache1_3Module files" or "Apache2_0Module files" and click on the "Set as Active Project" to make it the Active Project.<br>
<br> Again in Visual C++ right click on either the project "Apache1_3Module" or "Apache2_0Module" in the workspace window, File View, and then click on Settings in the popup menu. Select the link tab. Select General from the Category drop down list. In the Output file name text box put the value [Checkout_Folder]\modules\mod_axis.dll and click OK.(To build a Apache Module, AxisServer.lib should be in the settings Link tab )</p>
<p>Build either Apache1_3Module or Apache2_0Module project. In Visual C++ right click on either the project "Apache1_3Module" or "Apache2_0Module" in the workspace window, File View and click "build (selection only)" to build mod_axis.dll for Apache1_3Module or mod_axis2.dll for Apache2_0Module.<br>
<br>(From here onwards we refer to these modules as Apache_Module. Replace it with the correct module for the Apache server version that you have installed). Then build SimpleAxisServer. &nbsp;</p>
<br>
<p>
<strong>Axis Transport Library</strong>
</p>
<p>In VC++ distribution workspace build AxisTransport project.Then AxisTransport.dll will be built.</p>
<br>
<p>
<strong>Xerces Parser Library and Expat Parser Library</strong>
</p>
<p>In VC++ distribution workspace build either AxisXMLParserXerces project or AxisXMLParserExpat project. Then AxisXMLParser.dll will be built.</p>
<br>
<p>
<strong>Building AxisTransport.dll and AxisXMLParser.dll</strong>
<br>Build the AxisTransport and AxisXMLParser projects. Which will build the AxisTransport.dll and AxisXMLParser.dll in [Checkout_Folder]\c\bin.</p>
<p>(When the projects are built in Debug mode then the Dlls will appear as AxisTransport_D and AxisXMLParser_D.dll)</p>
<p>
<a name="deployaxis"></a>
</p>
<div class="h4">
<h4>Deploying Axis in Apache</h4>
</div>
<br>
<p>1) Create a directory structure called "Axis" inside [Apache_Folder] as follows.<br>(Instead, you can copy the folder [Checkout_Folder]\c\deploy to [Apache_Folder] and rename it to "Axis" and you will find some of the files that you are asked to create in this guide, already existing in that folder)<br>
<br>Axis<br>|__ lib (Copy [Expat_Folder]\Libs\libexpat.dll or<br> &nbsp; &nbsp; [Xerces_Folder]\bin\xerces-c_2_2_0.dll and paste it inside)<br>|__ logs (log files are located here)<br>|__ conf (server.wsdd file is located here)<br>|__ webservices (The place to put webservice dlls)<br>|__ wsdls (wsdl files of the deployed web services are located here)<br>
<br>2) Set an environment variable named AXISCPP_DEPLOY and give [Apache_Folder]\Axis as the value.<br>
<br>i)You will find AxisServer.dll and Apache_Module in [Checkout_Folder]\c\bin directory.<br>ii)Copy Apache_Module to [Apache_Folder]\modules directory of your apache installation.<br>
</p>
<p>Copy AxisServer.dll ,AxisTransport.dll and AxisXMLParser.dll to [AXISCPP_DEPLOY]\lib\ directory and add that directory to your PATH environment variable.Or to any location specified by your PATH environment variable.</p>
<br>
<br>
<p>3) Set the "PATH" environment variable to the following directories.<br>[Apache_Folder]<br>[Apache_Folder]\Axis\lib<br>
<br> 4) Include the following lines at the bottom of the apache configuration file [Apache_Folder]\conf\httpd.conf<br>
<br>LoadModule axis_module modules/Apache_Module<br>&lt;Location /axis&gt;<br>SetHandler axis<br>&lt;/Location&gt;<br>
<br>5) Create a file in [Apache_Folder]\Axis named "axiscpp.conf" which should contain the following lines.<br>
<br>LogPath:XXXX<br>WSDDFilePath:YYYY<br>Transport_http:ZZZZ (Not necessary)<br>XMLParser:WWWW<br>
<br>XXXX is the path to a file named AxisLog (The log file)and YYYY is the path to the server.wsdd file.ZZZZ is the path to AxisTransport.dll if it's a HTTP(if the selected transport is SMTP then should give that path.)WWWW is the path to AxisXMLParser.dll<br>
<br>i.e.<br>LogPath:[Apache_Folder]\Axis\logs\AxisLog.log<br>WSDDFilePath:[Apache_Folder]\Axis\conf\server.wsdd<br>Transport_http:[Apache_Folder]\Axis\lib\AxisTransport.dll<br>XMLParser:[Apache_Folder]\Axis\lib\AxisXMLParser.dll</p>
<p>
<strong>Note:If the AxisTransport.dll and AxisXMLParser.dll paths are not given in axiscpp.conf then the hardcoded values will be used.For that set the path of these two in the PATH environment variable or copy them to the same location as the Client.exe.</strong>
</p>
<br>
<br>
<p>
<strong>Note: Make sure that if you are using Expat that libexpat.dll ([Expat_Folder]\Libs\) file is pasted in %AXISCPP_DEPLOY%/lib/ and if you are using Xerces that xerces-c_2_2_0.dll ([Xerces_Folder]\bin) is pasted in %AXISCPP_DEPLOY%/lib/</strong>
</p>
<p>6) Select start-&gt;programs-&gt;Apache HTTP server-&gt;Control Apache Server-&gt;stop to stop the apache server<br>(This is because apache will be started automatically by the installation program)<br>
<br>Open up a DOS terminal and give the command "apache -k start" to start apache (If Apache 2.0 server does not respond when started this way, try "apache -X").<br>open a browser and verify whether you can browse http://localhost/ (or give the machines ip as http://xxx.xxx.xxx.xxx/). If apache is running you will see the Apache start page in the browser.&nbsp;</p>
<p>
<a name="deploywebservice"></a>
</p>
<div class="h3">
<h3>Deploying a web service in Axis C++</h3>
</div>
<p>
<a name="generatefiles"></a>
</p>
<div class="h4">
<h4>Generating Serverside Skeletons/ wrappers and client side stubs</h4>
</div>
<p>
<a name="eclipse"></a>
</p>
<div class="h2">
<h2>Using eclipse to build and run WSDL2Ws</h2>
</div>
<p>In the checked out source code there is a "wsdl2ws" (i.e. wsdl-to-web services) written in java that generates server side Skeletons/wrappers and client side stubs using a given WSDL file. This Section describes how this is done.<br>To build and run the java tool this section uses the eclipse platform. For this documentation eclipse 2.1.0 was used and the jdk version used was j2sdk1.4.1_01. You will not be able to build the java tool with jdk versions below 1.4.0.<br>
<br>1) Start the eclipse platform IDE.<br>Go to File-&gt;New-&gt;Project.<br>
<br>Select java in the "New Project" dialog and click "Next".<br>
<br>In the "New" dialog that appears give a project Name (e.g. test). In the "New dialog" keep the "use default" Tick Box checked.<br>Note down the path in the "Directory" Text Box. This location will be referred to as [Skelstub_Folder] from this point onwards. Click "Next".<br>
<br>Another dialog named "New&rdquo; will appear. Select the &ldquo;Source&rdquo; tab. Select the project that you created (i.e. test).<br>Click on &ldquo;Add Folder&hellip;&rdquo;. In the &ldquo;Source Folder Selection&rdquo; dialog that appears select the project that you created (i.e. test) and click &ldquo;Create New Folder&hellip;&rdquo;. In the &ldquo;New Folder&rdquo; dialog that appears give a folder name as &ldquo;src&rdquo; and click &ldquo;OK&rdquo;. Click &ldquo;OK&rdquo; in the &ldquo;Source Folder Selection&rdquo; dialog. Click &ldquo;Yes&rdquo; on the confirmation message box that pops up.<br>
<br>Click &ldquo;Libraries&rdquo; in the &ldquo;New&rdquo; dialog. Click &ldquo;Add External JARs&hellip;&rdquo;. In the &ldquo;JAR Selection&rdquo; dialog that appears browse to the location where the latest jars are and select the following JARs.<br>
<br>
<strong>Note:</strong> The latest jars are in <a href="http://apache.towardex.com/ws/axis/1_2beta/">http://apache.towardex.com/ws/axis/1_2beta/</a>
<br>
<br>axis.jar<br>commons-discovery.jar<br>commons-logging.jar<br>jaxrpc.jar<br>saaj.jar<br>wsdl4j.jar<br>xml-apis.jar<br>
<br>Click &ldquo;Open&rdquo;.<br>
<br>Click &ldquo;Finish&rdquo; on the &ldquo;New&rdquo; dialog.<br>
<br>2) Copy the &ldquo;org&rdquo; folder inside [Checkout_Folder]\c\src\wsdl to [Skelstub_Folder]\src. The &ldquo;org&rdquo; folder contains the package structure for the WSDL2Ws java tool.<br>
<br>3) Go to eclipse and right click on the &ldquo;Package Explorer&rdquo; window and click on &ldquo;Refresh&rdquo; in the popup menu that appears. Now you should be able to see the source that was copied, in the &ldquo;Package Explorer&rdquo; window. By now eclipse would have built the WSDL2Ws tool.<br>
<br>For this demonstration we will use a Calculator web service and the WSDL file the web service is located at [Checkout_Folder]\c\samples\server\simple.<br>
<br>Copy the Calculator.wsdl to [Skelstub_Folder]<br>
<br>In eclipse go to &ldquo;Run-&gt;Run&hellip;&rdquo;.<br>In the Java Application item select the New_Configuration.Then select the &ldquo;Main&rdquo; tab. In &ldquo;Project&rdquo; text box give the name of the project you created (i.e. test).<br>In the &ldquo;Main Class&rdquo; text box give the class as &ldquo;org.apache.axis.wsdl.wsdl2ws.WSDL2Ws&rdquo;.<br>&nbsp;</p>
<p>
<img alt="" src="images/c/main_class.jpg"></p>
<p>Select the &ldquo;Arguments&rdquo; tab.</p>
<p>In the &ldquo;Program Arguments&rdquo; text box give the following argument.</p>
<p>&ldquo;Calculator.wsdl -o./ServerOut -lc++ -sserver&rdquo;.</p>
<p>
<img alt="" src="images/c/argument.jpg"></p>
<p>
<strong>NOTE: These are the arguments for the java tool WSDL2Ws. The usage of the WSDL2Ws is as follows.</strong>
<br>Java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws &lt;wsdl file&gt; -o&lt;output directory&gt;<br>-l&lt;c|c++&gt; -s&lt;(server|client)&gt;.<br>Also note that there cannot be any spaces after a switch (i.e. -o, -l).<br>
<br>Click &ldquo;Run&rdquo;.<br>Now the Skeletons/Wrappers will be generated and you will see messages in the eclipse console displaying the generated files. The generated Skeletons/Wrappers will be created in a folder named [Skelstub_Folder]\ServerOut as given in the arguments when you run the tool.<br>
<br>Similarly to generate the client stubs use the following arguments in eclipse and run.<br>&ldquo;Calculator.wsdl -o./ClientOut -lc++ -sclient&rdquo;.<br>The generated Stubs will be created in a folder named [Skelstub_Folder]\ClientOut.<br>&nbsp;</p>
<p>
<a name="commandline"></a>
</p>
<div class="h2">
<h2>Building and running WSDL2Ws on the command line</h2>
</div>
<p>To build the WSDL2Ws java tool on the command line you require jdk1.4 or above.<br>
<br>To build WSDL2Ws java tool set the CLASSPATH Environment Variable to point to the following jar files.Create a New Folder called wsdl2wsTool\lib and put the above mentioned jars in it. You can find the latest jars in <a href="http://apache.towardex.com/ws/axis/1_2beta/">http://apache.towardex.com/ws/axis/1_2beta/</a>
<br>
<br>axis.jar<br>commons-discovery.jar<br>commons-logging.jar<br>jaxrpc.jar<br>saaj.jar<br>wsdl4j.jar<br>xml-apis.jar<br>
<br>Open a command window.<br>
<br>Change directory to [Checkout_Folder]\c\src\wsdl.<br>We will refer to this directory as [Skelstub_Folder] as we did during generating Skeletons/Wrappers and Stubs with eclipse.<br>
<br>Run the following command to build the java tool.<br>
<strong>javac -sourcepath . org\apache\axis\wsdl\wsdl2ws\*.java</strong>
<br>
<br>
<strong>NOTE: Notice the spaces between the "dot" after the -sourcepath switch</strong>
<br>If the command finishes without any output then the java tool has been built.<br>
<br>Now copy the Calculator.wsdl file in [Checkout_Folder]\c\samples\server\simple, which we use in this example to [Skelstub_Folder]<br>
<br>Now run the following command to generate the server side skeletons and wrappers in the same [Skelstub_Folder].<br>
<br>Java -classpath .;%classpath% org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -o./ServerOut -lc++ -sserver<br>
<br>Give the class path exactly the same order as given above.<br>
<br>If the tool is successful it will display the files it has generated. The skeletons and stubs will be generated in [Skelstub_Folder]\ServerOut.<br>
<br>Run the following command to generate the client stubs.<br>
<br>Java -classpath .;%classpath% org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -o./ClientOut -lc++ -sclient<br>
<br>The generated client stubs will be in [Skelstub_Folder]\ClientOut<br>
</p>
<p>
<a name="builddeployws"></a>
</p>
<div class="h4">
<h4>Building and Deploying the web service</h4>
</div>
<p>1) If you have followed the above instructions correctly you would have been able to generate the Server side Skeletons and Wrappers for the Calculator.wsdl<br>
<br> 2) Start Visual C++.<br>
<br>3) Go to File-&gt;New&hellip;<br>
<br>4) Select the &ldquo;Projects&rdquo; tab.<br>
<br>5) Select &ldquo;Win 32 Dynamic-Link Library&rdquo;.<br>
<br>6) Give a project name (e.g. ws1), give a folder (say "deployws") as the "location" of the project, select the "create new workspace" radio button, and click &ldquo;OK&rdquo;.When this procedure is followed the "ws1" project files are created in a folder named "ws1" inside the "deployws" folder.<br>
<br>7) In the dialog that appears select &ldquo;An empty DLL project&rdquo; click &ldquo;Finish&rdquo; and then &ldquo;OK&rdquo;.<br>
<br>8) Right click on the project that you created (i.e. ws1) and click &ldquo;Add Files to Project&hellip;&rdquo; on the menu that appears. In the &ldquo;Insert Files into Project&rdquo; dialog select the generated .cpp and .h files in [Skelstub_Folder]\ServerOut and click &ldquo;OK&rdquo;.<br>
<br>9) Right click on the project (i.e. ws1)again and click on &ldquo;Settings&hellip;&rdquo; on the menu that appears. Click the C/C++ tab and select &ldquo;Preprocessor&rdquo; from the &ldquo;Category&rdquo; Drop down list. Add Axis include directory [Checkout_Folder]c\include\ to the project In the &ldquo;Additional include directories&rdquo;<br>
<br>10) Now add the business logic to the generated Skeletons. The Skeletons in this case are Calculator.h and Calculator.cpp<br>
<br>11) We will implement two methods that are in Calculator.cpp as follows.<br>int Calculator::add(int Value0, int Value1)<br>{<br>return Value0+Value1; //business logic<br>}<br>int Calculator::subtract(int Value0, int Value1)<br>{<br>return Value0-Value1; //business logic<br>}<br>
<br>12) Right click on the project (i.e. ws1) and click &ldquo;Build&rdquo; on the menu that appears. Visual C++ should be able to build the project without any errors now.<br>
<br>13) The ws1.dll will be built in "ws1\Debug" by Visual C++<br>
<br>14) Place the built ws1.dll file in [Apache_Folder]\Axis\webservices<br>
<br>15) In addition to this create server.wsdd file in [Apache_Folder]\Axis\conf<br>
<br>The server.wsdd file for this example is given below</p>
<pre>&lt;deployment&gt;
&lt;service name="Calculator"&gt;
&lt;parameter name="className"
value="[APACHE_HOME]\Axis\webservices\ws1.dll"/&gt;
&lt;parameter name="allowedMethods" value="subtract add "/&gt;
&lt;/service&gt;
&lt;/deployment&gt;</pre>
<p>In this file [Apache_Folder] has to be replaced with the actual value of [Apache_Folder] (i.e. In this case "C:\Program Files\Apache Group\Apache" for apache 1.3.x and "C:\Program Files\Apache Group\Apache2" for apache 2.x)<br>
<br>
<strong>Description of the server.wsdd file</strong>
<br>
<br>The service element specifies the service name.<br>&lt;service name="Calculator"&gt;<br>
<br>In this parameter element we specify the parameter className and for it&rsquo;s value we specify the location of the webservice dll.<br>&lt;parameter name="className" value="C:\Program Files\Apache Group\Apache\Axis\webservices\ws1.dll"/&gt;<br>
<br>In this parameter element we specify the parameter allowedMethods and for its value we specify the methods exposed by the web service (i.e. subtract and add).<br>
<br>
<strong>Note: A trailing space should be inserted after every allowed method.</strong>
<br>&lt;parameter name="allowedMethods" value="subtract add "/&gt;<br>
<br>16) Now start the Apache web server by typing &ldquo;apache -k start&rdquo;. If the Apache server is running type &ldquo;apache -k restart&rdquo;<br>
<br>17) Now type http://localhost/axis/ in a browser and you will see the &ldquo;Welcome to Axis C++&rdquo; page with a listing of deployed services and Calculator service .<br>&nbsp;</p>
<p>
<a name="consumews"></a>
</p>
<div class="h3">
<h3>Consuming the web service with Axis c++ client</h3>
</div>
<p>
<a name="runclient"></a>
</p>
<div class="h4">
<h4>Coding and Running the client</h4>
</div>
<p>1) If you have followed the above instructions you would have been able to generate the Server side Skeletons and Wrappers for the Calculator.wsdl.<br>
<br> 2) Start Visual C++.<br>
<br>3) Go to File-&gt;New&hellip;<br>
<br>4) Select the &ldquo;Projects&rdquo; tab<br>
<br>5) Select &ldquo;Win 32 Console Application&rdquo;<br>
<br>6) Give a project name (e.g. calclient) and click &ldquo;OK&rdquo;. Give a project name (e.g. calclient), give a folder ( For e.g: "wsclient") as the "location" of the project, select the "create new workspace" radio button, and click &ldquo;OK&rdquo;.When this procedure is followed the "calclient" project files are created in a folder named "calclient" inside the "wsclient" folder.<br>
</p>
<p>7) In the dialog that appears select &ldquo;An empty project&rdquo; click &ldquo;Finish&rdquo; and then &ldquo;OK&rdquo;.<br>
<br>8) Right click on the project that you created (i.e. ws1) and click &ldquo;Add Files to Project&hellip;&rdquo; on the menu that appears.Then Add the generated .cpp and .h files from the [Skelstub_Folder]\ClientOut to the project and click &ldquo;OK&rdquo;.<br>
<br>9) Right click on the project (i.e. calclient) again and click on &ldquo;Settings&hellip;&rdquo; on the menu that appears. Click the &ldquo;C/C++&rdquo; tab and select &ldquo;Preprocessor&rdquo; from the &ldquo;Category&rdquo; Drop down list.<br>In the &ldquo;Additional include directories&rdquo; give [Checkout_Folder]c\include as the include path.<br>
</p>
<p>10) Click the &ldquo;Link&rdquo; tab and select &ldquo;Input&rdquo; from the &ldquo;Category&rdquo; Drop down list.<br>Add AxisClient.lib to the &ldquo;Object/library modules&rdquo; and in the &ldquo;Additional library path&rdquo; give the path. AxisClient.lib can be found in [Checkout_Folder]\c\bin once you build the AxisClient,AxisTransport,AxisXMLParserXerces or AxisXMLParserExpat projects of the "Distribution" VC workspace.<br>
<br>&nbsp;</p>
<p>Now the client should be coded. Basically this will be a main method. We will write the main method in the file Calculator.cpp of the VC project "calclient". This is the stub generated by the java tool in the stub generation step.<br>
<br>Add the following main method to Calculator.cpp<br>
</p>
<pre>void main()
{
Calculator cal;
int result = cal.add(22, 33);
printf("The result is : %d", result);
}</pre>
<br>
<p>It is better to have the path to your AxisXMLParser.dll and AxisTransport.dll in axiscpp.conf or have the dlls where the client exe is.</p>
<p>Right click on the project and click &ldquo;Build&rdquo; on the menu that appears.</p>
<p>When the XMLParser is running these steps would occur.<br>1. Locate Parser dll.<br>2. Create Parser instance by CreateInstance() method.<br>3. Give the stream to parser by setInputStream() method.<br>4. Call next() method multiple times.<br>5. getStatus() to see if the streams are properly passed.<br>6. Destroy parser object by DestroyInstance().<br>
</p>
<p>If Visual C++ complains about missing libs go to Build-&gt;Rebuild All (Please make sure that the apache server is stopped). Now the client exe is built.<br>
<br> Start the Apache server by typing apache -k start and run the exe from Visual C++ by going to Build-&gt;Execute calclient.exe. If all goes well, now you would see the SOAP Request, SOAP Response and the result printed by calclient.exe.</p>
<p>
<a name="providedservices"></a>
</p>
<div class="h4">
<h4>Building and deploying the provided samples of interop web services</h4>
</div>
<p>
<br>1) Open the Visual C++ workspace (interoptests.dsw) at [Checkout_Folder]\c\vc\samples\server\interoptests\ and do a batch build of all projects.<br>
<br>2) You will find the built dynamic libraries at [Checkout_Folder]\c\bin directory. Following are the built DLLs.<br>
<br>base.dll<br>cbase.dll<br>cGroupB.dll<br>doclitbase.dll<br>doclitgroupB.dll<br>groupB.dll<br>
<br>3) Copy these dlls to [Apache_Folder]\Axis\webservices<br>
<br>4) Add the required entries to the server.wsdd file in [Apache_Folder]\Axis\conf to deploy these interop services. You can find the required entries in the [Checkout_Folder]\c\deploy\conf\server.wsdd_win file. You will need to modify the "value" of the "classname" parameter of each service to point to the relevant web service dll given above in [Apache_Folder]\Axis\webservices.</p>
<p>
<a name="providedclients"></a>
</p>
<div class="h4">
<h4>Building and running the provided interop client applications</h4>
</div>
<p>
<br>1) Open the Visual C++ workspace (interoptests.dsw) at [Checkout_Folder]\c\vc\samples\client\interoptests\ and do a batch build of all projects.<br>
<br>2) You need to build the AxisClient project in the "Distribution" workspace at [Checkout_Folder]\c\vc\, because you need the AxisClient.lib to compile client applications and AxisClient.dll to run them.<br>
<br>3) You will find the built console applications and AxisClient.dll at [Checkout_Folder]\c\bin directory. Following are the built .exe files.<br>
<br> base.exe<br> cbase.exe<br> cgroupB.exe<br> doclitbase.exe<br> doclitgroupB.exe<br> groupB.exe<br>
<br>4) In order to run these samples you should have AxisClient.dll in the PATH environment variable or in the same directory where the .exe is.</p>
<p>
<a name="transport"></a>
</p>
<div class="h4">
<h4>Creating and Building your own transport layer</h4>
</div>
<img alt="" src="images/c/parserd/transport.jpg"><p>When creating your own transport layer refer SoapTransport.h header file for API.To see an example implementation refer AxisTransport.h and AxisTransport.cpp</p>
<p>Implement SoapTransport.h interface according to rules described in the header file.<br>Transport layer is built separately from Axis. Then Axis loads transport dynamic library through following export functions which you also have to implement.</p>
<p>CreateInstance (SoapTransport *pOut)- Used by Axis to create an instance of your transport class<br> DestroyInstance (SoapTransport *pIn) - Used by Axis to destroy the created transport class instance</p>
<p>Compile your transport code and build a dynamic library. Add the name of your transport library to axis configuration file (axiscpp.conf) so that Axis can find your library at runtime.</p>
<p>
<a name="parser"></a>
</p>
<div class="h4">
<h4>Creating and Building your own parser</h4>
</div>
<img alt="" src="images/c/parserd/parser.jpg"><p>
<strong>Note:Implement XMLParser.h interface according to the rules described in the header file.</strong>
<br>
</p>
<p>When creating your own parser refer XMLParser.h header file for API. To see an example implementation refer SoapParserExpat.h,SoapParserExpat.cpp, SoapParserXerces.h and SoapParserXerces.cpp.</p>
<p>Axis loads the parser dynamic library through following export functions which you also have to implement.</p>
<p>CreateInstance() - Used by Axis to create an instance of your parser class<br> DestroyInstance() - Used by Axis to destroy the created parser class instance</p>
<p>Compile your parser code and build a dynamic library. Add the name of your parser library to Axis configuration file (axiscpp.conf) so that Axis can find your library at runtime</p>
<div id="pdf" align="right">
<a href="windev-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif" class="skin"><br>
PDF</a>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<div id="footer">
<table summary="footer" cellspacing="0" cellpadding="4" width="100%" border="0">
<tbody>
<tr>
<td colspan="2">
<div align="center">
<div class="copyright">
Copyright &copy; 2000-2005&nbsp;The Apache Software Foundation. All rights reserved.
</div>
</div>
</td>
</tr>
<tr>
<td align="left"></td><td align="right">
<div align="right">
<div class="credit"></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>