<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2683597758423811533</id><updated>2011-09-11T01:47:00.080-07:00</updated><category term='linux'/><category term='axiom'/><category term='rampartc'/><category term='xml'/><category term='TCP mon tool'/><category term='ws-trust'/><category term='service client'/><category term='Spider monkey'/><category term='CMake'/><category term='gdb'/><category term='Javascript'/><category term='WS-Transfer'/><category term='Axis2/C modules'/><category term='performance'/><category term='wsdl2c'/><category term='parser'/><category term='open source'/><category term='web services'/><category term='axis2c'/><category term='json'/><category term='subversion'/><title type='text'>Web Services With Axis2/C</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-2827450056389139022</id><published>2009-07-25T10:22:00.000-07:00</published><updated>2009-07-25T10:28:55.975-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='CMake'/><title type='text'>CMake based build system for Axis2/C</title><content type='html'>This post is about the new &lt;a href="http://www.cmake.org/"&gt;CMake&lt;/a&gt; based build system for &lt;a href="http://ws.apache.org/axis2/c/"&gt;Axis2/C&lt;/a&gt;. Once the &lt;a href="https://issues.apache.org/jira/browse/AXIS2C-1381"&gt;patch&lt;/a&gt; applies to the Axis2/C trunk the Axis2/C community will benefit from it.&lt;br /&gt;&lt;a href="http://cmake.org/"&gt;&lt;br /&gt;CMake&lt;/a&gt; is a cross platform build system. It generates build files for native build environments(i.e. Makefile for UNIX/Linux, VS Projects/Workspaces for Windows and Xcode for Apple). It's doing the same job as popular &lt;a href="http://en.wikipedia.org/wiki/GNU_build_system"&gt;GNU build tools&lt;/a&gt;(autoconf, automake, Libtool). CMake has a lot of cool &lt;a href="http://www.cmake.org/Wiki/Really_Cool_CMake_Features"&gt;features&lt;/a&gt;. Some of are listed below. And CMake is opensource.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CMake features&lt;/span&gt;&lt;br /&gt;1. Manage, complex and large build environments (ex: KDE4)&lt;br /&gt;2. Very Flexible and Extensible.&lt;br /&gt;3. Very simple script language for build script writing.&lt;br /&gt;4. Support both in-source and out-source builds.&lt;br /&gt;5. Cross compiling.&lt;br /&gt;6. Integrated testing and packaging tools(CTest, CPack)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Instructions to use CMake build system for Axis2/C on UNIX/Linux&lt;/span&gt;&lt;br /&gt;The build has written to run as a out of source build. This mean that the build files and then object files will be generated out side of the main source tree.&lt;br /&gt;Once you checkout the soure from the trunk, issue the following commands to build Axis2/C using CMake. You need to have &lt;a href="http://cmake.org/cmake/resources/software.html"&gt;CMake installed&lt;/a&gt;(2.6 or above)  on your system.&lt;br /&gt;&lt;br /&gt;1. export AXIS2C_HOME=/path/where/you/want/axis2c/to/live&lt;br /&gt;(e.g.: export AXIS2C_HOME=/home/rajika/project/axis2c/axis2-build/deploy)&lt;br /&gt;&lt;br /&gt;2. mkdir axis2c-build(assuming you are at /home/rajika/project/axis2c/)&lt;br /&gt;&lt;br /&gt;3. cd axis2c-build&lt;br /&gt;&lt;br /&gt;4. cmake ../ (you have checked out the Axis2/C source into /home/rajika/project/axis2c/)&lt;br /&gt;&lt;br /&gt;5. make&lt;br /&gt;&lt;br /&gt;6. make install&lt;br /&gt;&lt;br /&gt;Done!. You'll see all the binaries are available inside deploy directory together with the libraries and the configuration files requires to run the server and the samples successfully.&lt;br /&gt;&lt;br /&gt;It built within less than 20 seconds in my laptop(running Fedora 10 with gcc 4.3.2 with Dual core processors-2.20GHz,2.20GHz and with 3GB of physical memory). Following are few screen shots of Axis2/C CMake build in action. You'll notice the cool CMake features there.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hha64Sbr4OI/Sms_yMI9cFI/AAAAAAAAABM/iOpWx2ZcYqc/s1600-h/Screenshot-2.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_hha64Sbr4OI/Sms_yMI9cFI/AAAAAAAAABM/iOpWx2ZcYqc/s320/Screenshot-2.png" alt="" id="BLOGGER_PHOTO_ID_5362449912799522898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hha64Sbr4OI/SmtAGOIgPBI/AAAAAAAAABU/AxP9hzUBgh8/s1600-h/Screenshot-3.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_hha64Sbr4OI/SmtAGOIgPBI/AAAAAAAAABU/AxP9hzUBgh8/s320/Screenshot-3.png" alt="" id="BLOGGER_PHOTO_ID_5362450256931863570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hha64Sbr4OI/SmtAay8ChcI/AAAAAAAAABc/k5yl6VLemGQ/s1600-h/Screenshot-4.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_hha64Sbr4OI/SmtAay8ChcI/AAAAAAAAABc/k5yl6VLemGQ/s400/Screenshot-4.png" alt="" id="BLOGGER_PHOTO_ID_5362450610409080258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A separate blog will follow describing how to extend the new build system when extending Axis2/C using samples(client+services), transports and message receivers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-2827450056389139022?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/2827450056389139022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=2827450056389139022' title='33 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2827450056389139022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2827450056389139022'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2009/07/cmake-based-build-system-for-axis2c.html' title='CMake based build system for Axis2/C'/><author><name>Rajika Kumarasiri</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hha64Sbr4OI/Sms_yMI9cFI/AAAAAAAAABM/iOpWx2ZcYqc/s72-c/Screenshot-2.png' height='72' width='72'/><thr:total>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-2038435890894932426</id><published>2009-03-06T22:08:00.000-08:00</published><updated>2009-03-06T22:09:12.362-08:00</updated><title type='text'>Memory Handling conventions in Axis2/C</title><content type='html'>&lt;a href="http://damithakumarage.wordpress.com/2009/03/07/memory-handling-conventions-in-axis2c/"&gt;Memory Handling conventions in Axis2/C&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-2038435890894932426?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/2038435890894932426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=2038435890894932426' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2038435890894932426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2038435890894932426'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2009/03/memory-handling-conventions-in-axis2c.html' title='Memory Handling conventions in Axis2/C'/><author><name>Damitha Kumarage</name><uri>http://www.blogger.com/profile/11918339690996039146</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-5171670930055743640</id><published>2008-11-20T20:57:00.001-08:00</published><updated>2008-11-20T20:57:49.602-08:00</updated><title type='text'>Axis2/C Handler Parameters</title><content type='html'>&lt;p&gt;Axis2/C allows to extend its functionality by using modules. A module is a set of handlers. A handler is the smallest execution unit along the Axis2/C execution path. When we write a handler sometimes we may want to specify parameters for configuring it. Here is a example of a module.xml file (the configuration file for a module) with handler specific parameters.&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &amp;lt;module name=&lt;span style="color: #006080"&gt;&amp;quot;discovery&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt;=&lt;span style="color: #006080"&gt;&amp;quot;discovery&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;   &amp;lt;inflow&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &amp;lt;handler name=&lt;span style="color: #006080"&gt;&amp;quot;DiscoveryInHandler&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt;=&lt;span style="color: #006080"&gt;&amp;quot;discovery&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;       &amp;lt;order phase=&lt;span style="color: #006080"&gt;&amp;quot;Discovery&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     &amp;lt;/handler&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     &amp;lt;handler name=&lt;span style="color: #006080"&gt;&amp;quot;DiscoveryDuplicateInHandler&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt;=&lt;span style="color: #006080"&gt;&amp;quot;discovery&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;       &amp;lt;order phase=&lt;span style="color: #006080"&gt;&amp;quot;Transport&amp;quot;&lt;/span&gt; phaseLast=&lt;span style="color: #006080"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;       &amp;lt;!--after=&lt;span style="color: #006080"&gt;&amp;quot;addressing_based_dispatcher&amp;quot;&lt;/span&gt;/--&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;       &amp;lt;parameter name=&lt;span style="color: #006080"&gt;&amp;quot;algo&amp;quot;&lt;/span&gt;&amp;gt;DiscoveryDuplicateAlgoCount&amp;lt;/parameter&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;       &amp;lt;parameter name=&lt;span style="color: #006080"&gt;&amp;quot;count&amp;quot;&lt;/span&gt;&amp;gt;1000&amp;lt;/parameter&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;       &amp;lt;parameter name=&lt;span style="color: #006080"&gt;&amp;quot;time&amp;quot;&lt;/span&gt;&amp;gt;10&amp;lt;/parameter&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;     &amp;lt;/handler&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;   &amp;lt;/inflow&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;   &amp;lt;operation name=&lt;span style="color: #006080"&gt;&amp;quot;Probe&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;     &amp;lt;parameter name=&lt;span style="color: #006080"&gt;&amp;quot;wsamapping&amp;quot;&lt;/span&gt;&amp;gt;http:&lt;span style="color: #008000"&gt;//schemas.xmlsoap.org/ws/2004/10/discovery/Probe&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;   &amp;lt;/operation&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;   &amp;lt;operation name=&lt;span style="color: #006080"&gt;&amp;quot;Resolve&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;     &amp;lt;parameter name=&lt;span style="color: #006080"&gt;&amp;quot;wsamapping&amp;quot;&lt;/span&gt;&amp;gt;http:&lt;span style="color: #008000"&gt;//schemas.xmlsoap.org/ws/2004/10/discovery/Resolve&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;   &amp;lt;/operation&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt; &amp;lt;/module&amp;gt;&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here you can see I have specific configurations for the DiscoveryDuplicateHandler. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If you have access to the axis2_handler_t object, you can access these parameters.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&lt;br /&gt;  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; AXIS2_CALL get_parameters(axutil_env_t *env, axis2_handler_t *handler)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     axis2_handler_desc_t *handler_desc = NULL;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     axutil_param_t *param = NULL;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     axis2_char_t *temp = NULL;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;     handler_desc = axis2_handler_get_handler_desc(handler, env);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     param = axis2_handler_desc_get_param(handler_desc, env, DISCOVERY_DUPLICATE_HANDLER_ALGO);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (param)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;         temp = (axis2_char_t *)axutil_param_get_value(param, env);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!axutil_strcmp(temp, DISCOVERY_DUPLICATE_ALGO_COUNT_STR))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;         {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;             dup-&amp;gt;algo = DISCOVERY_DUPLICATE_ALGO_COUNT;            &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!axutil_strcmp(temp, DISCOVERY_DUPLICATE_ALGO_TIME_STR))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;         {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;             dup-&amp;gt;algo = DISCOVERY_DUPLICATE_ALGO_TIME;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;         {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;             AXIS2_LOG_ERROR(env-&amp;gt;log, AXIS2_LOG_SI, &lt;span style="color: #006080"&gt;&amp;quot;Invalid value for parameter algo: %s&amp;quot;&lt;/span&gt;, temp);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; NULL;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;First you need to get the axis2_handler_desc_t from the handler. Then you can access the parameters using this structure and its associated methods.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-5171670930055743640?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/5171670930055743640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=5171670930055743640' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/5171670930055743640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/5171670930055743640'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/11/axis2c-handler-parameters.html' title='Axis2/C Handler Parameters'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-4007703680140550690</id><published>2008-11-17T22:30:00.001-08:00</published><updated>2008-11-17T22:32:59.218-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Axis2/C modules'/><title type='text'>Axis2/C modules and persistent configurations</title><content type='html'>&lt;p&gt;Some Axis2/C module specific configurations are built only once and stored in the context hierarchy of Axis2/C. If you want to do some serious configurations with Axis2/C you should always do it in the handler invocation functions. Other API functions of handlers and modules doesn't provide enough information for a reasonable configuration. This is because of the in-ability to access the axis2_conf_t from these functions. But handler invocation functions have access to this information and are ideal for module configurations except they are called request basis. Usually we build configurations at the start-up time. But since we cannot do the configurations at the start up time we have to deal with the fact that we are using the same function for configurations as well as invocation of our logic on the messages.&lt;/p&gt;  &lt;p&gt;The way to deal with this is to use a mutex. But before going in to detail we should look at why we need mutexes. Axis2/C is designed to handle a single execution in a single thread. That means if you have multiple messages coming into Axis2/C at the same time they should be processed in different threads of Axis2/C execution. &lt;/p&gt;  &lt;p&gt;Now we have decided that we should do the configuration in a message processing path. So the ideal time to build the configuration is when the first request comes to the server. If the first request comes alone then there is no problem. We can safely create the configuration and store it in the axis2/c context hierarchy. But in reality, there may not be a first single message and a bunch of messages may come at once. Since we are going to process these messages in different threads it may end up creating multiple configurations leading to memory leaks and memory corruption. &lt;/p&gt;  &lt;p&gt;Now our requirement is clear. We want to create the configuration only when the first message comes. This is where we need mutexes.&lt;/p&gt;  &lt;p&gt;First thing that we will do is try to access the property from the conf.&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; axis2_ctx_t *ctx = NULL;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; axis2_conf_ctx_t *conf_ctx = NULL;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; axutil_property_t *prop = NULL;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; ctx = axis2_conf_ctx_get_base(conf_ctx, env);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; prop = axis2_ctx_get_property(ctx, env, DISCOVERY_CONF_DUP_PROPERTY); &lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;If the property is not in the conf that means it is not created and we need to create it.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&lt;br /&gt;  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!prop)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #008000"&gt;/* make sure we only create the property once */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     axutil_thread_mutex_lock(discovery_thread_mutex);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     &lt;span style="color: #008000"&gt;/* make sure only one threa create the property. If more than one thread come to the mutex lock at the first &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #008000"&gt;    time this code will ensure, only one thread actually create the property */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;     prop = axis2_ctx_get_property(ctx, env, DISCOVERY_CONF_DUP_PROPERTY);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (prop)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;         axutil_thread_mutex_unlock(discovery_thread_mutex);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; prop;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;     prop = axutil_property_create(env);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;     &lt;span style="color: #008000"&gt;/* here populate the property with your configuration */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;     &lt;span style="color: #008000"&gt;/* ******* */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;     &lt;span style="color: #008000"&gt;/* set the property */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;     axis2_ctx_set_property(ctx, env, &lt;span style="color: #006080"&gt;&amp;quot;Your custom property name&amp;quot;&lt;/span&gt;, prop);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;     &lt;span style="color: #008000"&gt;/* unloack the mutex */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;     axutil_thread_mutex_unlock(discovery_thread_mutex);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The mutex that I have used is from axutil_thread.h file. I have used a global variable for holding the mutex.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;&lt;br /&gt;  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; axutil_thread_mutex_t *discovery_thread_mutex = NULL;&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-4007703680140550690?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/4007703680140550690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=4007703680140550690' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/4007703680140550690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/4007703680140550690'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/11/axis2c-modules-and-persistent.html' title='Axis2/C modules and persistent configurations'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-1102843705622223967</id><published>2008-10-21T02:18:00.000-07:00</published><updated>2008-10-21T02:20:21.747-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='service client'/><title type='text'>Adding Custom SOAP Headers to Web Service Request</title><content type='html'>&lt;a href="http://mpathirage.com/how-to-add-custom-soap-header-to-soap-requests-using-axis2c-service-client/" rel="bookmark" title="Permanent Link to How to Add Custom SOAP Header to SOAP Requests using Axis2/C Service Client"&gt;How to Add Custom SOAP Header to SOAP Requests using Axis2/C Service Client&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-1102843705622223967?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/1102843705622223967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=1102843705622223967' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1102843705622223967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1102843705622223967'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/10/adding-custom-soap-headers-to-web.html' title='Adding Custom SOAP Headers to Web Service Request'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-534342734542878111</id><published>2008-10-19T21:42:00.000-07:00</published><updated>2008-10-19T21:43:24.040-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='TCP mon tool'/><title type='text'>TCPmon C tool</title><content type='html'>&lt;a href="http://ws.apache.org/axis2/c/"&gt;Axis2/C&lt;/a&gt; has a &lt;a href="http://ws.apache.org/axis2/c/docs/axis2c_manual.html#tcpmon"&gt;command line TCPmon tool&lt;/a&gt;, which can use to caputure the message which travels on the wire. It has features such as pretty printing, MTOM handling etc.. The usage is as follows. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[rajika@localhost tools]$ ./tcpmon -h&lt;br /&gt;Usage : ./tcpmon [-lp LISTEN_PORT] [-tp TARGET_PORT] [-th TARGET_HOST] [-f LOG_FILE] [options]&lt;br /&gt; Options :&lt;br /&gt; -lp LISTEN_PORT  port number to listen on, default is 9099&lt;br /&gt; -tp TARGET_PORT  port number to connect and re-direct messages, default is 9090&lt;br /&gt; -th TARGET_HOST  target host to connect, default is localhost&lt;br /&gt; -f  LOG_FILE     file to write the messages to, default is tcpmon_traffic.log&lt;br /&gt; --format         enable xml formatting&lt;br /&gt; --test           enable testing last request/response by logging it separately&lt;br /&gt; Help :&lt;br /&gt; -h               display this help screen.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-534342734542878111?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/534342734542878111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=534342734542878111' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/534342734542878111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/534342734542878111'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/10/tcpmon-c-tool.html' title='TCPmon C tool'/><author><name>rajika</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-2960089759198357600</id><published>2008-09-10T00:40:00.001-07:00</published><updated>2008-09-10T00:41:41.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Spider monkey'/><title type='text'>Javascript binding for Axis2/C server side</title><content type='html'>There is a small message receiver for Axis2/C which plugged the Spider monkey(The javascript C engine) to Axis2/C server side. Now Axis2/C services can be written in Javascript. The services should be written using E4X API[1]. A service has the XML string in/out model. The result is available here[2]. A direct patch also available [3]. Please note that some work are still there.&lt;br /&gt;Follow the following steps to get this work on Linux. This only tested on linux platform.&lt;br /&gt;1. Compile and installed the Spider monkey- Javascript C engine. &lt;br /&gt;Refer here: &lt;a href="http://developer.mozilla.org/en/SpiderMonkey_Build_Documentation"&gt;http://developer.mozilla.org/en/SpiderMonkey_Build_Documentation&lt;/a&gt;&lt;br /&gt;2. Place the js_xml_in_out_msg_recv.c, axis2_js_common.h and Makefile.am to /src/core/receivers/&lt;br /&gt;3. Compile and install Axis2/c.&lt;br /&gt;4. Compile the sample client in sample/cleint. You can use the build.sh file for this.&lt;br /&gt;5. Create a folder called js under deploy/services directory and place the services.xml and the test.js file &lt;br /&gt;inside that.&lt;br /&gt;6. Add the following entry to the services.xml &lt;br /&gt; &lt;parameter name="Script" locked="xsd:false"&gt;put the path of test.js here &lt;/parameter&gt; &lt;br /&gt;Remember to put the script path to the value of Script parameter.&lt;br /&gt;7. Invoke the sample client in step 4&lt;br /&gt;If you run into shared libraray problems try exporting LD_LIBRARY_PATH to libjs.so location &lt;br /&gt;&lt;br /&gt;[1] - &lt;a href="http://en.wikipedia.org/wiki/E4X"&gt;http://en.wikipedia.org/wiki/E4X&lt;/a&gt;&lt;br /&gt;[2] - &lt;a href="http://rajikacc.googlepages.com/js-binding.tar.gz"&gt;http://rajikacc.googlepages.com/js-binding.tar.gz&lt;/a&gt;&lt;br /&gt;[3] - &lt;a href="http://rajikacc.googlepages.com/axis2c_js_binding.patch"&gt;http://rajikacc.googlepages.com/axis2c_js_binding.patch&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-2960089759198357600?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/2960089759198357600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=2960089759198357600' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2960089759198357600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2960089759198357600'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/09/javascript-binding-for-axis2c-server.html' title='Javascript binding for Axis2/C server side'/><author><name>rajika</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-8475310272466529831</id><published>2008-09-08T02:07:00.001-07:00</published><updated>2008-09-08T02:07:53.734-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='WS-Transfer'/><title type='text'>WS-Transfer for creating and exchanging state information of resources</title><content type='html'>WS-Transfer for creating and exchanging state information of resources&lt;br /&gt;The Web service Transfer (WS-Transfer) is a specification to capture the current or intend state of a resource(resource can be defined as anything like, this web page, a SOAP message, a header of a SOAP message)  and transfer that representation among components in a heterogeneous network.  It is an abstraction of the architectural elements in a distributed system.  WS-Transfer defined an implementation  and maintenance of resources from its state. Specification defines the key elements of the system as follows. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Resources&lt;/span&gt;&lt;br /&gt;The resource can be anything that can be named. eg:a web page, an article, a SOAP message, a weather report etc... So this resource has a particular representation which is given by resource representation. It can be either a static information (such as a web page, an article ) or a dynamic information (such as weather data, stock market data)&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Resource Identifier&lt;/span&gt;&lt;br /&gt;This is the logical representation of the resource. This enables to identify the resource or its parts.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Resource factory &lt;/span&gt;&lt;br /&gt;Resource factory is a web service which is capable of creating a resource state.  This should be capable of creating a resource state from and XML representation and returns its identifier. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Resource Operation&lt;/span&gt;&lt;br /&gt;A web service which is capable of manipulating the state of a resource. &lt;br /&gt;&lt;br /&gt;Resource factory and Resource operations together defined the followings operation on the resource.&lt;br /&gt;There are four operations defined in WS-Transfer specification.&lt;br /&gt;1.Create - The operation creates a state of a resource and returns the end point reference (EPR) of that resource in the response.&lt;br /&gt;2.Get – This  operation brings the XML representation of the resource.&lt;br /&gt;3.Put – This operation update the representation of the resource with a new representation. &lt;br /&gt;4.Delete – This operation delete the state representation of the resource. &lt;br /&gt;&lt;br /&gt;Following diagram shows WS-Transfer in action. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_FnytAFta6Zc/SMTqYoH_ygI/AAAAAAAAADA/cvjUtAmIxoo/s1600-h/ws-transfer.jpeg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_FnytAFta6Zc/SMTqYoH_ygI/AAAAAAAAADA/cvjUtAmIxoo/s400/ws-transfer.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5243573574974818818" /&gt;&lt;/a&gt;&lt;br /&gt;1.A client application request for the representation of a resource using Create request supplying the EPR of the resource.&lt;br /&gt;2.The Resource factory of the WS-Transfer enabled service will response with the CreateResponse reply together with the resource representation.&lt;br /&gt;3.Once the resource representation is in hand the client application can do further processing and issue any other operation on the resource state using Get/Put/Delete operations.&lt;br /&gt;4.The representation  of the new state will be returned back to the client application in Ge/Put/Delete Response. &lt;br /&gt;&lt;br /&gt;Reference:&lt;br /&gt;1. &lt;a href="http://www.w3.org/Submission/WS-Transfer/"&gt;http://www.w3.org/Submission/WS-Transfer/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-8475310272466529831?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/8475310272466529831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=8475310272466529831' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8475310272466529831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8475310272466529831'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/09/ws-transfer-for-creating-and-exchanging.html' title='WS-Transfer for creating and exchanging state information of resources'/><author><name>rajika</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_FnytAFta6Zc/SMTqYoH_ygI/AAAAAAAAADA/cvjUtAmIxoo/s72-c/ws-transfer.jpeg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-6698200783734018615</id><published>2008-08-29T00:02:00.001-07:00</published><updated>2008-08-29T00:02:35.046-07:00</updated><title type='text'>Debugging Axis2/C services and clients</title><content type='html'>&lt;p&gt;Apache Axis2/C is mainly supported in Linux and Windows. You can use it as a standalone product or deploy it in Apache web server or IIS. You may want to debug the services that you've written for axis2/C under these different scenarios. This &lt;a href="http://wso2.org/library/tutorials/debugging-axis2-c-services-clients"&gt;tutorial in Oxygen Tank&lt;/a&gt; of &lt;a href="http://wso2.com"&gt;WSO2&lt;/a&gt; explains how to setup and debug Axis2/C services and clients in few easy steps.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-6698200783734018615?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/6698200783734018615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=6698200783734018615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6698200783734018615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6698200783734018615'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/08/debugging-axis2c-services-and-clients.html' title='Debugging Axis2/C services and clients'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-3179314162381498216</id><published>2008-08-25T19:08:00.000-07:00</published><updated>2008-08-25T19:10:25.930-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Terminator - Cross-platform Terminal Emulator with Window Splitting</title><content type='html'>&lt;a href="http://mpathirage.com/terminator-cross-platform-gpl-terminal-emulator-with-multiple-window-support/" rel="bookmark" title="Permanent Link to Terminator - Cross Platform GPL Terminal Emulator  with Multiple Window Support"&gt;&lt;blockquote&gt;Terminator - Cross Platform GPL Terminal Emulator  with Multiple Window Support&lt;/blockquote&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-3179314162381498216?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/3179314162381498216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=3179314162381498216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3179314162381498216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3179314162381498216'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/08/terminator-cross-platform-terminal.html' title='Terminator - Cross-platform Terminal Emulator with Window Splitting'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-5166037992351744432</id><published>2008-08-25T01:25:00.000-07:00</published><updated>2008-08-25T01:31:27.712-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><title type='text'>High performance Axis2/C – Tips and Tricks</title><content type='html'>You can deploy a web service inside Apache/httpd web server using mod_axis2 apache module. In a production environment this is the recommended way of deploying your services. &lt;br /&gt;In a production environment performance is an important factor to improve. Axis2/C shows very interesting &lt;a href="http://wso2.org/library/3868"&gt;performance figures&lt;/a&gt;. You can see that in the latest Axis2/C performance results article in &lt;a href="http://wso2.org/"&gt;WSO2, oxygen tank&lt;/a&gt;. &lt;br /&gt;Following are few tips and tricks that you can use to set up a high performing instance of Axis2/C&lt;br /&gt;&lt;br /&gt;1.If you  compile the sources of Apache/httpd and Axis2/C to get the final binary, compile without any debugging enable or without any optimizations(avoid using -g or -o options)&lt;br /&gt;2.Always set the debug level of Apache/httpd and Axis2/C to critical. The level of the logging may depend upon your production environment.&lt;br /&gt;3.In addition to these things you can do some optimizations for Apache/httpd which will result high performance of Axis2/C.&lt;br /&gt;-  Equipped your server hardware with more main memory&lt;br /&gt;- Calculate the optimal number of Maxclient which suits your available hardware.&lt;br /&gt;-  Adjust the other options to get the maximum from Apache/httpd, Refer the guide here.&lt;br /&gt;Next you can tune some kernel level parameters as well. But these requires some experimentation to identify the optimal combination for your resources. Best thing is to follow the given &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;References. &lt;br /&gt;&lt;/span&gt;http://httpd.apache.org/docs/2.0/misc/perf-tuning.html&lt;br /&gt;http://www.xs4all.nl/~thomas/apachecon/PerformanceTuning.html&lt;br /&gt;http://www.stdlib.net/~colmmacc/Apachecon-EU2005/scaling-apache-handout.pdf&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-5166037992351744432?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/5166037992351744432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=5166037992351744432' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/5166037992351744432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/5166037992351744432'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/08/high-performance-axis2c-tips-and-tricks.html' title='High performance Axis2/C – Tips and Tricks'/><author><name>rajika</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-7739224220362159235</id><published>2008-08-18T21:41:00.001-07:00</published><updated>2008-08-18T21:41:48.375-07:00</updated><title type='text'>WS-Discovery WS Gateway to the Devices</title><content type='html'>&lt;p&gt;WS-Discovery allows a client to discover service end points by sending multi cast messages (UDP transport). For example, clients search for services by asking things like &amp;#8220;is there a printer in this network&amp;#8221;. In technical words clients search by type and scope of the services. If a matching service is in the network it will respond with its network address and client can use the provided information to communicate with the service. &lt;/p&gt;  &lt;p&gt;At the very high level a WS-Discovery implementation facilitates the following:&amp;#160; &lt;br /&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Services can be made discoverable Services should be able to specify the criteria under which they are discovered. This include it's type and scopes under which it can be used.&amp;#160; &lt;/li&gt;    &lt;li&gt;Clients should be able to discover services. Clients send multicast messages to the network to discover the services. Clients specify the criteria that they are looking for in a service. Services that match the criteria will respond and client can use the provided information to communicate with the service. &lt;/li&gt;    &lt;li&gt;To be able to write &amp;quot;Discovery Proxies&amp;quot; to minimize the network overhead Discovery proxy is an optional component in the architecture. Discovery proxies keep track of services in the network. If a client detects a discovery proxy, then it doesn't send unicast messages, instead it send unicast messages to the discovery proxy and discovery proxy is responsible for finding the services (usually this information is cached in the discovery proxy). &lt;/li&gt; &lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-7739224220362159235?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/7739224220362159235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=7739224220362159235' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/7739224220362159235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/7739224220362159235'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/08/ws-discovery-ws-gateway-to-devices.html' title='WS-Discovery WS Gateway to the Devices'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-3443845505982066215</id><published>2008-08-13T22:00:00.000-07:00</published><updated>2008-08-13T22:08:41.940-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='gdb'/><title type='text'>Debugging Axis2/C services – Linux</title><content type='html'>On some phase  of your  development , you may need to debug your web service clients  or the simple axis2 server or when you deploy your services inside Apache httpd server. This guide shade some light on doing that with the help of gdb on linux platform.&lt;br /&gt;For debugging purposes with gdb you should compile your source with -g option. So make sure that you compile Axis2/C and your client with that options. And also note to avoid optimization, do not use any -o options in the compilation process.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1.Debugging a client.&lt;/span&gt;&lt;br /&gt;This is a very straight forward work. The client is a standalone C program, in which it depends on few other libraries(ex: axiom). So start the program in gdb and set up few break points and start the debugging process. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2.Debugging simple axis2 server/simple tcp server.&lt;/span&gt;&lt;br /&gt;In case where you need to debug simple axis2 server (or the tcp server) you can start the simple_axis2_server binary inside debugger and follow the debugging process.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;$gdb axis2_http_server&lt;/span&gt;&lt;br /&gt;Now set few debug points inside your service. Next from another terminal send a request to your service. You will see how the debugger hits the breakpoints that you placed. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3.Debugging services inside in Apache/httpd.&lt;/span&gt;&lt;br /&gt;Axis2/C services can be hosted inside Apache httpd using mod_axis2 module. To debug a service hosted inside mod_axis2 follow this procedure. &lt;br /&gt;&lt;span style="font-style:italic;"&gt;$gdb httpd&lt;/span&gt;&lt;br /&gt;Set up few breakpoints within your service.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(gdb) run -X -d /usr/local/apache (path of your Apache installation)&lt;/span&gt;&lt;br /&gt;Then from another terminal send a request to your service. At this point you'll see the debugger hits your breakpoints.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-3443845505982066215?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/3443845505982066215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=3443845505982066215' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3443845505982066215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3443845505982066215'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/08/debugging-axis2c-services-linux.html' title='Debugging Axis2/C services – Linux'/><author><name>rajika</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-9140184530298382021</id><published>2008-08-06T21:18:00.000-07:00</published><updated>2008-08-06T21:32:58.792-07:00</updated><title type='text'>Debugging Axis2/C Services - Windows</title><content type='html'>Axis2/C web services are dll files that exports two functions and create a instance of axis2_svc_skeleton_t structure. Services are deployed in the {AXIS2C_BIN_HOME}\services directory. A service has a dll file and a configuration file called services.xml. Services should be hosted within a folder of same name as the service. &lt;br /&gt;&lt;br /&gt;Deploy your service in to Axis2/C. Also make sure that the service is built with debug enabled. Axis2/C doesn’t have to be built with debug enabled but it is easy if it is built with debug enabled. Now I'll explai how to debug services in different deployment scenarios.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Simple http server&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The simple http server is part of Axis2/C and as the name suggests is a simple http server capable of hosting Axis2/C web services only.&lt;br /&gt;&lt;br /&gt;Start the simple axis2 server. If you start the simple http server from the VC solution you can straightaway start debugging the services. All you have to do is put some break points in to the service files within the Axis2/C solution. If you didn’t start the simple axis2 server from the Axis2/C VC solution you need to have a VC project for the service that you have written. In the service’s VC project go to debug menu and choose attach to process. In “attach to process” dialog box choose the simple_http_serve.exe.&lt;br /&gt;&lt;br /&gt;Put some break points in the service’s files and send a request to the service. If the service is loaded correctly by the Axis2/C, you must be able debug the service.&lt;br /&gt;The above process is similar in tcp server as well.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Apache Server&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Follow the instructions in the &lt;a href="http://ws.apache.org/axis2/c/docs/axis2c_manual.html"&gt;Axis2/C manual&lt;/a&gt; to install Axis2/C with the Apache server. Start Apache server by giving the –X option. This will force Apache not to create threads in Windows and it will ease the debugging process. &lt;br /&gt;$ httpd.exe –X&lt;br /&gt;Then again go to the Axis2/C VC solution or the service VC solution and from the debug menu choose attach to process. Choose the httpd.exe from attach to process dialog box. Put some break points in the service and send a request to the service. If everything goes well the break points should be hit.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;IIS &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;With IIS server the process is almost same as with the Apache server. Deploy Axis2/C in the IIS following the guidelines in the &lt;a href="http://ws.apache.org/axis2/c/docs/axis2c_manual.html"&gt;Axis2/C manual&lt;/a&gt;. Then start IIS server. &lt;br /&gt;From the VC solution (Service or Axis2/C) go to debug menu and choose attach to process. &lt;br /&gt;If you are using IIS 5.1 choose the process inetinfo.exe. If you are using IIS 6 or 7 first you need to send a request to the IIS server before debugging can begin. Then choose the process W3wp.exe. &lt;br /&gt;Put some break points in the service and send a request to the service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-9140184530298382021?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/9140184530298382021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=9140184530298382021' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/9140184530298382021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/9140184530298382021'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/08/debugging-axis2c-services-windows.html' title='Debugging Axis2/C Services - Windows'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-3039926020161716676</id><published>2008-07-30T01:37:00.000-07:00</published><updated>2008-07-30T01:39:24.452-07:00</updated><title type='text'>Axis2/C Performance</title><content type='html'>Axis2/C benchmark performance test results are published &lt;a href="http://wso2.org/library/3868"&gt;here&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-3039926020161716676?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/3039926020161716676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=3039926020161716676' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3039926020161716676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3039926020161716676'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/07/axis2c-performance.html' title='Axis2/C Performance'/><author><name>Damitha Kumarage</name><uri>http://www.blogger.com/profile/11918339690996039146</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-6021599319535480449</id><published>2008-07-22T00:05:00.000-07:00</published><updated>2008-07-22T00:22:24.600-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='rampartc'/><title type='text'>Eucalyptus Use Axis2/C and Rampart/C</title><content type='html'>Today I heard about &lt;a href="http://eucalyptus.cs.ucsb.edu/"&gt;Eucalyptus&lt;/a&gt;(open-source software infrastructure for implementing cloud computing) from &lt;a href="http://www.infoq.com/news/2008/07/eucalyptus"&gt;InfoQ news&lt;/a&gt;. It's nice to see that they use Axis2/C and Rampart/C inside it. Here is a screen shot of download page of Eucalyptus, which shows Axis2/C and Rampart/C in the list.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_KZswksojATA/SIWIzP9LL5I/AAAAAAAAAPs/CcU9d7CQSdE/s1600-h/Screenshot.png"&gt;&lt;img style="margin: 0px 50px 10px 50px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_KZswksojATA/SIWIzP9LL5I/AAAAAAAAAPs/CcU9d7CQSdE/s400/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5225733356671152018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a developer of Axis2/C and Rampart/C I am verry happy about this, because someone is using what we wrote. As open source developers all we want is to see others using what we have written.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-6021599319535480449?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/6021599319535480449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=6021599319535480449' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6021599319535480449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6021599319535480449'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/07/eucalyptus-use-axis2c-and-rampartc.html' title='Eucalyptus Use Axis2/C and Rampart/C'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_KZswksojATA/SIWIzP9LL5I/AAAAAAAAAPs/CcU9d7CQSdE/s72-c/Screenshot.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-3856754021195456801</id><published>2008-07-21T03:59:00.000-07:00</published><updated>2008-07-21T21:55:47.203-07:00</updated><title type='text'>Deploying Axis2/C in Apache - Common Erros</title><content type='html'>One of the main deployment scenarios of &lt;a href="http://ws.apache.org/axis2/c/"&gt;Axis2/C&lt;/a&gt; is with &lt;a href="http://httpd.apache.org/"&gt;Apache Web Server&lt;/a&gt;. Axis2/C becomes one of the best enterprise grade web web service engines when deployed in Apache and IIS. It is faster, more reliable can scale to large requests etc. When deployed in Apache server Axis2/C uses the memory pools supplied by Apache and guarantees zero memory leaks. Also due to the custom memory implementation Axis2/C can perform up to its maximum.&lt;br /&gt;&lt;br /&gt;You can find the installation guidelines for Axis2/C in the &lt;a href="http://ws.apache.org/axis2/c/docs/axis2c_manual.html"&gt;manual page&lt;/a&gt;. Here I'm not going to discuss those details. Instead I will focus on the things that can go wrong when trying to deploy in Apache Server.&lt;br /&gt;&lt;br /&gt;Axis2/C is loaded by Apache when it starts. So we use the LoadModule directive of Apache to specify the Axis2/C module which connects Apache and Axis2/C. You don't have to copy the Axis2/C module to the Apache modules directory always, but it is a good practice. You can keep it in anywhere you like and give the complete path to the LoadModule directive. &lt;br /&gt;&lt;br /&gt;The Axis2/C Apache module depends on the Axis2/C libraries. Some of these dependencies are axis2_engine, axutil, neethi etc. So make sure that these libraries are in the library path in Linux and Path in windows. If these libraries are not in the path the module will complain that it cannot find these libraries and it will fail.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Normally Apache server is started as an unprivileged user in most of the operating systems. So make sure that it has read access to the place where Axis2/C libraries are kept and write access to the Axis2/C log file.&lt;br /&gt;&lt;br /&gt;Axis2/C can fail due to invalid service and module configurations. Some of these are&lt;br /&gt;&lt;br /&gt;  1. A module is built with a earlier version of Axis2/C binary&lt;br /&gt;  2. Errors in module.xml file or module xml file doesn’t exists&lt;br /&gt;  3. A service is built with a previous version of Axis2/C&lt;br /&gt;  4. service links to a library which is not in the library path&lt;br /&gt;  5. Services xml is missing&lt;br /&gt;  6. Empty services folders&lt;br /&gt;&lt;br /&gt;Here I’m not going to talk about the specific errors that are reported in the Axis2/C log file under these circumstances. But most of the time by looking at the log file you can figure out where the problem occurs. &lt;br /&gt;&lt;br /&gt;Another thing with Apache is, if you don’t configure the log file correctly it will write the Axis2/C log file in to its error log.&lt;br /&gt;&lt;br /&gt;Here I have described the most common mistakes that you can make when deploying Axis2/C in Apache web server. There may be others and you are welcome to share your experiance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-3856754021195456801?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/3856754021195456801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=3856754021195456801' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3856754021195456801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3856754021195456801'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/07/deploying-axis2c-in-apache-common-erros.html' title='Deploying Axis2/C in Apache - Common Erros'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-8648351144513107603</id><published>2008-07-21T02:08:00.001-07:00</published><updated>2008-07-21T02:09:28.408-07:00</updated><title type='text'>Apache Axis2/C 1.5.0 Released</title><content type='html'>Key Features&lt;br /&gt;&lt;br /&gt;   1. Support for one-way messaging (In-Only) and request response messaging (In-Out)&lt;br /&gt;   2. Client APIs: Easy to use service client API and more advanced operation client API&lt;br /&gt;   3. Transports supported: HTTP&lt;br /&gt;          * Inbuilt HTTP server called simple axis server&lt;br /&gt;          * Apache2 httpd module called mod_axis2 for server side&lt;br /&gt;          * IIS module for server side. Supports IIS 5.1, 6 and 7&lt;br /&gt;          * Client transport with ability to enable SSL support&lt;br /&gt;          * Basic HTTP Authentication&lt;br /&gt;          * AMQP Transport based on Apache Qpid (Experimental)&lt;br /&gt;          * libcurl based client transport&lt;br /&gt;   4. Module architecture, mechanism to extend the SOAP processing model&lt;br /&gt;   5. WS-Addressing support, both the submission (2004/08) and final (2005/08) versions, implemented as a module&lt;br /&gt;   6. MTOM/XOP support&lt;br /&gt;   7. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages; This has complete XML infoset support&lt;br /&gt;   8. XML parser abstraction&lt;br /&gt;          * Libxml2 wrapper&lt;br /&gt;          * Guththila pull parser support&lt;br /&gt;   9. Both directory based and archive based deployment models for deploying services and modules&lt;br /&gt;  10. Description hierarchy providing access to static data of Axis2/C runtime (configuration, service groups, services, operations and messages)&lt;br /&gt;  11. Context hierarchy providing access to dynamic Axis2/C runtime information(corresponding contexts to map to each level of description hierarchy)&lt;br /&gt;  12. Message receiver abstraction&lt;br /&gt;          * Inbuilt raw XML message receiver&lt;br /&gt;  13. Code generation tool for stub and skeleton generation for a given WSDL (based on Java tool)&lt;br /&gt;          * Axis Data Binding (ADB) support &lt;br /&gt;  14. Transport proxy support&lt;br /&gt;  15. REST support (more POX like) using both HTTP POST and GET&lt;br /&gt;  16. Comprehensive documentation&lt;br /&gt;          * Axis2/C Manual &lt;br /&gt;  17. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension&lt;br /&gt;  18. TCP Transport, for both client and server side &lt;br /&gt;&lt;br /&gt;Changes Since Last Release&lt;br /&gt;&lt;br /&gt;   1. AMQP Transport support with Apache Qpid. (At an experimental stage and not working under Windows)&lt;br /&gt;   2. Modifications to IIS Module to support IIS 6 &amp; 7.&lt;br /&gt;   3. Added a JScript file to automate IIS module registry configuration&lt;br /&gt;   4. Specifying the MEP in the services.xml for non in-out messages made mandatory&lt;br /&gt;   5. Improved the in-only message handling&lt;br /&gt;   6. Improvements to Guthtila for better performance&lt;br /&gt;   7. Improvements to TCPMon tool&lt;br /&gt;   8. Memory leak fixes&lt;br /&gt;   9. Many bug fixes&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-8648351144513107603?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/8648351144513107603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=8648351144513107603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8648351144513107603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8648351144513107603'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/07/apache-axis2c-150-released.html' title='Apache Axis2/C 1.5.0 Released'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-62603224599043646</id><published>2008-07-14T22:07:00.000-07:00</published><updated>2008-07-14T22:22:21.843-07:00</updated><title type='text'>Axis2/C Deployed in IIS Family - My First Article</title><content type='html'>The first &lt;a href="http://wso2.org/library/3799"&gt;article &lt;/a&gt;I have written is now published! The article is about how Axis2/C is connected with IIS. If you are interested in learning technologies like ISAPI and how these can be used in a real production environment you can read here. http://wso2.org/library/3799&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-62603224599043646?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/62603224599043646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=62603224599043646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/62603224599043646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/62603224599043646'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/07/axis2c-deployed-in-iis-family-my-first.html' title='Axis2/C Deployed in IIS Family - My First Article'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-3281842928662421812</id><published>2008-06-20T01:45:00.001-07:00</published><updated>2008-06-20T01:46:04.173-07:00</updated><title type='text'>Top ten reasons for using Axis2/C over other Web Services Engines</title><content type='html'>1. Axis2/C is written in C. So it is fast. Also it uses the pull model of XML parsing (StaX) which gives good performance in client server applications.&lt;br /&gt;2. Support for different platforms. Linux, Windows, MacOS.&lt;br /&gt;3. Tight integration with Apache2 Web Server and it supports Microsoft IIS 5, 6 &amp; 7. &lt;br /&gt;4. Complete support for WS-* specifications. &lt;br /&gt;   WS-Addressing&lt;br /&gt;   WS-ReliableMessaging&lt;br /&gt;   WS-Security&lt;br /&gt;   WS-Eventing&lt;br /&gt;   WS-Policy&lt;br /&gt;5. Highly Customizable. Anyone can write their own modules to extends the functionality  of Axis2/C&lt;br /&gt;6. Support for different transports (http, amqp, tcp)&lt;br /&gt;7. The exccellent support given by the Apache Axis2/C developer community allows you to solve all the user problems in a very short time.&lt;br /&gt;8. It is open source and goes under Apache license so you can do virtually anything with it.&lt;br /&gt;9. This is the underlying Web Service Engine behind &lt;a href="http://wso2.org/projects/wsf/php"&gt;WSF/PHP&lt;/a&gt; &lt;a href="http://wso2.org/projects/wsf/ruby"&gt;WSF/Ruby&lt;/a&gt; &lt;a href="http://wso2.org/projects/wsf/perl"&gt;WSF/Perl&lt;/a&gt; which enables web services to be written and consumed in the PHP, Ruby and Perl.&lt;br /&gt;10. Last but not least: I'm a developer in Axis2/C! So try it out!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-3281842928662421812?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/3281842928662421812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=3281842928662421812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3281842928662421812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3281842928662421812'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/06/top-ten-reasons-for-using-axis2c-over.html' title='Top ten reasons for using Axis2/C over other Web Services Engines'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-3323280820831566993</id><published>2008-06-19T22:06:00.000-07:00</published><updated>2008-06-20T00:07:39.210-07:00</updated><title type='text'>Interesting performance results</title><content type='html'>Recently we have done performance tests on Axis2/C with Apache Web Server. Axis2/C can be considered as a dynamic content generator when it is behind a web server. The interesting thing is about the performance results. We used Apache "ab" for generating the requests and Benchmark Service as the service.&lt;br /&gt;&lt;br /&gt;For small request/responses Axis2/C was running around 12000 req/s and for large request/responses Axis2/C was running around 4000 req/sec. &lt;br /&gt;&lt;br /&gt;We have done a very interesting thing as well. We put the SOAP message as static XML file into the server and we tested the performance of the Apache server with static content. The results were &lt;span style="font-weight:bold;"&gt;surprising!!&lt;/span&gt;. Apache handled around 16000 req/sec for small files and 9000 req/sec for the large files. Here the request was a GET request(server has to process one line). In the case of Axis2/C the request and response are same size and request was a POST request. So effectively the work that needs to be done by the Apache is doubled in our case. But as you can see the &lt;span style="font-weight:bold;"&gt;performance differences are not that high&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;There should be another reason behind this performance results. May be we are missing something. There are so many variables in this equation we might not find a answer soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-3323280820831566993?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/3323280820831566993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=3323280820831566993' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3323280820831566993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3323280820831566993'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/06/interesting-performance-results.html' title='Interesting performance results'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-3268533601721206446</id><published>2008-06-16T03:43:00.000-07:00</published><updated>2008-06-17T05:09:05.873-07:00</updated><title type='text'>Developers quick start guide for Axis2/C - Windows</title><content type='html'>There are lots of developers who are using Axis2/C for creating and consuming web services in their software projects. There are various user requests for creating a quick start guide for Axis2/C. Here I will explain how to start things in the Windows operating systems.&lt;br /&gt;&lt;br /&gt;Here I assume you are using Microsoft Visual Studio 2005 as it is the only supported development environment for Windows in Axis2/C.&lt;br /&gt;&lt;br /&gt;The VC project for Axis2/C can be found in the ides/vc/axis2c/deploy directory. Solution name is axis2c.sln. Double click the axis2c.sln or open it from the Visual Studio file menu.&lt;br /&gt;&lt;br /&gt;I will explain each of the projects in the build order. All these separate projects will be ultimately compiled into a dll or an exe.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;axutil&lt;/span&gt;&lt;br /&gt;This project contains the basic utility functions required by axis2/c. For example it contains functions like logging, error handling, string operations, lists, hash maps, qnames, date time formats etc. This library is linked to every other library and every web service and client written for axis2/C.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Guththila&lt;/span&gt;&lt;br /&gt;Guththila is the XML parser for Axis2/C. Axis2/C can be built to use the third party XML parser libxml2 as well. Guththila is linked to the axutil and used by axis2_parser only. Users are not required and not encouraged to use this library directly. Instead they should use the Axiom/C library for processing XML.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;axis2_parser&lt;/span&gt;&lt;br /&gt;Axis2/C provides a parser abstraction layer. This is that parser abstraction layer. This library links to either guththila or libxml2 depending on what the user wants.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;axiom&lt;/span&gt;&lt;br /&gt;This is the XML model layer provided by Axis2/C for manipulating XML. Axiom/C is build according to the pull model of XML parsing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Neethi&lt;/span&gt;&lt;br /&gt;This is the Web Services policy implementation for Axis2/C. This has the Web Service Security policy implementation as well. Moving the security policy stuff in to the Rampart/C space is a todo in Axis2/C.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;axis2_engine&lt;/span&gt;&lt;br /&gt;This project encapsulates the main functionalities of Axis2/C. So this is the core of Axis2/C. Every service and client should linke to this library.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;axis2_http_sender and axis2_http_receiver&lt;/span&gt;&lt;br /&gt;This two are the http senders and http receivers of the Axis2/C engine. They are linked to axis2_engine. Axis2/C supports plugging of various transport senders and receivers. Best example is tcp senders and receivers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;axis2_mod_addr&lt;/span&gt;&lt;br /&gt;This module implements the WS-Addressing specification. This is a module for Axis2/C and it connects to the Axis2/C via the handlers interface.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;mod_axis2&lt;/span&gt;&lt;br /&gt;This is the Axis2 module for Apache web server. This module is used to connect Axis2/C and Apache web server. When Axis2/C is deployed in Apache server, Axis2/C services are served via the Apache server. Client side of Axis2/C has nothing to do with this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;mod_axis2_iis&lt;/span&gt;&lt;br /&gt;Same as mod_axis2, instead of the Apache Web Server this module connects Axis2/C and Microsoft Internet Information Server (IIS).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;axis2_simple_http_server&lt;/span&gt;&lt;br /&gt;This is the simple http implemented by Axis2/C for for http transport. User can use this server instead of IIS or Apache for deploying their services. But its main purpose is to serve as a development tool. If you want to debug your services this is the easiest way. You cab do this by setting this project as the startup project and run the debugger. Also note that the workign directory of this project must be set to ides\vc\axis2c\deploy\bin&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;axis2_tcp_server, axis2_tcp_sender and axis2_tcp_receiver&lt;/span&gt; &lt;br /&gt;These are equivalents of axis2_http_sender, axis2_http_receiver and axis2_http_server for TCP transport.&lt;br /&gt;&lt;br /&gt;tcpmon&lt;br /&gt;This is a tool which can show tcp messages. This can be used as a debugging tool to see the actual messages that are going in the wire.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;services folder&lt;/span&gt;&lt;br /&gt;This folder contains the sample service projects that ship with Axis2/C.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;clients folder&lt;/span&gt;&lt;br /&gt;This folder contains the sample clients that ship with Axis2/C.&lt;br /&gt;&lt;br /&gt;When the Axis2/C solution is built Axis2/C is built in to the ides\vc\axis2c\deploy directory. Also make sure that AXIS2C_HOME and PATH variables are set to {AXIS2C_SOURCE_DIST}\ides\vc\axis2c\deploy and {AXIS2C_SOURCE_DIST}\ides\vc\axis2c\deploy\lib directories. Set the axis2_http_server as the startup project and set the working directory of this project to {AXIS2C_SOURCE_DIST}\ides\vc\axis2c\deploy\bin. Then start the debugger. &lt;br /&gt;&lt;br /&gt;By default the axis2_http_server runs on port 9090. You can change this by specifying the command line argument -p PORT. You can also set the log level by using the command line option -l{LOG LEVEL}. By default the log is set to debug and you can change it to critical by specifying -l0.&lt;br /&gt;&lt;br /&gt;Axis2/C VC project doesn't copy the include files in to the deploy directory. So you have to manually copy them to the deploy directory in case this is used as a development distribution for other projects.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Debugging with IIS server&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First you need to setup the IIS server for loading Axis2/C as described in the &lt;a href="http://ws.apache.org/axis2/c/docs/axis2c_manual.html#IIS"&gt;Axis2/C manual&lt;/a&gt;. Make sure that mod_axis2_IIS is the startup project. Then go to debug-&gt;attach to process and in the dialog box select the IIS process. For IIS 5.1 this is inetinfo.exe and for IIS 6 and IIS 7 this is w3wp.exe. If Axis2/C is properly loaded by IIS this will allow you to debug Axis2/C under IIS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Debugging with Apache Server&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The instructions are same as IIS server. You need to make the mod_axis2 as the startup project. When doing the attach to process, Apache process name is httpd.exe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-3268533601721206446?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/3268533601721206446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=3268533601721206446' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3268533601721206446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3268533601721206446'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/06/developers-quick-start-guide-for-axis2c.html' title='Developers quick start guide for Axis2/C - Windows'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-7505447509086842001</id><published>2008-06-12T04:19:00.000-07:00</published><updated>2008-06-12T04:35:36.952-07:00</updated><title type='text'>IIS 6 &amp; 7 Support for Axis2/C</title><content type='html'>Now Axis2/C Supports IIS 6 and 7 at a more deeper level than it was before. Previously Axis2/C and IIS was connected by a ISAPI Filter + ISAPI Extension. Now Axis2/C integrates with IIS only through a ISAPI Extension. The extension is a Wild Card Map and it intercepts all the incoming requests. &lt;br /&gt;&lt;br /&gt;Instructions to connect Axis2/C and IIS.&lt;br /&gt;&lt;br /&gt;All the instructions that are in the Axis2/C manual up to the register variable are same. These are the new steps to connect Axis2/C and IIS. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;IIS 6 &amp; 7&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Using the IIS management console, add the mod_axis2_IIS.dll as a Wildcard Script Map.&lt;br /&gt;    Executable should be the complete path to the mod_axis2_IIS.dll&lt;br /&gt;    You can put any name as the name of the Wildcard Script Map&lt;br /&gt;&lt;br /&gt;Please don't add the mod_axis2_IIS.dll as a filter to IIS as in the IIS 5.1 case.&lt;br /&gt;&lt;br /&gt;Note: If the Axis2/C failed to load, verify that Axis2/C and its dependent DLLs are in the System Path (not the user path).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-7505447509086842001?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/7505447509086842001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=7505447509086842001' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/7505447509086842001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/7505447509086842001'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/06/iis-6-7-support-for-axis2c.html' title='IIS 6 &amp; 7 Support for Axis2/C'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-1709025026151972995</id><published>2008-04-25T05:34:00.000-07:00</published><updated>2008-04-25T05:38:57.700-07:00</updated><title type='text'>Federated Sign-Out</title><content type='html'>In the context of Federated Identity ecosystem, when a participant entity (requester or ‘principal’) decides to terminate the Single Sign On (SSO), there should be a mechanism to flush all the cached data and completely terminate the session.&lt;br /&gt;&lt;br /&gt;Federated sign-out mechanisms designed to indicate to federation participants that a particular federation is being terminated and they may want to clean up any cached state or security tokens for a principal that are no longer required because the principal's session is being terminated. And the federated sign-out applies to all tokens and all target sites for the principal within the federation.&lt;br /&gt;&lt;br /&gt;The implementation of federated sign-out should based on the concept of parallel distribution of the sign-out message. As shown in following figure, the initiator of sign out message is the requester (most of the common scenarios). Therefore, when the principal decides to sign-out, it sends the messages to its STS, indicating that the requester is initiating a termination of the SSO. The Principal’s STS is responsible for federating the sign-out message that is received from the requester.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_yO8q3CIhuZs/SBHQnsQn-XI/AAAAAAAAACQ/U16V0xfTpo8/s1600-h/sso.png"&gt;&lt;br /&gt;&lt;img src="http://1.bp.blogspot.com/_yO8q3CIhuZs/SBHQnsQn-XI/AAAAAAAAACQ/U16V0xfTpo8/s320/sso.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5193161225649256818" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;The mechanism that is used to facilitate the federating process of the sign-out message is defined under WS-Eventing. The other participants of the federated realms (i.e. other than requester and its STS) want to receive Single Sign-Out messages when requester decides to sign-out from SSO (i.e. events occur). A mechanism for registering interest of receiving Sign-Out Messages is needed because the set of Web services interested in receiving such messages is often unknown in advance. WS-Eventing defines a protocol for other entities (subscribers: Other than Principal and its STS) to register interest of receiving a Sigh-Out Message (subscription) with Principal’s STS (Single Sign-Out Notification end-point which can be acquired at the initial configuration process that is related to Federation Metadata) in receiving sign-out messages about federated sign out of the requesters (notifications/event messages).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-1709025026151972995?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/1709025026151972995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=1709025026151972995' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1709025026151972995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1709025026151972995'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/04/federated-sign-out.html' title='Federated Sign-Out'/><author><name>Kasun Indrasiri</name><uri>http://www.blogger.com/profile/01843642831558293309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/_yO8q3CIhuZs/S28Ge3vQ1-I/AAAAAAAAAW0/X1RbVfPEpMc/S220/kasun3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_yO8q3CIhuZs/SBHQnsQn-XI/AAAAAAAAACQ/U16V0xfTpo8/s72-c/sso.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-754780381914662304</id><published>2008-04-04T04:31:00.000-07:00</published><updated>2008-04-04T04:47:36.547-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><title type='text'>Top Axis2/C Articles</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://wso2.org/library/252"&gt;&lt;span style="font-weight: bold;"&gt;Introducing Apache Axis2/C&lt;/span&gt;&lt;/a&gt; - In this article, Apache Axis2/C project lead Samisa Abeysinghe gives some inside details about features of Axis2/C and architecture of Axos2/C.&lt;/li&gt;&lt;li&gt;&lt;a href="http://wso2.org/library/777"&gt;&lt;span style="font-weight: bold;"&gt;Flows, Phases, Handlers, and Modules&lt;/span&gt;&lt;/a&gt; - Apache Axis2/C project lead Samisa Abeysinghe describes heart of the Axis2/C Architecture.&lt;/li&gt;&lt;li&gt;&lt;a href="http://wso2.org/library/2406"&gt;&lt;span style="font-weight: bold;"&gt;Apache Axis2/C, Web Services engine&lt;/span&gt;&lt;/a&gt; - This article by Samisa Abeysinghe explains how Apache Axis2/C stands out as the most complete Web services engine implementation in C.&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://wso2.org/library/271"&gt;Enabling Web Services by Embedding Axis2/C&lt;/a&gt; - Apache Rampart/C project lead, Kaushalye Kapuruge in this article does a fantastic job in explaining how to embed Axis2/C in your platform to enable Web services. He uses a Axis2/C's PHP and AJAX extensions to demonstrate adding Web services capability to any C based platform.&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://wso2.org/library/1686"&gt;Implementing libcurl based HTTP Transport in Apache Axis2/C&lt;/a&gt; - This article by Dinesh Premalal carries implementation details about libcurl based HTTP transport.&lt;/li&gt;&lt;li&gt;&lt;a href="http://wso2.org/library/2663"&gt;&lt;span style="font-weight: bold;"&gt;Web Service End Points with Apache Axis2/C&lt;/span&gt;&lt;/a&gt; - &lt;strong&gt;Samisa Abeysinghe&lt;/strong&gt;, current project lead of the Apache Axis2/C gives to you a detailed descriptions on customizing the endpoint address format of hosted services via Axis2/C, the Web services engine for providing and consuming Web Services in C.&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://wso2.org/library/3238"&gt;Introduction to Axis2/C Service Client API&lt;/a&gt; - In this article by &lt;strong&gt;Dinesh Premalal&lt;/strong&gt;, he introduces Axis2/C Service Client API for the beginner.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-754780381914662304?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/754780381914662304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=754780381914662304' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/754780381914662304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/754780381914662304'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/04/top-axis2c-articles.html' title='Top Axis2/C Articles'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-2771427983015085721</id><published>2008-04-02T21:33:00.000-07:00</published><updated>2008-04-09T00:51:18.269-07:00</updated><title type='text'>Limits in Key Management of Rampart/C</title><content type='html'>At the moment Rampart/C has a static configuration of certificates and private keys though configuration. That means the service writer has to specify his own certificate, private key, receivers certificate and password for obtaining the private key in a static configuration file. &lt;br /&gt;&lt;br /&gt;This configuration limits the service from serving multiple clients. The service writer can only specify one receiver certificate file. That implies the server can verify signatures from only one client. If server uses signature as a user confirmation method this implementation doesn't take you that far.&lt;br /&gt;&lt;br /&gt;The solution is to use key stores for key management. At the moment work is underway to implement pkcs12 key store for Rampart/C. I will give you more information on that later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-2771427983015085721?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/2771427983015085721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=2771427983015085721' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2771427983015085721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2771427983015085721'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/04/limits-in-key-management-of-rampartc.html' title='Limits in Key Management of Rampart/C'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-419135639320653774</id><published>2008-04-01T22:01:00.001-07:00</published><updated>2008-04-02T00:53:24.621-07:00</updated><title type='text'>Axis2/C and Apache Memory Pools</title><content type='html'>Axis2/C works with Apache2 as a module to the web server. Apache server provides various functionalities to its modules with Apache Portable Runtime (APR) library. Apache Memory pools is one such important functionality.&lt;br /&gt;&lt;br /&gt;Axis2/C uses apache memory pools for automatic memory handling. When a request comes to Axis2/C the allocation and free functions in Axis2/C is set to the Apache memory pool functions. Axis2/C uses the Apache request pool allocation and free functions for single requests. The memory allocated using the request has the scope of a HTTP request. When used with Apache there is an interesting thing happening in Axis2/C. Axis2/C has a increasing memory consumption when used with Apache. But it has zero memory leaks and steady memory consumption when used with the standalone http server.&lt;br /&gt;&lt;br /&gt;It seems that Apache server doesn't free its request pools regularly. This is the only conclusion that we can arrive at with the information at hand. But I think it is worth a try to look in to this to find out weather this is an Axis2/C bug or not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-419135639320653774?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/419135639320653774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=419135639320653774' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/419135639320653774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/419135639320653774'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/04/axis2c-and-apache-memory-pools.html' title='Axis2/C and Apache Memory Pools'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-8441513211284978949</id><published>2008-03-31T23:25:00.000-07:00</published><updated>2008-04-01T01:51:12.495-07:00</updated><title type='text'>Is it possible to wrap a SAX XML parser to a be StaX XML parser</title><content type='html'>I personally believe that it is a very hard thing to do if not impossible. The issue is that SAX parsers tend to control the XML parsing and StaX parsers tend to give the control of XML building to the user. These are completely different paradigms. &lt;br /&gt;&lt;br /&gt;First I will describe a StaX XML parser API.&lt;br /&gt;Usually there is a method to parse the next XML entity. When this method is called the parser parse the next XML entity (i.e XML start element, end element, character data) and return a event corresponding to the parsed XML entity. It is the responsibility of the user to collect the relevant information for that event. i.e if the event is start element then user can query the local name, prefix etc. &lt;br /&gt;&lt;br /&gt;In SAX parsing user registers functions for various events like start element, end element, text etc. When the parsing started and parser encounter an entity related to a registered function (i.e start element) it calls the registered function with the information required. &lt;br /&gt;&lt;br /&gt;So as we can clearly see the two methods are completely different.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-8441513211284978949?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/8441513211284978949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=8441513211284978949' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8441513211284978949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8441513211284978949'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/03/is-it-possible-to-wrap-sax-xml-parser.html' title='Is it possible to wrap a SAX XML parser to a be StaX XML parser'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-2578944318674302220</id><published>2008-03-31T04:13:00.000-07:00</published><updated>2008-03-31T04:22:53.203-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><title type='text'>Rollback the Subversion Repository to Previous Revision</title><content type='html'>This afternoon we accidentally commit some changes to trunk which must go to scratch  area. If any of you do such thing this is how we rollback it to previous revision.&lt;br /&gt;&lt;br /&gt;1. First find the last revision before your revision using "svn log" command or if you are in windows using your favorite svn tool.&lt;br /&gt;&lt;br /&gt;2. Then merge the HEAD revision with the previous revision which is the one before your commit.&lt;br /&gt;You can use svn merge -rHEAD:previous_revision command to do it on Linux command line. If you are in windows use Tortoise SVN's merge wizard to merge it.&lt;br /&gt;&lt;br /&gt;3. After merging with last good revision, commit the changes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-2578944318674302220?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/2578944318674302220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=2578944318674302220' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2578944318674302220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2578944318674302220'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/03/rollback-subversion-repository-to.html' title='Rollback the Subversion Repository to Previous Revision'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-5211033155697444241</id><published>2008-01-18T06:47:00.000-08:00</published><updated>2008-01-18T07:03:25.382-08:00</updated><title type='text'>Apache Axis2/C 1.2.0 Released</title><content type='html'>Apache Axis2/C team has announced the release of Axis2/C 1.2.0 version. You can download this from &lt;a href="http://ws.apache.org/axis2/c/download.cgi"&gt;http://ws.apache.org/axis2/c/download.cgi&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Key Features:&lt;br /&gt;1. Support for one-way messaging (In-Only) and request response  messaging (In-Out)&lt;br /&gt;2. Client APIs: Easy to use service client API and more advanced operation  client API&lt;br /&gt;3. Transports supported: HTTP&lt;br /&gt;&lt;ul&gt;&lt;li&gt;  Inbuilt HTTP server called simple axis server&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;           Apache2 httpd module called mod_axis2 for server side&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;           IIS module for server side&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;           Client transport with ability to enable SSL support&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; Basic HTTP Authentication&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; libcurl based client transport&lt;/li&gt;&lt;/ul&gt;4. Module architecture, mechanism to extend the SOAP processing model&lt;br /&gt;5. WS-Addressing support, both the submission (2004/08) and final (2005/08)  versions, implemented as a module&lt;br /&gt;6. MTOM/XOP support&lt;br /&gt;7. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages; This has complete XML infoset support&lt;br /&gt;8. XML parser abstraction&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Libxml2 wrapper&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;          Guththila pull parser support&lt;/li&gt;&lt;/ul&gt;9. Both directory based and archive based deployment models for deploying&lt;br /&gt;     services and modules&lt;br /&gt;10. Description hierarchy providing access to static data of Axis2/C runtime&lt;br /&gt;      (configuration, service groups, services, operations and messages)&lt;br /&gt;11. Context hierarchy providing access to dynamic Axis2/C runtime information&lt;br /&gt;     (corresponding contexts to map to each level of description hierarchy)&lt;br /&gt;12. Message receiver abstraction&lt;br /&gt;&lt;ul&gt;&lt;li&gt;          Inbuilt raw XML message receiver&lt;/li&gt;&lt;/ul&gt;13. Code generation tool for stub and skeleton generation for a given WSDL&lt;br /&gt;     (based on Java tool)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;          Axis Data Binding (ADB) support&lt;/li&gt;&lt;/ul&gt;14. Transport proxy support&lt;br /&gt;15. REST support (more POX like) using both HTTP POST and GET&lt;br /&gt;16. Comprehensive documentation&lt;br /&gt;&lt;ul&gt;&lt;li&gt;          Axis2/C Manual&lt;/li&gt;&lt;/ul&gt;17. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension&lt;br /&gt;18. TCP Transport, for both client and server side&lt;br /&gt;&lt;br /&gt;Major Changes Since Last Release&lt;br /&gt;&lt;br /&gt;  1 Improvements to Java tool, WSDL2C, that generates C code&lt;br /&gt;  2 Improvment to Apache2 module so that it&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a shared memory global pool&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;create context hierarchy in the global pool&lt;/li&gt;&lt;/ul&gt;     enabling it to have true application level scope.&lt;br /&gt;  3 Improved Policy&lt;br /&gt;  4 Improvements to thread environment&lt;br /&gt;  5 Improvements to error handling&lt;br /&gt;   6 Memory leak fixes&lt;br /&gt;  7 Many bug fixes&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-5211033155697444241?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/5211033155697444241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=5211033155697444241' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/5211033155697444241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/5211033155697444241'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/01/apache-axis2c-120-released.html' title='Apache Axis2/C 1.2.0 Released'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-159670155228450571</id><published>2008-01-16T21:26:00.000-08:00</published><updated>2008-01-16T21:33:56.595-08:00</updated><title type='text'>Rampart/C 1.1 Released</title><content type='html'>Apache Rampart/C Team has announced the release of Apache Rampart/C 1.1 version.&lt;br /&gt;You can download this release from &lt;a href="http://ws.apache.org/rampart/c/download.cgi"&gt;http://ws.apache.org/rampart/c/download.cgi&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Key features of the release&lt;/strong&gt;&lt;br /&gt;1. Ability to send and verify UsernameTokens with&lt;br /&gt;- Username and PlainText password&lt;br /&gt;- Username and Digested password&lt;br /&gt;2. Ability to send Timestamp tokens&lt;br /&gt;3. SOAP message encryption&lt;br /&gt;- With derived key support for improved security&lt;br /&gt;- Symmetric and Asymmetric modes of operations&lt;br /&gt;- Support for AES and Tripple DES encryption&lt;br /&gt;- Signature encryption&lt;br /&gt;- Keys encryption&lt;br /&gt;4. SOAP message signature&lt;br /&gt;- XML signature with RSA-SHA1&lt;br /&gt;- Message authentication with HMAC-SHA1&lt;br /&gt;- Signature confirmation support&lt;br /&gt;- SOAP Header signing&lt;br /&gt;5. WS-Security Policy (spec 1.1) based configurations&lt;br /&gt;- Support for both Symmetric as well as Asymmetric policy bindings&lt;br /&gt;- Support for different modes of key identifiers&lt;br /&gt;- Support for different algorithm suites [Basic128, Basic 192, Basic256, TrippleDES, Basic128Rsa15,Basic192Rsa15,Basic256Rsa15, TripleDesRsa15]&lt;br /&gt;6. Replay detection support&lt;br /&gt;- Easy to use built-in replay detection module&lt;br /&gt;- Ability to deploy a customized replay detection module&lt;br /&gt;7. Different protection orders&lt;br /&gt;- Encrypt before signing&lt;br /&gt;- Sign before encrypting&lt;br /&gt;8. Extensible modules&lt;br /&gt;- Password callback module&lt;br /&gt;- Authentication module&lt;br /&gt;- Credentials module&lt;br /&gt;9. Keys management&lt;br /&gt;- Support for X509 token profile&lt;br /&gt;- Support for Key identifiers, Thumb prints, Issuer/Serial pairs,Embedded and Direct references&lt;br /&gt;10. Other&lt;br /&gt;- Easy to use deployment scripts&lt;br /&gt;- A comprehensive set of samples&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Major Changes Since Last Release&lt;/strong&gt;&lt;br /&gt;1. MAC support with HMAC-SHA1&lt;br /&gt;2. Derrived key encryption&lt;br /&gt;3. Derived key signing&lt;br /&gt;4. Symmetric policy bindings&lt;br /&gt;5. New security header processor based on SOAP header layout&lt;br /&gt;6. Security policy validator&lt;br /&gt;7. Extensible Replay detection module&lt;br /&gt;8. Signature confirmation support&lt;br /&gt;9. Support for X509 thumb prints&lt;br /&gt;10. Easy to use deployment scripts&lt;br /&gt;11. Memory leak fixes&lt;br /&gt;12. Many bug fixes&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-159670155228450571?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/159670155228450571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=159670155228450571' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/159670155228450571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/159670155228450571'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/01/rampartc-11-released.html' title='Rampart/C 1.1 Released'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-3592251606373704966</id><published>2008-01-16T20:06:00.000-08:00</published><updated>2008-01-16T21:24:45.372-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='axiom'/><title type='text'>How to get the root node of an axiom node?</title><content type='html'>This is trivial, but most of the people find it difficult to and some may think axiom doesn’t support this. So I thought I should explain how to do it.Every axiom node has a field called parent node. This field can be accessed via the axiom_node_get_parent method. I use that function to get the root node of a given axiom node.             &lt;br /&gt;&lt;pre name="code" class="cpp"&gt;&lt;br /&gt;axiom_node_t * get_root_node(const axutil_env_t *env, axiom_node_t *scope)&lt;br /&gt;{&lt;br /&gt;  axiom_node_t *p = NULL; &lt;br /&gt;  axiom_node_t *root = NULL;&lt;br /&gt;  p = scope; &lt;br /&gt;  do{&lt;br /&gt;      root = p;&lt;br /&gt;      p = axiom_node_get_parent(root, env);&lt;br /&gt;  }while (p);&lt;br /&gt;return root;&lt;br /&gt;}&lt;/pre&gt;Here I have used the property: parent node of the root node is null.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-3592251606373704966?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/3592251606373704966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=3592251606373704966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3592251606373704966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3592251606373704966'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/01/how-to-get-root-node-of-axiom-node.html' title='How to get the root node of an axiom node?'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-2232709706653934806</id><published>2008-01-14T01:14:00.001-08:00</published><updated>2008-01-16T21:25:03.539-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='axiom'/><title type='text'>Beginners guide to Axiom/C</title><content type='html'>Axiom is an XML object model written for the Axis2/C engine. The object model is based on the pull model of XML parsing. Because of that we can use the axiom object model on partially parsed XML documents. Axis2/C web service engine is heavily dependent on this very important component.&lt;br /&gt;Every web service or client developer who uses the Axis2/C engine should be aware of the Axiom/C object model. The model consists of many important structures. Axiom/C works by creating, populating and querying these structures. I’ll explain some of the most important ones as we go on.&lt;br /&gt;When using Axiom we can create the Axiom/C object model programmatically or using an XML document. I will explain the latter case first.&lt;br /&gt;First thing to do is creating an &lt;strong&gt;axiom_xml_reader_t&lt;/strong&gt; object. According to the source that we are going to use for reading the XML we have to change the creation method. Axiom_xml_reader can read XML objects from three types of sources,&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;File&lt;/li&gt;&lt;li&gt;Memory Buffer (char buffer)&lt;/li&gt;&lt;li&gt;From a call back function&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;In the example given it is created for reading a XML file.&lt;br /&gt;The next step is to create an &lt;strong&gt;axiom_stax_builder_t&lt;/strong&gt; object using the previously created reader. The actual Axiom object model is done using the &lt;strong&gt;axiom_stax_reader&lt;/strong&gt;. As I have mentioned earlier we can use this to build the object model to the extent that we want.&lt;br /&gt;Then the next step is to get the &lt;strong&gt;axiom_document_t&lt;/strong&gt; object in the &lt;strong&gt;stax_builder&lt;/strong&gt; object. Axiom document hold a pointer to the root element of the object model. It has some other information like the character encoding of the XML document, XML version used.&lt;br /&gt;Then there are two options for us. We can build the whole document at once or build it as we like. But most of the time client and service writers build the whole XML document at once. So I will explain that part only and I will explain the partial building in another tutorial. The method for building the complete Axiom abject model is &lt;strong&gt;axiom_document_build_all&lt;/strong&gt;. Note this method returns the root element of the axiom model.&lt;br /&gt;&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;&lt;br /&gt;axiom_xml_reader_t *r = NULL;&lt;br /&gt;axiom_stax_builder_t *sb = NULL;&lt;br /&gt;axiom_document_t *doc = NULL;&lt;br /&gt;r = axiom_xml_reader_create_for_file(env, file, NULL);&lt;br /&gt;if (r)&lt;br /&gt;{&lt;br /&gt;    sb = axiom_stax_builder_create(env, r);&lt;br /&gt;    if (sb)&lt;br /&gt;    {&lt;br /&gt;        doc = axiom_stax_builder_get_document(sb, env);&lt;br /&gt;        if (doc)&lt;br /&gt;        {&lt;br /&gt;            return axiom_document_build_all(doc, env); &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In the case of a XML string buffer we need to use the axiom_xml_reader_create_for_memory and this is same for callback readers. Note arguments for these methods are different. Now we know how to build the object model from a XML source like file or memory.&lt;br /&gt;The next thing is to get the required information from this object model in memory. In doing so the most important structure is axiom_node_t. Axiom object model is a tree and nodes of this tree are constructed from axiom_node_t structure. You can see that the axiom_document_build_all returns a pointer to axiom_node_t structure. In other words root node of the tree is an axiom_node_t, so as the rest of the tree.&lt;br /&gt;Every node carries a payload and this payload can be a XML element, XML comment or text. There are other possibilities as well. But these are rare in web services scenarios. When we are presented with an axiom_node_t there is a way to know what the payload it carries. Method call axiom_node_get_node_type returns the integer value for the paylod containin in the node. Following table shows some of the common return values and there meaning. Note the return values are defined in as an enum called axiom_types_t.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;AXIOM_ELEMENT:&lt;/strong&gt; The node is a carries a pointer to axiom_element_t structure. This structure contains all the information relavant to that XML element like attributes, namespaces, local name, prefix.&lt;br /&gt;&lt;br /&gt;Actually when I start that table I thought of filling it with sevaral rows. But AXIOM_ELEMENT is the only meaning full and usefull return type I had encountered.&lt;br /&gt;Now lets look at various ways of traversing the Axiom tree. Here traversing tree ultimately becomes traversing the axiom_node_t structures. So every time we are given axiom_node_t objects to traverse and allmost evry time these node are of the type AXIOM_ELEMENT.&lt;br /&gt;Before doing anythinf we have to get the element in the axiom node.&lt;br /&gt;&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;&lt;br /&gt;axiom_element_t *element = NULL;&lt;br /&gt;if (axiom_node_get_node_type(node, env) == AXIOM_ELEMENT)&lt;br /&gt;    element = (axiom_element_t *)axiom_node_get_data_element(node, env);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;Retrieving the Basic information&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Then we can use this axiom element to access all the required details. To get the local name of the element we can use the&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;&lt;br /&gt;name = axiom_element_get_localname(element, env);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Method and similarly we can get the namespace by calling the method.&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;&lt;br /&gt;namespace = axiom_element_get_namespace(element, env);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;All these methods can be seen in the axiom_element.h.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Retrieving the Attributes&lt;/strong&gt;&lt;br /&gt;The next important thing is getting the attributes of this element. There are various ways to do this as well.&lt;br /&gt;If you know the attribute name you can directly call the&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;&lt;br /&gt;attr_name = axiom_element_get_attribute_value_by_name(element, env, “A”);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Or if you know the namespace and local name of the attribute (qualified name) you can call the&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;&lt;br /&gt;axutil_qname_t *qname = axutil_qname_create(env, “A”, http://uom.com, NULL);&lt;br /&gt;attr_name = axiom_element_get_attribute_value(element, env, qname);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that the third argument is a pointer to axutil_qname_t structure. This structure holds the qualified name of the attribute. You can see before calling the attribute retrieval method we are creating a axutil_qname_t object.&lt;br /&gt;If you want to go through all the attributes and you don’t know the names you can use the hash returned by the axiom_element_get_all_attributes method.&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;&lt;br /&gt;attr_hash = axiom_element_get_all_attributes(element, env);&lt;br /&gt;for (hi = axutil_hash_first(attr_hash, env); hi; hi = axutil_hash_next(env, hi))&lt;br /&gt;{&lt;br /&gt;    void *v = NULL;&lt;br /&gt;    axutil_hash_this(hi, NULL, NULL, &amp;amp;v);&lt;br /&gt;    if (v)&lt;br /&gt;    {&lt;br /&gt;        axis2_char_t *attr_val = NULL;&lt;br /&gt;        axiom_attribute_t *attr = (axiom_attribute_t*)v;      &lt;br /&gt;        attr_val = axiom_attribute_get_value(attr, env);&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here the values containing in the hash are axiom_attribute_t structures. You can use the methods in axiom_attribute.h to query the attribute.&lt;br /&gt;Accessing the Child Elements&lt;br /&gt;If you are not interested in the qualified names of the child elements that you want to deal with you can use the axiom_children_iterator_t structure. This structure can be retrieved by calling the axiom_element_get_children method.&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;&lt;br /&gt;axiom_children_iterator_t *it = axiom_element_get_child_elements(element, env, node);&lt;br /&gt;if(it)&lt;br /&gt;{&lt;br /&gt;    while(axiom_child_element_iterator_has_next(it, env))&lt;br /&gt;    {&lt;br /&gt;        child_node = axiom_child_element_iterator_next(it, env);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The next case is when we want to get the only the child elements with specific qualified names. Here the concept is same as above but we have to use axiom_children_qname_iterator_t struture with the axiom_element_get_children_with_qname method.&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;&lt;br /&gt;axutil_qname_t *qname = axutil_qname_create(env, “ElementName”, http://uom.com, NULL);&lt;br /&gt;axiom_children_qname_iterator_t *qit = axiom_element_get_children_with_qname (element, env, node);&lt;br /&gt;if(it)&lt;br /&gt;{&lt;br /&gt;    while(axiom_children_qname_iterator _has_next(it, env))&lt;br /&gt;    {&lt;br /&gt;        child_node = axiom_children_qname_iterator_next(it, env);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We can traverse the elements using only axiom_node_t methods as well. But this is little bit difficult than the above two methods and hense I’ll skip it this time.&lt;br /&gt;In this article I tried to show only the most popular methods used for creating and traversing axiom object model. If you have any doubts or comments please feel free to contact me or you can directly ask from the axis2/c user list or development list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-2232709706653934806?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/2232709706653934806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=2232709706653934806' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2232709706653934806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2232709706653934806'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/01/beginners-guide-to-axiomc.html' title='Beginners guide to Axiom/C'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-1463299481701876303</id><published>2008-01-13T06:00:00.000-08:00</published><updated>2008-01-13T06:07:00.381-08:00</updated><title type='text'>Richard Stallman's visit to Sri Lanka</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_KZswksojATA/R4oa5_ptfiI/AAAAAAAAAHE/ntpZDGkNpxQ/s1600-h/Stallman_1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_KZswksojATA/R4oa5_ptfiI/AAAAAAAAAHE/ntpZDGkNpxQ/s400/Stallman_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5154962307120201250" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-1463299481701876303?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/1463299481701876303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=1463299481701876303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1463299481701876303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1463299481701876303'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2008/01/richard-stallmans-visit-to-sri-lanka.html' title='Richard Stallman&apos;s visit to Sri Lanka'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_KZswksojATA/R4oa5_ptfiI/AAAAAAAAAHE/ntpZDGkNpxQ/s72-c/Stallman_1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-1739365516265809869</id><published>2007-12-02T19:10:00.001-08:00</published><updated>2007-12-02T19:12:35.801-08:00</updated><title type='text'>SAML Token Support for Rampart/C –Overview</title><content type='html'>Security Assertion Markup Language is becoming the de-facto standard for exchanging security information. SAML is a XML based language defined by the OASIS and at the moment two major versions of SAML are in use. They are SAML 1.1 and SAML 2.0 specifications. Rampart SAML implementation is based on the SAML 1.1 specification.&lt;br /&gt;SAML 1.1 consists of three major parts and they are&lt;br /&gt;&lt;br /&gt;1. SAML assertions&lt;br /&gt;2. SAML protocol&lt;br /&gt;3. SAML bindings&lt;br /&gt;&lt;br /&gt;SAML assertions are in the heart of the SAML specification, because the other two parts i.e. SAML protocol and SAML binding define how to get and transfer SAML Assertions through many transport mechanisms. The SAML implementation both supports SAML Assertions and SAML protocol.&lt;br /&gt;&lt;br /&gt;A SAML assertion consists of Conditions and Statements. Conditions specify various things under which the assertions should be evaluated. Statements provide claims about subjects. A single assertion can have multiple statements as well as conditions in it.&lt;br /&gt;&lt;br /&gt;Some statements are Authentication Statement, Attribute Statement and Subject Statement. Authentication statement provides a subject’s authentication information in a system. It includes information like the authentication method used i.e. username/password; the time at the authentication took place etc. Attribute statements can carry information about a subjects properties in XML form. Subject statements are for carrying information about the subject like e-mail address, domain name, and XML signature key information regarding the subject.   &lt;br /&gt;Basic idea behind the SAML implementation is to provide the necessary mechanisms to process and construct SAML Assertions based on the Axiom/C XML object model. &lt;br /&gt;&lt;br /&gt;The basic pattern of the SAML is very simple. Each and every SAML important data structure is captured as a data structure. To use SAML you have to either build the object model from a XML node or build it programmatically.&lt;br /&gt;&lt;br /&gt;If you are going to build the model from a XML node the most important method is the build method. For example to build a SAML assertion the method you have to use is&lt;br /&gt;&lt;br /&gt;AXIS2_EXTERN int AXIS2_CALL&lt;br /&gt;saml_assertion_build(saml_assertion_t *assertion,&lt;br /&gt;                               axiom_node_t *node, axutil_env_t *env)&lt;br /&gt;&lt;br /&gt;This pattern is common to every other structure in the SAML model. Then you can use the public methods available for querying the information required from the object model.&lt;br /&gt;If you are going to build the model programmatically, first you have to specify all the information using the public methods available. Then you can use the method to construct an axiom node from the object model.&lt;br /&gt;&lt;br /&gt;AXIS2_EXTERN axiom_node_t * AXIS2_CALL&lt;br /&gt;saml_assertion_to_om(saml_assertion_t *assertion,&lt;br /&gt;                               axiom_node_t *parent, axutil_env_t *env)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-1739365516265809869?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/1739365516265809869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=1739365516265809869' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1739365516265809869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1739365516265809869'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/12/saml-token-support-for-rampartc.html' title='SAML Token Support for Rampart/C –Overview'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-2007693674028862491</id><published>2007-11-27T01:49:00.000-08:00</published><updated>2007-11-27T01:56:32.038-08:00</updated><title type='text'>WS-Federation in Service Oriented Business World</title><content type='html'>&lt;div align="justify"&gt;&lt;span style="font-family:arial;"&gt;WS-Federation is one of the immerging technologies in the Service Oriented World. The power of WS-Federation in the context of WS-Security related web services can be used to fulfill the sophisticated business requirements of the modern business entities. The necessity of a ‘Federation’ among business entities is a typical requirement in the situations where business entities and their partners are co-related based on web services and securely exchanging sensitive data among different or like realms.&lt;br /&gt;&lt;br /&gt;The growth of partnerships into seamless e-business networks is one of the most significant trends in the evolution of SOA based Internet Commerce. Some of the most successful global enterprises have achieved a very high level of coordination (or Federation based on security) between their own ICT systems and those of their customers, suppliers and business partners. This coordination is being used to differentiate solutions, reduce costs and improve speed and agility. In business-to-consumer scenarios where consumers communicate with an enterprise that presents products or services from multiple partners simultaneously, access to shared resources must be secure and structured to meet the requirements of each partner in the business relationship, while meeting the consumer's needs. In application-to-application or business-to-business environments where Web services are increasingly used, remote or partner access to corporate data and applications must be achieved securely and seamlessly. For example following scenario (figure 1) illustrates the federation of the business entities. The main business entity of the scenario is Fabrikam Inc. and other entities are the business partners of Fabrikam.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div align="center"&gt;&lt;img src="http://1.bp.blogspot.com/_yO8q3CIhuZs/R0vpK6oAs0I/AAAAAAAAACA/oxcO4hhiY0A/s320/fed_bus_wrl.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5137456173691220802" /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Effective identity federation benefits both users and enterprises. It provides end users with a seamless cross domain experience through single sign-on (SSO) and it enables enterprises to expose resources to a larger class of users not directly administered by the enterprise.&lt;br /&gt;&lt;br /&gt;The development of Federated web services can be based on a WS-Federation framework and the user (web service developer) has to customize it according to the specified needs. A complete WS-Federation framework is designed to meet and fulfill the following business requirements.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Provide a framework built on industry standards (data format and message structure) that are independent of specific implementations (client type or server type) and network protocols&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Provide the ability for business partners to exchange information about their users in a secure way&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Protect the privacy of users within a federation, i.e., keep user identity information secret&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Allow each company in a federation to manage the identities of their own users without relying on a centralized third-party&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Support standard security information descriptions or use existing standard security tokens&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Support a standard protocol to exchange security tokens amongst federation participants&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Provide a way to establish trust amongst federation participants&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;A WS-Federation framework (FEDi-which is based on WS-Federation and WS-Trust open standards) for Apache Axis2/C is currently under development.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-2007693674028862491?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/2007693674028862491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=2007693674028862491' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2007693674028862491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2007693674028862491'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/11/ws-federation-in-service-oriented.html' title='WS-Federation in Service Oriented Business World'/><author><name>Kasun Indrasiri</name><uri>http://www.blogger.com/profile/01843642831558293309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/_yO8q3CIhuZs/S28Ge3vQ1-I/AAAAAAAAAW0/X1RbVfPEpMc/S220/kasun3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_yO8q3CIhuZs/R0vpK6oAs0I/AAAAAAAAACA/oxcO4hhiY0A/s72-c/fed_bus_wrl.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-2537292204174099569</id><published>2007-11-01T22:25:00.001-07:00</published><updated>2007-11-01T23:00:50.615-07:00</updated><title type='text'>Web Service Trust Practical Scenario</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_yO8q3CIhuZs/Ryq9BuLf0WI/AAAAAAAAAB4/DlglU99be0s/s1600-h/untitled.bmp"&gt;&lt;img src="http://2.bp.blogspot.com/_yO8q3CIhuZs/Ryq9BuLf0WI/AAAAAAAAAB4/DlglU99be0s/s320/untitled.bmp" border="0" alt="" id="BLOGGER_PHOTO_ID_5128118962988503394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WS-Trust can be  expressed using above practical scenario. The relevent message formats that exchange among the business parties are illustrated below.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Request Security Token (RST)&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The RST message content is digitally signed by the Requestor. (with hash and his private key)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Encrypt the signed content by the public key of the Department of Driving License.&lt;/li&gt;&lt;/ul&gt;&lt;div align="center"&gt;&lt;img src="http://1.bp.blogspot.com/_yO8q3CIhuZs/Ryq4teLf0TI/AAAAAAAAABg/n_KqNJoMMMY/s320/1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5128114217049641266" /&gt;&lt;/div&gt;&lt;br /&gt;Request Security Token Response (RSTR)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Obtain the session key for the trust session&lt;/li&gt;&lt;li&gt;Encrypt the session key with the public key of Online Wine Shop&lt;/li&gt;&lt;li&gt;Find and set the claims that are requested&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Digitally signed the content (Claims + Encrypted session key) (with hash &amp;amp; private key)&lt;/li&gt;&lt;li&gt;RSTR is consists of both the security token (SAML in this case) and proof token.&lt;/li&gt;&lt;/ul&gt;&lt;div align="center"&gt;&lt;img src="http://4.bp.blogspot.com/_yO8q3CIhuZs/Ryq5XOLf0UI/AAAAAAAAABo/DRfArcPgElw/s320/2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5128114934309179714" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span&gt;Returning the Security Token to Relying Party&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Obtain the session key for the trust session, and decrypt the service request (e.g. ‘buy wine x’) and obtain the service request.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div align="center"&gt;&lt;img src="http://3.bp.blogspot.com/_yO8q3CIhuZs/Ryq5w-Lf0VI/AAAAAAAAABw/09G2VNC3OEE/s320/3.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5128115376690811218" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-2537292204174099569?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/2537292204174099569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=2537292204174099569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2537292204174099569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2537292204174099569'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/11/web-service-trust-practical-scenario.html' title='Web Service Trust Practical Scenario'/><author><name>Kasun Indrasiri</name><uri>http://www.blogger.com/profile/01843642831558293309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/_yO8q3CIhuZs/S28Ge3vQ1-I/AAAAAAAAAW0/X1RbVfPEpMc/S220/kasun3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_yO8q3CIhuZs/Ryq9BuLf0WI/AAAAAAAAAB4/DlglU99be0s/s72-c/untitled.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-1466511427732124642</id><published>2007-10-18T02:24:00.000-07:00</published><updated>2007-10-18T04:36:11.038-07:00</updated><title type='text'>Adding your own headers to out going soap message in the service level using Axis2/C</title><content type='html'>WS-Trust specification describe a way to send requested security token in the soap header. So we need a way to add custom header while we are in the Axis2/C service level. This is our solution for that problem. I think, this will be helpful to anyone how want to add custom headers to soap message while in the service level(not to go for something like handlers).&lt;br /&gt;&lt;br /&gt;First you need to create a soap envelope using &lt;span style="font-weight: bold;"&gt; axiom_soap_envelope_create&lt;/span&gt; function. Then you need to create soap header using created soap envelope as the parent (&lt;span style="font-weight: bold;"&gt;axiom_soap_header_create_with_parent&lt;/span&gt;). Then add a header block to that header using  &lt;span style="font-weight: bold;"&gt;axiom_soap_header_add_header_block&lt;/span&gt; function.&lt;br /&gt;&lt;br /&gt;After adding the header block you need to get the base axiom node from it using &lt;span style="font-weight: bold;"&gt;axiom_soap_header_block_get_base_node&lt;/span&gt; function. You can add whatever the content you want inside your custom header block.&lt;br /&gt;&lt;br /&gt;Also you need to create the soap body using &lt;span style="font-weight: bold;"&gt;axiom_soap_body_create_with_parent&lt;/span&gt; function and add the payload to body using &lt;span style="font-weight: bold;"&gt;axiom_soap_body_add_child&lt;/span&gt; function.&lt;br /&gt;&lt;br /&gt;Finally you have to set the outgoing soap envelope using axis2_msg_ctx_set_soap_envelope function.&lt;br /&gt;&lt;br /&gt;You can downloaded the edited version of echo_skeleton.c file which comes with Axis2/C samples from &lt;a href="http://milinda.pathirage.googlepages.com/echo_skeleton.c"&gt;this link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is the changes we have to made inside invoke function of service skeleton:&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;&lt;br /&gt;axiom_node_t *AXIS2_CALL&lt;br /&gt;echo_invoke(&lt;br /&gt;   axis2_svc_skeleton_t * svc_skeleton,&lt;br /&gt;   const axutil_env_t * env,&lt;br /&gt;   axiom_node_t * node,&lt;br /&gt;   axis2_msg_ctx_t * msg_ctx)&lt;br /&gt;{&lt;br /&gt;   /* Invoke the business logic.&lt;br /&gt;    * Depending on the function name invoke the correct impl method.&lt;br /&gt;    * We have only echo in this sample, hence invoke echo method.&lt;br /&gt;    * To see how to deal with multiple impl methods, have a look at the&lt;br /&gt;    * math sample.&lt;br /&gt;    */&lt;br /&gt;   axis2_op_ctx_t *op_ctx = NULL;&lt;br /&gt;   axis2_msg_ctx_t *in_msg_ctx = NULL;&lt;br /&gt;   axiom_soap_envelope_t *soap_env = NULL;&lt;br /&gt;   axiom_soap_envelope_t *ret_soap_env = NULL;&lt;br /&gt;   axiom_namespace_t *ns_soap = NULL;&lt;br /&gt;   axiom_namespace_t *my_ns = NULL;&lt;br /&gt;   axiom_soap_header_t *header = NULL;&lt;br /&gt;   axiom_soap_header_block_t *header_block = NULL;&lt;br /&gt;   axiom_node_t *header_block_node = NULL;&lt;br /&gt;   axiom_node_t *header_child_node = NULL;&lt;br /&gt;   axiom_element_t *header_child_ele = NULL;&lt;br /&gt;   axiom_soap_body_t *body = NULL;&lt;br /&gt;&lt;br /&gt;   op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env);&lt;br /&gt;   in_msg_ctx = axis2_op_ctx_get_msg_ctx(op_ctx, env, AXIS2_WSDL_MESSAGE_LABEL_IN);&lt;br /&gt;   soap_env = axis2_msg_ctx_get_soap_envelope(in_msg_ctx, env);&lt;br /&gt;   ns_soap = axiom_soap_envelope_get_namespace(soap_env, env);&lt;br /&gt;   ret_soap_env = axiom_soap_envelope_create(env, ns_soap);&lt;br /&gt;&lt;br /&gt;   my_ns = axiom_namespace_create(env, "http://think2ed.blogspot.com", "tbc");&lt;br /&gt; &lt;br /&gt;   header = axiom_soap_header_create_with_parent(env, ret_soap_env);&lt;br /&gt;   header_block = axiom_soap_header_add_header_block(header, env, "myCustomHeader", my_ns);&lt;br /&gt;  &lt;br /&gt;   header_block_node = axiom_soap_header_block_get_base_node(header_block, env);&lt;br /&gt;   header_child_ele = axiom_element_create(env, header_block_node, "MyCustomChild", my_ns, &amp;amp;header_child_node);&lt;br /&gt;   axiom_element_set_text(header_child_ele, env, "My Custom Header Content", header_child_node);&lt;br /&gt;&lt;br /&gt;   body = axiom_soap_body_create_with_parent(env, ret_soap_env);&lt;br /&gt;   axiom_soap_body_add_child(body, env, axis2_echo_echo(env, node));&lt;br /&gt;&lt;br /&gt;   axis2_msg_ctx_set_soap_envelope(msg_ctx, env, ret_soap_env);   &lt;br /&gt;&lt;br /&gt;   return axis2_echo_echo(env, node);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Additional header files which needs to add are in the above mentioned file. Important thing is you need to add the soap body. Otherwise this code will not generate the correct soap message.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-1466511427732124642?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/1466511427732124642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=1466511427732124642' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1466511427732124642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1466511427732124642'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/10/adding-your-own-headers-to-out-going.html' title='Adding your own headers to out going soap message in the service level using Axis2/C'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-4372450603404804947</id><published>2007-10-18T01:09:00.000-07:00</published><updated>2007-10-18T01:40:53.470-07:00</updated><title type='text'>Accessing incoming SOAP Envelope inside the service skeleton's invoke method</title><content type='html'>While we were working on the WS-Trust implementation for Rampart/C, we had to access the incoming soap envelope. We first try to invoke the &lt;span style="font-weight: bold;"&gt;axis2_msg_ctx_get_soap_envelope &lt;/span&gt;on the message context given as a parameter to invoke function. But it returns a NULL. After some discussions we figure out that the message context given is out message context and at this phase of the service the out soap envelope is null in out message context.&lt;br /&gt;To access the incoming soap envelope, first we need to get the operation context from the out message context using  &lt;span style="font-weight: bold;"&gt;axis2_msg_ctx_get_op_ctx&lt;/span&gt; function. Then we need to get the in message context from operation context. After above step you can directly access the incoming soap envelope from the in message context.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;&lt;br /&gt;axiom_node_t* AXIS2_CALL&lt;br /&gt;trust_sts_invoke(axis2_svc_skeleton_t *svc_skeleton,&lt;br /&gt;        const axutil_env_t *env,&lt;br /&gt;        axiom_node_t *node,&lt;br /&gt;        axis2_msg_ctx_t *msg_ctx)&lt;br /&gt;{&lt;br /&gt;    axis2_op_ctx_t *op_ctx = NULL;&lt;br /&gt;    axis2_msg_ctx_t *in_msg_ctx = NULL;&lt;br /&gt;    axiom_soap_envelope_t *soap_env = NULL;&lt;br /&gt;    axiom_node_t *base_node = NULL;&lt;br /&gt;    &lt;br /&gt;    op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env);&lt;br /&gt;    in_msg_ctx = axis2_op_ctx_get_msg_ctx(op_ctx, env, AXIS2_WSDL_MESSAGE_LABEL_IN);&lt;br /&gt;    soap_env = axis2_msg_ctx_get_soap_envelope(in_msg_ctx, env);&lt;br /&gt;&lt;br /&gt;    /*Get the axiom node for soap envelope contents.*/&lt;br /&gt;    base_node = axiom_soap_envelope_get_base_node(soap_env, env);&lt;br /&gt;&lt;br /&gt;    return node;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-4372450603404804947?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/4372450603404804947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=4372450603404804947' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/4372450603404804947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/4372450603404804947'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/10/accessing-incoming-soap-envelope-inside.html' title='Accessing incoming SOAP Envelope inside the service skeleton&apos;s invoke method'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-7188843201869572474</id><published>2007-10-17T03:25:00.001-07:00</published><updated>2007-10-17T03:26:01.613-07:00</updated><title type='text'>SAML for Axis2/C &amp; Rampart/C</title><content type='html'>SAML 1.1 specification implementation for Axis2C and Rampart/C is in its final stages of development. The development is happening in the scratch area of the Rampart and it is still not moved to the main development area of Rampart/C. We are hoping to complete the remaining development as quickly as possible and the library will be available to the public very soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-7188843201869572474?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/7188843201869572474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=7188843201869572474' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/7188843201869572474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/7188843201869572474'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/10/saml-for-axis2c.html' title='SAML for Axis2/C &amp; Rampart/C'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-8761359322590830271</id><published>2007-10-05T11:11:00.000-07:00</published><updated>2007-10-09T19:38:17.565-07:00</updated><title type='text'>Understanding WS-Trust</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_KZswksojATA/Rww6ag3eChI/AAAAAAAAACw/WI-9jeEtiI0/s1600-h/trust.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5119531103587011090" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_KZswksojATA/Rww6ag3eChI/AAAAAAAAACw/WI-9jeEtiI0/s400/trust.JPG" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family:';"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;‘Trust’ is often refers to the expression between the parties that one party believe the statements made by the other parties. In the context of Web Services, a generic procedure of establishing the trusted relationship between the web services can be illustrated through a simple requestor/resource provider scenario.&lt;/span&gt;&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:';"&gt;The initial step of the generic WS Trust scenario is to identify the web service of the &lt;i&gt;Resource Provider. &lt;/i&gt;(RP)&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:';"&gt;The Requestor examines the WS-SecurityPolicy statement associated with the Resources Provider’s web service. (Policy statement specifies the type and authority of security tokens that the Web service requires for massages it processes).&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:';"&gt;The Requestor can determine its capabilities (i.e. Tokens etc.) to access the Resource Providers web service by examining the Policy statements.&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:';"&gt;If the Requestor doesn’t have an acceptable token (by the RP), then the Requestor requests for an appropriate security token from an eligible Security Token Service (STS). This request is defined as RST (Request Security Token) by WS-Trust specification.&lt;/span&gt;&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:';"&gt;The appropriate STS can be identified from the Resource Providers policy statements&lt;/span&gt;&lt;b&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:';"&gt;In order to access the STS, the Requestor must have the acceptable tokens to satisfy the security credentials of the STS.&lt;/span&gt;&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:';"&gt;The STS issues the requested token via another message defined as RSTR (Request Security Token Response).&lt;/span&gt;&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:';"&gt;The Requestor, then present the acquired security token from the given STS (of RP) to Resource Provider. In the case, since the Resource Provider &lt;i&gt;relying&lt;/i&gt; on the security tokens issued (validates, renewed, and cancelled as well) by the STS, it is often called the ‘Relying Party’.&lt;/span&gt;&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:';"&gt;The Resource Provider can use the same STS to validate the security token which are received from the Requestor. After the successful validation of the security tokens, the Requestor can consume the services (of RP) through the trusted, secured communication path.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-8761359322590830271?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/8761359322590830271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=8761359322590830271' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8761359322590830271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8761359322590830271'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/10/understanding-ws-trust.html' title='Understanding WS-Trust'/><author><name>Kasun Indrasiri</name><uri>http://www.blogger.com/profile/01843642831558293309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/_yO8q3CIhuZs/S28Ge3vQ1-I/AAAAAAAAAW0/X1RbVfPEpMc/S220/kasun3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_KZswksojATA/Rww6ag3eChI/AAAAAAAAACw/WI-9jeEtiI0/s72-c/trust.JPG' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-8532855257671814583</id><published>2007-10-04T02:13:00.002-07:00</published><updated>2007-10-04T02:54:38.467-07:00</updated><title type='text'>Axis2/C VC project</title><content type='html'>Although not very popular among developers (because most of the Axis2/C developers develop using Linux) Axis2/C source has a VC project. But this is the way to develop if you are a Windows developer. The VC project can be found in the ides/vc/axis2c folder. There are three separate VC2005 solutions available for developers. They are&lt;br /&gt;&lt;br /&gt;· Axis2c.sln – Main VC project with the Axis2c engine&lt;br /&gt;· Services/services.sln - A solution for sample services&lt;br /&gt;· Clients/clients.sln – A solution for sample clients&lt;br /&gt;&lt;br /&gt;Aixs2c.sln is the main VC solution and it comprises of several separate VC projects. These include&lt;br /&gt;&lt;br /&gt;1. axutil&lt;br /&gt;2. axis2_parser&lt;br /&gt;3. axiom&lt;br /&gt;4. neethi&lt;br /&gt;5. axis2_engine&lt;br /&gt;6. axis2_http_sender&lt;br /&gt;7. axis2_http_receiver&lt;br /&gt;8. axis2_http_server&lt;br /&gt;9. axis2_mod_addr&lt;br /&gt;&lt;br /&gt;A basic configuration of Axis2/C only requires above projects. Note that above list displays the build order of Axis2/C. So when building the project if there are linking errors to the Axis2C generated libraries better check the build order. So axutil should be built first and then axis2_parser and so on. A successful build of the solution will create the nessasary structure and copy the appropriate build files and other files in the ides/vc/axis2c/deploy folder.&lt;br /&gt;&lt;br /&gt;When building the project using Axis2/C one important thing is to properly setting up the external libraries. For a basic configuration of axis2c libxml2, iconv and zlib are required. To setup these libraries and include files we can use the tools-&gt;options-&gt;projects and solutions-&gt;vc++ directories in the VC2005 IDE. The directories that we need to setup are libraries directory and include directories.&lt;br /&gt;&lt;br /&gt;Apart from the default projects we can customize the Axis2/C build by using different projects. For example to build Axis2/C with the Guththila we need to add the Guththila project to the axis2c solution. Guththila project can be found in the guththila folder inside the axis2c solution folder. To compile with the Guhthila project we need to change the axis2_parser project to include the guththila_wrapper files. We can remove the libxml_wrapper files from the axis2_parser and add the guththila_wrapper files instead. Guththila_wrapper files can be found in the axis2c\axiom\src\parser\guththila folder.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-8532855257671814583?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/8532855257671814583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=8532855257671814583' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8532855257671814583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8532855257671814583'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/10/axis2c-vc-project.html' title='Axis2/C VC project'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-6568967521063627353</id><published>2007-10-02T22:22:00.000-07:00</published><updated>2007-10-02T23:11:57.525-07:00</updated><title type='text'>Insiders guide to writing Axis2/C services</title><content type='html'>Roughly, the service implementation of Axis2/C works as below. Engine uses the dynamic loading of DLL’s to load the service DLL’s. The dynamic DLL loading of Axis2/C requires two entry point functions present in the DLL to successfully load and unload DLLs. These functions are&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;&lt;br /&gt;AXIS2_EXPORT int axis2_get_instance(struct axis2_svc_skeleton **inst,&lt;br /&gt;       const axutil_env_t *env)&lt;br /&gt;AXIS2_EXPORT int axis2_remove_instance(axis2_svc_skeleton_t *inst,&lt;br /&gt;       const axutil_env_t *env)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In the case of services, get_instance function should create and return a axis2_svc_skeleton structure to the Axis2/C engine. After that all the communication with the service and engine is done using this axis2_svc_skeleton structure.  &lt;br /&gt;&lt;br /&gt;axis2_svc_skeleton is a very important data structure for the Axis2/C service developers. This structure provides the interface between a service and the Axis2/C engine.&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;   &lt;br /&gt;   /**&lt;br /&gt;    * service skeleton struct.&lt;br /&gt;    */&lt;br /&gt;   struct axis2_svc_skeleton&lt;br /&gt;   {&lt;br /&gt;       /** operations of service skeleton */&lt;br /&gt;       const axis2_svc_skeleton_ops_t *ops;&lt;br /&gt;       /** Array list of functions, implementing the service operations */&lt;br /&gt;       axutil_array_list_t *func_array;&lt;br /&gt;   };&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The definition of this structure can be found in the axis2_svc_skeleton.h header file. Most important field here is the ops field. The definition of the axis2_svc_skeleton_ops_t can be found in the same header file. This structure provides the entry point functions and invokation functions for the service. It is the resposibility of the service implementor to provide appropriate functions and initialize the ops structure with these function pointers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;&lt;br /&gt;struct axis2_svc_skeleton_ops&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;       /**&lt;br /&gt;        * Initializes the service implementation.&lt;br /&gt;        */&lt;br /&gt;       int (AXIS2_CALL *&lt;br /&gt;               init)(&lt;br /&gt;                   axis2_svc_skeleton_t *svc_skeleton,&lt;br /&gt;                   const axutil_env_t *env);&lt;br /&gt;&lt;br /&gt;       /**&lt;br /&gt;        * Invokes the service. This function should be used to call up the&lt;br /&gt;        * functions implementing service operations.&lt;br /&gt;        */&lt;br /&gt;       axiom_node_t *(AXIS2_CALL*&lt;br /&gt;               invoke)(&lt;br /&gt;                   axis2_svc_skeleton_t *svc_skeli,&lt;br /&gt;                   const axutil_env_t *env,&lt;br /&gt;                   axiom_node_t *node,&lt;br /&gt;                   axis2_msg_ctx_t *msg_ctx);&lt;br /&gt;&lt;br /&gt;       /**&lt;br /&gt;        * This method would be called if a fault is detected.&lt;br /&gt;        */&lt;br /&gt;       axiom_node_t *(AXIS2_CALL*&lt;br /&gt;               on_fault)(&lt;br /&gt;                   axis2_svc_skeleton_t *svc_skeli,&lt;br /&gt;                   const axutil_env_t *env,&lt;br /&gt;                   axiom_node_t *node);&lt;br /&gt;&lt;br /&gt;       /**&lt;br /&gt;        * Frees service implementation.&lt;br /&gt;        */&lt;br /&gt;       int (AXIS2_CALL *&lt;br /&gt;               free)(&lt;br /&gt;                   axis2_svc_skeleton_t *svc_skeli,&lt;br /&gt;                   const axutil_env_t *env);&lt;br /&gt;&lt;br /&gt;       /**&lt;br /&gt;        * Initializes the service implementation.&lt;br /&gt;        */&lt;br /&gt;       int (AXIS2_CALL *&lt;br /&gt;               init_with_conf)(&lt;br /&gt;                   axis2_svc_skeleton_t *svc_skeleton,&lt;br /&gt;                   const axutil_env_t *env,&lt;br /&gt;                   struct axis2_conf *conf);&lt;br /&gt;   } ;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Axis2/C uses the init function pointers to initialize the service. In the current implementation this happens when the first request arrived for a service. Sevice implementators can use this method to do all their one time initializations. For example a connection to a database can be created in this method which exists through out the lifetime of the service.&lt;br /&gt;&lt;br /&gt;The related method to the init is the free method. This method is called when the Axis/C engine is stopped. So the uninitalization canbe done in this method.&lt;br /&gt;&lt;br /&gt;Invoke function pointer is very important as it provides the actual implementation of the buisiness logic to the service. When a request arrives, ultimately it is send to the invoke function for proccessing. The service implementor can access all the required details of the request using the axis2_msg_ctx and the axiom_node. Axiom_node provides access to the actual soap body of the request and axis2_msg_ctx provides the state and structures related to the request in the Axis2/C engine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-6568967521063627353?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/6568967521063627353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=6568967521063627353' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6568967521063627353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6568967521063627353'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/10/insiders-guide-to-writing-axis2c.html' title='Insiders guide to writing Axis2/C services'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-4399739602772165590</id><published>2007-10-02T02:05:00.000-07:00</published><updated>2007-10-02T02:12:40.155-07:00</updated><title type='text'>Apache Axis2/C 1.1.0 released!</title><content type='html'>Apache Axis2/C Team has announced the release of Apache Axis2/C 1.1.0 with following key features:&lt;br /&gt;&lt;br /&gt;1. Support for one-way messaging (In-Only) and request response messaging (In-Out)&lt;br /&gt;2. Client APIs: Easy to use service client API and more advanced operation client API&lt;br /&gt;3. Transports supported: HTTP&lt;br /&gt;    * Inbuilt HTTP server called simple axis server&lt;br /&gt;    * Apache2 httpd module called mod_axis2 for server side&lt;br /&gt;    * IIS module for server side&lt;br /&gt;    * Client transport with ability to enable SSL support&lt;br /&gt;    * Basic HTTP Authentication&lt;br /&gt;    * libcurl based client transport&lt;br /&gt;4. Module architecture, mechanism to extend the SOAP processing model&lt;br /&gt;5. WS-Addressing support, both the submission (2004/08) and final (2005/08) versions, implemented as a module&lt;br /&gt;6. MTOM/XOP support&lt;br /&gt;7. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages;This has complete XML infoset support&lt;br /&gt;8. XML parser abstraction&lt;br /&gt;    * Libxml2 wrapper&lt;br /&gt;        * Guththila pull parser support&lt;br /&gt;9. Both directory based and archive based deployment models for deploying services and modules&lt;br /&gt;10. Description hierarchy providing access to static data of Axis2/C runtime (configuration, service groups, services, operations and messages)&lt;br /&gt;11. Context hierarchy providing access to dynamic Axis2/C runtime information (corresponding contexts to map to each level of description hierarchy)&lt;br /&gt;12. Message receiver abstraction&lt;br /&gt;        * Inbuilt raw XML message receiver&lt;br /&gt;13. Code generation tool for stub and skeleton generation for a given WSDL (based on Java tool)&lt;br /&gt;        * Axis Data Binding (ADB) support&lt;br /&gt;14. Transport proxy support&lt;br /&gt;15. REST support (more POX like) using both HTTP POST and GET&lt;br /&gt;16. Comprehensive documentation&lt;br /&gt;    * Axis2/C Manual&lt;br /&gt;17. WS-Policy implementation called Neethi/C, with WS-SecurityPolicy extension&lt;br /&gt;18. TCP Transport, for both client and server side&lt;br /&gt;&lt;br /&gt;You can download this release from:&lt;br /&gt;  &lt;a href="http://ws.apache.org/axis2/c/download.cgi"&gt;http://ws.apache.org/axis2/c/download.cgi&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-4399739602772165590?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/4399739602772165590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=4399739602772165590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/4399739602772165590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/4399739602772165590'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/10/apache-axis2c-110-released.html' title='Apache Axis2/C 1.1.0 released!'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-6019243581617863929</id><published>2007-08-30T21:16:00.000-07:00</published><updated>2007-10-02T01:32:39.725-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><title type='text'>Securing the Axis2/C future</title><content type='html'>The C language which is used to write the Axis2/C provides the foundations for a long standing web service engine. The language scales well in performance and scalability provided that they are being well planned at the beginning not as an afterthought. I think Axis2/C has a huge advantage over the traditions web services engines written in Java or C# like languages because of the performance characteristics.&lt;br /&gt;Axis2/C is built on a good architecture which performs and scales well. But architectures are independent from the languages and when it comes to implementation and design we have to consider the language aspects as well.&lt;br /&gt;An application written in C has the above advantages but to become a successful application a rock solid design and a very good implementation is required. What I meant by a rock solid design is not the whole design but there are some things that must be carefully designed. One important thing is how memory management is done.  &lt;br /&gt;Axis2/C doesn’t have a unified view of how memory is managed. This is very important given that Axis2/C is server software which needs to run for months without stopping. The current implementation does not have memory leaks but the handling of memory is not at a satisfactory level of a rock solid design.&lt;br /&gt;Program structure is another issue that I can leads to inconsistencies. Some parts of the Axis2/C code are done in a hurry and due to that the some parts of the code is not well structured. This is not the case in majority of the code.&lt;br /&gt;If we want to make the Axis2/C a long lived and successful project we have to make the base of the Axis2/C as solid as possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-6019243581617863929?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/6019243581617863929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=6019243581617863929' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6019243581617863929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6019243581617863929'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/08/securing-axis2c-future.html' title='Securing the Axis2/C future'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-2026021045416104705</id><published>2007-08-10T02:56:00.000-07:00</published><updated>2007-10-02T01:33:02.852-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><title type='text'>JSON – A fat free alternative to XML</title><content type='html'>&lt;span style="font-family:times new roman;"&gt;JSON (JavaScript Object Notation) is a lightweight data format based on the object notation of the JavaScript language. It does not require JavaScript to read or write; it is easy to parse by any language and libraries and tools exist in many languages to handle JSON.&lt;br /&gt;In the context of the web services, JSON plays a significant role. Even though, there aren’t many web services based on JSON, the debate between XML and JSON was a quite interesting one.&lt;br /&gt;The debate about JSON vs. XML as a data interchange format has begun in blogspace, following JSON inventor and architect at Yahoo Douglas Crockford's talk at XML 2006 JSON, the fat-free alternative to XML.&lt;br /&gt;JSON is a data interchange formats whose design goals were to be textual, minimal, and a subset of JavaScript; it supports two structures: objects (unordered collections of name/value pairs) and arrays (ordered sequences of values), as well as four simple types: strings, numbers, booleans, and null.&lt;br /&gt;A few arguments in favor of JSON briefed as follows.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's simultaneously human- and machine-readable format;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It has support for Unicode, allowing almost any information in any human language to be communicated;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The self-documenting format that describes structure and field names as well as specific values;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The strict syntax and parsing requirements that allow the necessary parsing algorithms to remain simple, efficient, and consistent;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The ability to represent the most general computer science data structures: records, lists and trees.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;As we compare XML and JSON in technical vise JSON has several plus points over XML but still JSON has a huge hill to climb to displace XML.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;There is a ongoing project on JSON for Apache Axis2/C.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-2026021045416104705?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/2026021045416104705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=2026021045416104705' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2026021045416104705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2026021045416104705'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/08/json-fat-free-alternative-to-xml.html' title='JSON – A fat free alternative to XML'/><author><name>Kasun Indrasiri</name><uri>http://www.blogger.com/profile/01843642831558293309</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://1.bp.blogspot.com/_yO8q3CIhuZs/S28Ge3vQ1-I/AAAAAAAAAW0/X1RbVfPEpMc/S220/kasun3.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-901887706390398873</id><published>2007-08-08T20:46:00.000-07:00</published><updated>2007-10-02T01:33:30.812-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='rampartc'/><category scheme='http://www.blogger.com/atom/ns#' term='ws-trust'/><title type='text'>WS-Trust Coming Up!</title><content type='html'>WS-Trust is a key specification in the Web services security stack. So we thought it is time to give this nice capability to Rampart/C so that users can leverage the through power of web services security.&lt;br /&gt;&lt;br /&gt;We are undertaking this project as part of a University of Moratuwa Cource module. If everything goes well (I'm sure they will), we will be able to add this nice feature to the Rampart/C at the end of this month.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-901887706390398873?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/901887706390398873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=901887706390398873' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/901887706390398873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/901887706390398873'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/08/ws-trust-coming-up.html' title='WS-Trust Coming Up!'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-6440584295718961113</id><published>2007-08-03T02:35:00.000-07:00</published><updated>2007-10-02T01:34:06.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><category scheme='http://www.blogger.com/atom/ns#' term='rampartc'/><title type='text'>Guththila working with Rampart</title><content type='html'>Rampart is the web services security implementation of Axis2/C. Rampart is a rapidly evolving project with hundreds of lines of code added everyday. We’ve encountered few problems using Rampart with Guththila XML parser and we’ve found several bugs in the Guththila code. All of these errors were simple errors such as using a wrong identifier, forgetting to set a variable to NULL etc. But we could very easily fix all of these errors and now Rampart is working with Guththila XML parser.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-6440584295718961113?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/6440584295718961113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=6440584295718961113' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6440584295718961113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6440584295718961113'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/08/guththila-working-with-rampart.html' title='Guththila working with Rampart'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-3961448411944058554</id><published>2007-07-28T01:46:00.000-07:00</published><updated>2007-10-02T01:34:27.665-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><title type='text'>"Apache Axis2/C - Web Service Engine" Article</title><content type='html'>Article Link : &lt;a href="http://wso2.org/library/2406"&gt;http://wso2.org/library/2406&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In this article, Samisa Abeysinghe (One of the key developers behind Axis2/C)  describe the  Axis2/C engine. This article summarize the architectural overview, programming model, code generation, data binding, developing clients and services, and many features of Axis2/C.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-3961448411944058554?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/3961448411944058554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=3961448411944058554' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3961448411944058554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3961448411944058554'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/07/apache-axis2c-web-service-engine.html' title='&quot;Apache Axis2/C - Web Service Engine&quot; Article'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-8516070287902553442</id><published>2007-06-28T20:35:00.000-07:00</published><updated>2007-10-02T01:34:48.892-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='wsdl2c'/><title type='text'>Using WSDL2C Tool</title><content type='html'>&lt;span style="font-weight: bold;font-family:verdana;font-size:100%;"  &gt;What is WSDL2C?&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;WSDL2C is a command line tool comes  bundled with Apache Axis2/Java as a part of Axis2/Java Code Generation Tool.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Axis2 Code Generation tool has a core  that processes the WSDL and produces a model object. Using this model  object it generate XML models according to the code must be generated  and parse this XML models against XSLT Templates to generate the actual  code. Code Generation Engine which is the core component of the Tool  simply calls the extensions one by one and then calls the component  called Emitter which generates the main parts of the code. Emitters  are language dependent and when developing WSDL2C Tool C language specific  emitter called “CEmitter” is used. For the data binding process  specific to C language component called “CStructWritter” is used.  This component implements the BeanWritter interface of the Axis2 Code  Generation tool and “CEmitter” implements the Emitter interface.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Currently WSDL2C tool support XML In-Out  model code generation and code generation with C language specific Axis  Data Binding(ADB).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:100%;"  &gt;Using WSDL2C&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Go through following steps to use the  WSDL2C Tool:&lt;/span&gt; &lt;ol  type="1" style="font-family:verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Download the Axis2 Standard    Binary Distribution and extract it to your hard disk. If you want to    get the advantage of latest features added to the WSDL2C tool download    the latest nightly build from Axis2 download zone or get a checkout    from current SVN head and build it by following steps in Axis2 manual.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;The shell and batch scripts    (WSDL2C.sh &amp; WSDL2C.bat) for the WSDL2C Tool is available inside    bin directory under the Axis2/C tools directory.  You have to set    the AXIS2_HOME variable to point your Axis2 binary distribution directory    or if you build it from source, point it to your target directory inside    Axis2 directory.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Add the path to the shell/batch    script to your systems PATH variable and make scripts executable.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Now scripts are ready to use, you can  use WSDL2C.sh in Linux or WSDL2C.bat in Windows with necessary options  to generate the code to use with Axis2/C engine.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;Use WSDL2C script with following options  to generate server side code without data binding.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;&lt;span style="font-style: italic;"&gt;$: WSDL2C –uri &lt;/span&gt;&lt;wsdl&gt;&lt;span style="font-style: italic;"&gt;  –ss –sd –d none –u –f –o&lt;/span&gt;&lt;br /&gt;&lt;/wsdl&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Following artifacts will be visible  inside the specified out put directory after code generation completed:&lt;br /&gt;&lt;/span&gt;&lt;ul  style="font-family:verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Service.xml&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;axis2_svc_skel_&lt;service_name&gt;.c&lt;/service_name&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;axis2_skel_&lt;service_name&gt;.c&lt;/service_name&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;axis2_skel_&lt;service_name&gt;.h&lt;/service_name&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-family:lucida grande;font-size:100%;"  &gt;Using WSDL2C with following options,  you can generate server side code with ADB.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;font-size:100%;"  &gt;$: WSDL2C –uri &lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;font-size:100%;"  &gt;&lt;wsdl&gt; &lt;/wsdl&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;&lt;span style="font-style: italic;"&gt;–ss –sd –d adb –u –f –o&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;Following artifacts will be visible  inside the service directory after the code generation:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul  style="font-family:verdana;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;service.xml&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;axis2_svc_skel_&lt;service_name&gt;.c&lt;/service_name&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;axis2_skel_&lt;service_name&gt;.c&lt;/service_name&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;axis2_skel_&lt;service_name&gt;.h&lt;/service_name&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;source and header files    for data binding with axis2_ prefix.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-family:lucida grande;font-size:100%;"  &gt;Source code for WSDL2C.sh&lt;/span&gt;&lt;pre&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;export&lt;/span&gt; &lt;span style="color: rgb(51, 204, 0);"&gt;AXIS2_HOME&lt;/span&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;=&lt;/span&gt;/home/axis2java&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;for&lt;/span&gt; f &lt;span style="color: rgb(255, 102, 0);"&gt;in&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;$AXIS2_HOME&lt;/span&gt;/lib/*.jar&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;do&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 204, 0);"&gt;AXIS2_CLASSPATH&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;$AXIS2_CLASSPATH&lt;/span&gt;:&lt;span style="color: rgb(255, 0, 0);"&gt;$f&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;done&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;export&lt;/span&gt; &lt;span style="color: rgb(51, 204, 0);"&gt;AXIS2_CLASSPATH&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;echo&lt;/span&gt; the classpath &lt;span style="color: rgb(255, 0, 0);"&gt;$AXIS2_CLASSPATH&lt;/span&gt;&lt;br /&gt;java -classpath &lt;span style="color: rgb(255, 0, 0);"&gt;$AXIS2_CLASSPATH&lt;/span&gt; org.apache.axis2.wsdl.WSDL2C $*&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-8516070287902553442?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/8516070287902553442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=8516070287902553442' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8516070287902553442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8516070287902553442'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/06/using-wsdl2c-tool.html' title='Using WSDL2C Tool'/><author><name>Milinda Lakmal Pathirage</name><uri>http://www.blogger.com/profile/14003973100432151012</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_KZswksojATA/RsWt0oKCx8I/AAAAAAAAAAM/yFhh_NGuLcA/s320/milindalakmal-128.jpg'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-1330830912017155773</id><published>2007-06-28T02:36:00.000-07:00</published><updated>2007-10-02T01:35:19.460-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><title type='text'>How to configure Guththila</title><content type='html'>At the moment Axis2/C supports two XML parsers and they are Guththila and libxml2. The default axis2/c source distribution comes with libxml2 XML parser. In order to use Guththila  XML parser the source code must be compiled with Guththila parser enabled.&lt;br /&gt;&lt;br /&gt;To compile with guthtila following configuration parameters must be specified.&lt;br /&gt;&lt;br /&gt;Under Linux:&lt;br /&gt;&lt;br /&gt;--enable-guththila=yes&lt;br /&gt;&lt;br /&gt;Under Windows&lt;br /&gt;&lt;br /&gt;ENABLE_GUTHTHILA = 1&lt;br /&gt;&lt;br /&gt;For more information refer the &lt;a href="http://ws.apache.org/axis2/c/docs/installationguide.html"&gt;Axis2/C installation guide&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-1330830912017155773?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/1330830912017155773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=1330830912017155773' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1330830912017155773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/1330830912017155773'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/06/how-to-configure-guththila.html' title='How to configure Guththila'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-4081440513128471121</id><published>2007-06-27T23:55:00.000-07:00</published><updated>2007-10-02T01:32:24.118-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><title type='text'>Guththila XML parser is ready to use with Axis2/C</title><content type='html'>I have been developing the Guththila XML parser and was able to integrate it with Axis2/C. When it was first integrated with Axis2/C it has few problems and I have fixed them all. Another issue with integration with Axis2/C is that it uses structure called axutil_env in every function. Axis2/C keeps all the global structures like logs, custom memory allocation functions in this structure. At the begining of the project Axis2/C has taken a implementation disicion to incude a reference to this structure in every function call as an argument. My opinion is this is not a good idea at all. Anyway the axutil_env is a global structure and no point in passing a pointer to it in every function call, but implementors took that decision and we have to live with that weather we like it or not. So I had to introduce this structure to every function call and it was a nightmare.&lt;br /&gt;&lt;br /&gt;Then there were few problems about the handling of white spaces in Guthtila. Initially my idea was to parse white spaces to Axiom as well but after intergration is done I found out that Axiom cannot handle whitespaces. So I had to ommit the whitespaces and in the Guthtila parser and by doing so I have introduced few bugs as well so I had to fix them.&lt;br /&gt;&lt;br /&gt;But as a whole it works fine and now we are running with Guththila and with unrealistic performance for a web service engine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-4081440513128471121?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/4081440513128471121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=4081440513128471121' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/4081440513128471121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/4081440513128471121'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/06/guththila-parser-is-ready-to-use.html' title='Guththila XML parser is ready to use with Axis2/C'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-8464514003643995097</id><published>2007-06-21T05:36:00.000-07:00</published><updated>2007-10-02T01:31:52.301-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><title type='text'>Attracting developers to Open Source projects</title><content type='html'>Being open source doesn't guarantee that there will be developers who are willing to contribute to the project. There is lot more than that.&lt;br /&gt;People may like to hack in to others code, identify bugs but these are not compelling reasons for a person to truly contribute to a open source project. A reasonable developer always likes to actively participate in a projects important decisions and they really hate when most of the important decisions about the project is taken by a secret council. This is a common case in open source projects funded by organizations. Most of the projects developers may be in that organization and they will find it easier to talk to each other and come to a decision. But in this case outside people who are willing to contribute to the project may feel that they are left out of the projects important decisions and they will simply go to some where else where they can participate actively. So a successful  open source project will always take every decision in mailing list and allows developers or what ever person from outside to have their say in every important decision in the project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Treating every user who are willing to contribute by bug reports as potential developers is also may be a good investment in the future. Even if a new person takes 7days to fix a bug which can be fixed by a projects developer in 1 hour it is better to give the user the chance to fix that bug by taking time, because in the future that person may be a key developer in the project.&lt;br /&gt;&lt;br /&gt;Some developers like to solve very hard intangible problems and they don't like to hand around with fixing bugs and improving the documentation. Of course at one point of time they will have to contribute to the project by fixing bugs. But if the projects developers always keep the good stuff for them selves people may find that they get only the left out things and they won't like it.&lt;br /&gt;&lt;br /&gt;So attracting users is an art by itself and every developer should master that art to a some extent if they are working in a open source project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-8464514003643995097?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/8464514003643995097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=8464514003643995097' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8464514003643995097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/8464514003643995097'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/06/attracting-developers-to-open-source.html' title='Attracting developers to Open Source projects'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-6469469534004064365</id><published>2007-06-20T06:44:00.000-07:00</published><updated>2007-10-02T01:30:39.580-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>Improved XML parser for Axis2/C</title><content type='html'>For the past month I was working very hard on one project. That is to produce a Stax based XML parser for Axis2/C. The goal was not only to develop a XML parser but to write a XML parser which is running faster than the existing ones.&lt;br /&gt;&lt;br /&gt;Now I'm very happy to announce that my work has been integrated in to Axis2/C. Today evening I committed the code to the SVN trunk of Axis2/C. I had the chance to do a performance test on one of the high end machines and it turned out that with the new parser Axis2/C ran beyond 10,000 requests per second. Previously it was only about 4000 request per second and this is a huge performance gain. Actually I was surprised by the test results as I never expected this much of performance gain. But it seems that with the new XML parser Axis2/C will break all the performance records for web services engines.&lt;br /&gt;&lt;br /&gt;So if someone wants a web service engine with extreme performance Axis2/C may be the ideal candidate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-6469469534004064365?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/6469469534004064365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=6469469534004064365' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6469469534004064365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/6469469534004064365'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/06/added-improved-xml-parser-to-axis2c.html' title='Improved XML parser for Axis2/C'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-3581001305919176704</id><published>2007-06-15T00:15:00.000-07:00</published><updated>2007-10-02T01:30:12.124-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>New XML parser for Axis2/C</title><content type='html'>Axis2/C is a web service engine and essential part of it is to process XML messages (SOAP). Axis2 architecture is based on the XML pull model and it has defined its own XML object model called Axiom on top of the XML pull parsing (Stax). At the moment the parsers that are being used are libxml2 and guththila and performance vise these two parsers are almost the same. Guththila is a parser specifically written for Axis2/C and it had its share of strengths and weaknesses.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the past month I was involved in developing a new improved version of Guththila parser and now it is almost done except for few concerns such as error handling and few XML validation issues. I could integrate it with the Axis2/C and it worked well according to my opinion. I have done few performance tests here and there and it seems that with the new parser Axis2/C performance is increased somewhere around 35% - 45 % and I'd like to consider this as a huge gain.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Another new feature of the new parser is its ability to parse tokens instead of strings in to the Axis2/C but unfortunately I couldn't test this feature yet. The problem that we had earlier was we are using strdup to create string from the parser to the web service engine. This is a really expensive operation both in time and space. Specially it effects the memory locality of the Axis2/C engine quite drastically. But with the new improvement this will no longer exists and I'm hoping to get around 150% percent increases in the performance of the Axis2/C engine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-3581001305919176704?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/3581001305919176704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=3581001305919176704' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3581001305919176704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/3581001305919176704'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/06/completely-new-xml-parser-for-axis2c.html' title='New XML parser for Axis2/C'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-2129125165297594427</id><published>2007-06-14T06:59:00.001-07:00</published><updated>2007-10-02T01:29:47.337-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><title type='text'>Axis2/C may be the future of Web Services</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UVlnyapwF90/RoM5F17go_I/AAAAAAAAAAM/Rqb6jkY2MJA/s1600-h/axis.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_UVlnyapwF90/RoM5F17go_I/AAAAAAAAAAM/Rqb6jkY2MJA/s320/axis.jpg" alt="" id="BLOGGER_PHOTO_ID_5080967577142862834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Axis2/C is a Web Service engine written for producing and consuming Web Services. Axis2/C is a fully open source project and goes under the Apache2 license. Unlike most of the current web services stacks which are developed in Java or C#, Axis2/C is written in C. At the moment Axis2/C is thriving forward as new developers and users joining the project. Axis2/C provides a very good colleberative environment for developers who are keen on producing high performance open source software. Being said that one of the main goals of Axis2/C is to run faster. The next major goal is to provide Web Service extensibility to exsiting technologies like PHP, MySQL or Perl.&lt;br /&gt;&lt;br /&gt;Recently Axis2/C project went through a major milestoen and it is the 1.0 release and it was kind of a mixed success. Still there are lots and lots of areas in Axis2/C to be covered and project is more than willing to accept developers who has the intension to right free software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-2129125165297594427?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/2129125165297594427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=2129125165297594427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2129125165297594427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/2129125165297594427'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/06/axis2c-may-be-future-of-web-services.html' title='Axis2/C may be the future of Web Services'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_UVlnyapwF90/RoM5F17go_I/AAAAAAAAAAM/Rqb6jkY2MJA/s72-c/axis.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2683597758423811533.post-5865392088599713033</id><published>2007-06-14T03:42:00.000-07:00</published><updated>2007-10-02T01:27:56.221-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2c'/><title type='text'>Axis2/C a web service engine written in C</title><content type='html'>&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2683597758423811533-5865392088599713033?l=wsaxc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wsaxc.blogspot.com/feeds/5865392088599713033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2683597758423811533&amp;postID=5865392088599713033' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/5865392088599713033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2683597758423811533/posts/default/5865392088599713033'/><link rel='alternate' type='text/html' href='http://wsaxc.blogspot.com/2007/06/axis2c-web-service-engine-written-in-c.html' title='Axis2/C a web service engine written in C'/><author><name>Supun Kamburugamuva</name><uri>http://www.blogger.com/profile/14361364937700874215</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UVlnyapwF90/TJt8MW5cmpI/AAAAAAAAAKI/pmlsTS6co8o/S220/45695_439733319920_594774920_4769125_1165489_n.jpg'/></author><thr:total>6</thr:total></entry></feed>
