<?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-5702309079039458297</id><updated>2012-01-20T22:30:34.062-08:00</updated><category term='Command Line'/><category term='WS-Addressing'/><category term='SOAP11'/><category term='MySQL'/><category term='SOAP Action'/><category term='Soap Fault'/><category term='INSTALL'/><category term='Web Services'/><category term='Content-Type'/><category term='OpenSSL'/><category term='Compiling'/><category term='Happiness'/><category term='Security'/><category term='Keystore'/><category term='IIS'/><category term='XAMPP'/><category term='PHP'/><category term='Insperation'/><category term='PHP Source'/><category term='Virus'/><category term='SOAP12'/><category term='WSF/PHP'/><category term='Debugging'/><category term='WSService'/><category term='WSSecurity'/><title type='text'>Nandika's blog</title><subtitle type='html'>Web Services, WSF/PHP, C++ and My random Sutff</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default?start-index=101&amp;max-results=100'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>112</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-2102999585210886478</id><published>2012-01-19T10:52:00.001-08:00</published><updated>2012-01-19T10:53:30.389-08:00</updated><title type='text'>The Law of Requisite Variety</title><content type='html'>&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:33af14ee-3664-454e-9115-11608d37398b" class="wlWriterEditableSmartContent"&gt;&lt;div id="86a27cd3-7b3c-4aee-87ab-eccf351f84ab" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=bDRudRhNgy4" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/-yXhSfQKL3IE/Txhmh60HezI/AAAAAAAAAe0/0NB1OWzy79o/video0c75e371d542%25255B12%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('86a27cd3-7b3c-4aee-87ab-eccf351f84ab'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/bDRudRhNgy4?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/bDRudRhNgy4?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&amp;quot;The variety in the control system must be equal to or larger than the variety of the perturbations in order to achieve control&amp;quot;&lt;/p&gt;  &lt;p&gt;This simply means that a flexible system with many options is better able to cope with change. One that is tightly optimized for an initial set of conditions might be more efficient whilst those conditions prevail but fail totally should conditions change.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wyrdology.com/mind/creativity/variety.html"&gt;http://www.wyrdology.com/mind/creativity/variety.html&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-2102999585210886478?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/2102999585210886478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2012/01/law-of-requisite-variety.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2102999585210886478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2102999585210886478'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2012/01/law-of-requisite-variety.html' title='The Law of Requisite Variety'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-yXhSfQKL3IE/Txhmh60HezI/AAAAAAAAAe0/0NB1OWzy79o/s72-c/video0c75e371d542%25255B12%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4223027744347757725</id><published>2011-09-10T12:57:00.001-07:00</published><updated>2011-09-10T12:57:10.906-07:00</updated><title type='text'>How to debug XSLT with Visual Studio</title><content type='html'>&lt;p&gt;Evaluating and debugging XSLT with visual studio is a very simple task and very useful in developing XSLT.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Evaluating xslt with VS.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Open the xslt file using visual studio and then select &lt;strong&gt;show xslt output option&lt;/strong&gt; from XML menu.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-1SKSHZqIVYk/TmvBD4C9pUI/AAAAAAAAAdc/-boJdj8U5io/s1600-h/image%25255B4%25255D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-G2C19JTGEew/TmvBEl3tV8I/AAAAAAAAAdg/xrUR70Gvf1I/image_thumb%25255B2%25255D.png?imgmax=800" width="643" height="299" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It will show a browse option to select the input xml for the processing. Next will will show the output xml in another tab.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-EqYmV_P_aws/TmvBE3PEwjI/AAAAAAAAAdk/xg7lbP53gIo/s1600-h/image%25255B8%25255D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-kNUY4Sz9Zso/TmvBFM5TWmI/AAAAAAAAAdo/O1YInZWzA5g/image_thumb%25255B4%25255D.png?imgmax=800" width="593" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Debugging XSLT with VS&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;For debugging xslt, all you have to do is to set a break point on the xslt and select &lt;strong&gt;bebug xslt&lt;/strong&gt; option from the XML Menu.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-P-OdvCo8bUk/TmvBFRPiN0I/AAAAAAAAAds/sOZ9yaj4ags/s1600-h/image%25255B12%25255D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-6g0t1rsD4Ls/TmvBFrS5vcI/AAAAAAAAAdw/gC6Vk352dFY/image_thumb%25255B6%25255D.png?imgmax=800" width="560" height="385" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4223027744347757725?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4223027744347757725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/09/how-to-debug-xslt-with-visual-studio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4223027744347757725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4223027744347757725'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/09/how-to-debug-xslt-with-visual-studio.html' title='How to debug XSLT with Visual Studio'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-G2C19JTGEew/TmvBEl3tV8I/AAAAAAAAAdg/xrUR70Gvf1I/s72-c/image_thumb%25255B2%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-935055079746219238</id><published>2011-08-13T11:55:00.001-07:00</published><updated>2011-08-13T11:55:46.891-07:00</updated><title type='text'>NLP Eye Accessing cues</title><content type='html'>&lt;p&gt;NLP (Neuro-Linguistic Programming)&amp;#160; was developed by &lt;a href="http://en.wikipedia.org/wiki/Richard_Bandler"&gt;Richard Bandler&lt;/a&gt; and linguist &lt;a href="http://en.wikipedia.org/wiki/John_Grinder"&gt;John Grinder&lt;/a&gt;, and they believed that NLP will be useful in &amp;quot;finding ways to help people have better, fuller and richer lives&amp;quot;&lt;/p&gt;  &lt;p&gt;There are usual meanings to the eye moment. By observing the eye movement, it is possible to tell “which sensory systems” are accessed.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Up and to the left usually means that a person is remembering something visually&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-KUuvcfdSUuE/TkbIgkRc_wI/AAAAAAAAAcU/IW7bnf1wSgM/s1600-h/eye_acc_vrec%25255B2%25255D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="eye_acc_vrec" border="0" alt="eye_acc_vrec" src="http://lh5.ggpht.com/-CZ8qX1ieCHg/TkbIh87rZtI/AAAAAAAAAcY/TyUiWsfoi54/eye_acc_vrec_thumb.gif?imgmax=800" width="240" height="122" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Up and to the right usually means that a person is imagining something visually &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-lEbjczEVD9M/TkbIi7ZrXNI/AAAAAAAAAcc/t_BLRCEKCqc/s1600-h/eye_acc_vcon%25255B2%25255D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="eye_acc_vcon" border="0" alt="eye_acc_vcon" src="http://lh5.ggpht.com/-373k8FiBZYU/TkbIj6VXiTI/AAAAAAAAAcg/67DqtCW1RQE/eye_acc_vcon_thumb.gif?imgmax=800" width="240" height="122" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Left side usually means a remembered sound&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-uEYc_bUDZuw/TkbIkz2x6jI/AAAAAAAAAck/w47DpXLCvxE/s1600-h/eye_acc_Arec%25255B2%25255D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="eye_acc_Arec" border="0" alt="eye_acc_Arec" src="http://lh5.ggpht.com/-KbTddYo_eQg/TkbIlyvvU2I/AAAAAAAAAco/PgYUS7l5EMc/eye_acc_Arec_thumb.gif?imgmax=800" width="240" height="124" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Right side&amp;#160; usually means an imagined sound&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-xOB_QQ4fz_o/TkbImyphO1I/AAAAAAAAAcs/O_N8yC-_JW8/s1600-h/eye_acc_Acon%25255B2%25255D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="eye_acc_Acon" border="0" alt="eye_acc_Acon" src="http://lh3.ggpht.com/-llkx2WSgoDE/TkbIoOUY0uI/AAAAAAAAAcw/JLIKNViHtvY/eye_acc_Acon_thumb.gif?imgmax=800" width="240" height="124" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt;&amp;#160; Down right (which is down right obvious!) usually means that a person is accessing a bodily feeling or emotion.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-63IOIKq2A2Y/TkbIpAQaLCI/AAAAAAAAAc0/m3PtCiZa4z8/s1600-h/eye_acc_K%25255B2%25255D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="eye_acc_K" border="0" alt="eye_acc_K" src="http://lh3.ggpht.com/-inwaMTCou3A/TkbIqDRYWRI/AAAAAAAAAc4/z3JFzeDf1oo/eye_acc_K_thumb.gif?imgmax=800" width="240" height="171" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;6.&lt;/strong&gt; Down left usually means that a person is accessing internal dialogue &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-fNPMHKctl5I/TkbIrKWAI2I/AAAAAAAAAc8/_qiLTtQoWf8/s1600-h/eye_acc_loop%25255B2%25255D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="eye_acc_loop" border="0" alt="eye_acc_loop" src="http://lh4.ggpht.com/-14U1CvVeaHU/TkbIsKlR8XI/AAAAAAAAAdA/fMsiCU3ipOw/eye_acc_loop_thumb.gif?imgmax=800" width="240" height="146" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-935055079746219238?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/935055079746219238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/08/nlp-eye-accessing-cues.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/935055079746219238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/935055079746219238'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/08/nlp-eye-accessing-cues.html' title='NLP Eye Accessing cues'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-CZ8qX1ieCHg/TkbIh87rZtI/AAAAAAAAAcY/TyUiWsfoi54/s72-c/eye_acc_vrec_thumb.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-8973073962898380424</id><published>2011-08-13T08:46:00.001-07:00</published><updated>2011-08-13T08:48:37.843-07:00</updated><title type='text'>Lying</title><content type='html'>&lt;p&gt;Note that venerable proverb: Children and fools _always_ speak the truth. The deduction is plain --adults and wise persons _never_ speak it. Parkman, the historian, says, &amp;quot;The principle of truth may itself be carried into an absurdity.&amp;quot; In another place in the same chapters he says, &amp;quot;The saying is old that truth should not be spoken at all times; and those whom a sick conscience worries into habitual violation of the maxim are imbeciles and nuisances.&amp;quot; It is strong language, but true. None of us could _live_ with an habitual truth-teller; but thank goodness none of us has to. An habitual truth-teller is simply an impossible creature; he does not exist;he never has existed. Of course there are people who _think_ they never lie, but it is not so--and this ignorance is one of the very things that shame our so-called civilization. Everybody lies--every day;every hour; awake; asleep; in his dreams; in his joy; in his mourning; if he keeps his tongue still, his hands, his feet, his eyes, his attitude, will convey deception--and purposely. &lt;/p&gt;  &lt;p&gt;- Mark Twain&lt;/p&gt;  &lt;p&gt;&lt;a href="http://grammar.about.com/od/60essays/a/lyingessay.htm"&gt;http://grammar.about.com/od/60essays/a/lyingessay.htm&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-8973073962898380424?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/8973073962898380424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/08/lying.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8973073962898380424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8973073962898380424'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/08/lying.html' title='Lying'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5366130869773201379</id><published>2011-08-03T10:02:00.001-07:00</published><updated>2011-08-03T10:04:44.990-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Command Line'/><title type='text'>Dealing with MySql  passwords</title><content type='html'>&lt;p&gt;1. If the current root password needs to be changed &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#800000"&gt;mysqladmin -&lt;strong&gt;u&lt;/strong&gt; root -&lt;strong&gt;p&lt;/strong&gt;currentpassword password newpassword&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;2. To Setup a root password, if a password was not setup&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#800000"&gt;mysqladmin &lt;strong&gt;-u&lt;/strong&gt; root password NEWPASSWORD&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;3. Changing the old password by using sql commands&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;In mysql, user data is kept in the &lt;strong&gt;user&lt;/strong&gt; table of &lt;strong&gt;mysql&lt;/strong&gt; database. Hence it is&amp;#160; possible to directly update or change passwords for users.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Step1. Login to db.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000"&gt;mysql –u root –p&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Step2. Use mysql db&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000"&gt;mysql&amp;gt; use mysql;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Step3. Change password.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000"&gt;mysql&amp;gt; update user set password=PASSWORD(&amp;quot;newpass&amp;quot;) where User='root';&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Step4. Reload privileges&lt;/font&gt;&lt;/p&gt;  &lt;pre&gt;&lt;font color="#800000" face="Georgia"&gt;mysql&amp;gt; flush privileges;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5366130869773201379?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5366130869773201379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/08/dealing-with-mysql-passwords.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5366130869773201379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5366130869773201379'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/08/dealing-with-mysql-passwords.html' title='Dealing with MySql  passwords'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-2645231412664227823</id><published>2011-08-02T09:27:00.001-07:00</published><updated>2011-08-02T09:27:18.344-07:00</updated><title type='text'>Pride</title><content type='html'>&lt;h4 align="center"&gt;Here lies Jan Smith,   &lt;br /&gt;Wife of Thomas Smith, Marble Cutter.    &lt;br /&gt;This monument was erected by her    &lt;br /&gt;husband as a tribute to her memory    &lt;br /&gt;and a specimen of his work.    &lt;br /&gt;Monuments of this same style are    &lt;br /&gt;two hundred and fifty dollars.&lt;/h4&gt;  &lt;pre&gt;          epitaph composed by a marble cutter&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-2645231412664227823?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/2645231412664227823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/08/pride.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2645231412664227823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2645231412664227823'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/08/pride.html' title='Pride'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-7445443523605819462</id><published>2011-07-31T10:09:00.001-07:00</published><updated>2011-07-31T10:18:31.518-07:00</updated><title type='text'>How to write a custom registry handler to handle associations</title><content type='html'>&lt;p&gt;WSO2 Registry is a content repository which provides set of abstractions over a raw relational db. Registry provides a rich set of features for storing, managing and finding resources/content. However, sometimes, one have to go beyond existing default functionality to implement custom behavior to suite specific requirements. Handlers and Filters are such an extension point of registry which allows users to implement customizations by write small about of code.&lt;/p&gt;  &lt;p&gt;A handler is written by extending the Handler class and overriding its necessary methods. Custom handler is registered with the registry by putting an entry in the registry.xml&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div id="codeSnippet" class="csharpcode"&gt;     &lt;div&gt;       &lt;div id="codeSnippetWrapper"&gt;         &lt;div id="codeSnippetWrapper"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CustomHandler &lt;span style="color: #0000ff"&gt;extends&lt;/span&gt; Handler {            &lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; addAssociation(RequestContext requestContext) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; RegistryException {}            &lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; removeAssociation(RequestContext requestContext) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; RegistryException{}            &lt;br /&gt;}&lt;/div&gt;       &lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt;    &lt;div id="codeSnippet" class="csharpcode"&gt;     &lt;p&gt;&amp;lt;handler&amp;#160; class=&amp;quot;org.wso2.carbon.regisry.samples.handler.CustomHandler&amp;quot;&amp;gt;       &lt;br /&gt;&amp;lt;filter class=&amp;quot;org.wso2.carbon.registry.samples.handler.CustomMediaTypeMatcher&amp;quot;&amp;gt;        &lt;br /&gt;&amp;lt;property name=&amp;quot;mediaType&amp;quot;&amp;gt;mytype&amp;lt;/property&amp;gt;        &lt;br /&gt;&amp;lt;/filter&amp;gt;        &lt;br /&gt;&amp;lt;/handler&amp;gt; &lt;/p&gt;      &lt;p&gt;In order to invoke our CustomHandler, we have defined a custom media type and a CustomMediaTypeMatcher class. CustomMediaTypeMatcher class should extend the MediaTypeMatcher class.&amp;#160; &lt;/p&gt;      &lt;p&gt;When a resource with media type mytype is added to the registry, associated registry filter classes will be called to perform an evaluation and based on its result, associated handlers will be invoked.&lt;/p&gt;      &lt;p&gt; In our scenario, we want to invoke the methods addAssociation, and removeAssocation when a resource is associated with a resource which has the media type “mytype”. The code sample for the CustomMediaTypeMatcher class to handle it is shown below. &lt;/p&gt;      &lt;p&gt;public class CustomMediaTypeMatcher extends MediaTypeMatcher{       &lt;br /&gt;public boolean handleAddAssociation(RequestContext requestContext)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throws RegistryException {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Resource resource = requestContext.getRepository().get(requestContext.getSourcePath());        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (resource != null) {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String mType = resource.getMediaType();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return mType != null &amp;amp;&amp;amp; (invert != mType.equals(getMediaType()));        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return false;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;      &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; public boolean handleRemoveAssociation(RequestContext requestContext)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throws RegistryException {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Resource resource = requestContext.getRepository().get(requestContext.getSourcePath());        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (resource != null) {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String mType = resource.getMediaType();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return mType != null &amp;amp;&amp;amp; (invert != mType.equals(getMediaType()));        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return false;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;}&lt;/p&gt;   &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/5702309079039458297-7445443523605819462?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/7445443523605819462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/how-to-write-custom-registry-handler_31.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7445443523605819462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7445443523605819462'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/how-to-write-custom-registry-handler_31.html' title='How to write a custom registry handler to handle associations'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-239095135276934631</id><published>2011-07-31T09:40:00.001-07:00</published><updated>2011-07-31T10:27:51.227-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Insperation'/><category scheme='http://www.blogger.com/atom/ns#' term='Happiness'/><title type='text'>Happiness and Sadness</title><content type='html'>&lt;p&gt;&lt;strong&gt;Types of Happiness: Emotion and Sentiment&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;It is not easy to find happiness in ourselves, and impossible to find it elsewhere.      &lt;br /&gt;&lt;/em&gt;—Agnes Repplier&lt;/p&gt;  &lt;p&gt;&lt;em&gt;What do you take me for, an idiot?      &lt;br /&gt;&lt;/em&gt;—General Charles de Gaulle, when a journalist asked him if he was happy.&lt;/p&gt;  &lt;p&gt;A distinction can be made between two major types of happiness. A long term sentiment of happiness (flourishing, well-being) and a short term emotion of happiness ( Joy, satisfaction).&lt;/p&gt;  &lt;p&gt;As an emotion, happiness is a short-term state of pleasure or satisfaction occurring as a result of ( real or imaginary ) positive changes. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;A steady diet of simple pleasures will keep you above your set point. Find the small things that you know give you a little high—a good meal, working in the garden, time with friends—and sprinkle your life with them. In the long run, that will leave you happier than some grand achievement that gives you a big lift for a while. - David Lykken&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;It was found that those people who are relatively the happiest now will be the happiest ten years from now, despite day to-day fluctuations.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Determinants of Happiness&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;It is pretty hard to tell what does bring happiness; poverty and wealth have both failed.      &lt;br /&gt;&lt;/em&gt;—Kin Hubbard     &lt;br /&gt;&lt;em&gt;We are no longer happy as soon as we wish to be happier.      &lt;br /&gt;—Walter Savage Landor&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Happiness can be experienced as a result of being focus on an activity and not the result. Happiness is then to be found in activities we value in themselves.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;quot;It's the hunt—not the money—that makes my blood race; after all, you can only sleep in one bed at a time, and drive one car at a time” &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;- Chris Verbiski&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Happiness depends on the way we act than the specific result of our activities. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Happiness “arises more from the pursuit than from the attainment of any end      &lt;br /&gt;whatever”. It &amp;quot;depends more on the degree in which our minds are properly       &lt;br /&gt;employed, than it does on the circumstances in which we are destined to act, on the materials which are placed in our hands, or the tools with which we are furnished.&amp;quot;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Linking happiness to an attainment of goal results in unhappiness than happiness and in the end when the goal is achieved, we may not actually enjoy it as much as expected. It may be due to the fact that original circumstances may have changed by the time achievement is obtained or the expectation and reality gap.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;“There are two tragedies in life. One is not to get your heart's desire. The other is to get it&lt;/em&gt;” - George Bernard Shaw&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Post coitum omne animal triste est —&amp;quot;After sexual intercourse every animal is sad&amp;quot;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Maintaining Long-Term Happiness&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Happiness is not a state to arrive at, but a manner of traveling&lt;/em&gt;.     &lt;br /&gt;—Margaret Lee Runbeck&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The happiness of most people we know is not ruined by great catastrophes or fatal errors, but by the repetition of slowly destructive little things.      &lt;br /&gt;&lt;/em&gt;—Ernest Dimnet&lt;/p&gt;  &lt;p align="left"&gt;Dealing with the baseline (expectation)&amp;#160; and reality (current situation) gap can be done by (a)&amp;#160; eliminating the gap by changing the baseline or reality (b) coping with the gap by changing our attitude toward it. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sadness      &lt;br /&gt;&lt;/strong&gt;&lt;em&gt;One can endure sorrow alone, but it takes two to be glad.      &lt;br /&gt;—Elbert Hubbard       &lt;br /&gt;It is our job to make women unhappy with what they have.       &lt;br /&gt;—B. Earl Puckett, an advertiser&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Sadness confirms our appraisal of things as valuable; hence it may happen that we take pride in our ability to feel sadness. &lt;/p&gt;  &lt;p&gt;“&lt;em&gt;When it gets dark enough you can see the stars&lt;/em&gt;”&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Grief      &lt;br /&gt;&lt;/strong&gt;&lt;em&gt;Let us so live that when we come to die, even the undertaker will be sorry.      &lt;br /&gt;—Mark Twain&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Grief is the most profound type of sadness. It is concerned with death, the most substantial misfortune we encounter: it expresses the irrevocable loss of someone very close and of great value to us.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Moral Value&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Happiness, it is said, is seldom found by those who seek it, and never by those      &lt;br /&gt;who seek it for themselves.       &lt;br /&gt;—F. Emerson Andrews&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Thousands of candles can be lighted from a single candle, and the life of the candle will not be shortened. Happiness never decreases by being shared.      &lt;br /&gt;—Buddha&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Sorrow makes men sincere.      &lt;br /&gt;—Henry Ward Beecher       &lt;br /&gt;If a way to the better there be, it lies in taking a full look at the worst.       &lt;br /&gt;—Thomas Hardy&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Happiness is often achieved through positive illusions; in sadness, reality is better known. Sadness is unpleasant, but it is morally valuable for committing ourselves to the more profound moral obligations. Happiness is also morally valuable but for different reasons: its main value is in helping us to perform the &amp;quot;small&amp;quot; everyday moral deeds.&lt;/p&gt;  &lt;p&gt;Source: &lt;a href="http://books.google.com/books/about/The_Subtlety_of_Emotions.html?id=S0rkL_Unl-cC"&gt;The Subtlety of Emotions&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-239095135276934631?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/239095135276934631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/happiness-and-sadness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/239095135276934631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/239095135276934631'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/happiness-and-sadness.html' title='Happiness and Sadness'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-6929798529882620724</id><published>2011-07-21T11:55:00.001-07:00</published><updated>2011-07-21T21:56:42.333-07:00</updated><title type='text'>Delivering Happiness</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/---rrArSqPwM/Tih13AO6HLI/AAAAAAAAAb0/Sjj6iqQEwKU/s1600-h/Art_P229%25255B3%25255D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Art_P229" border="0" alt="Art_P229" src="http://lh3.ggpht.com/-oN4KSMNOJdA/Tih14nmUgtI/AAAAAAAAAb4/F3tgxmQnh7U/Art_P229_thumb%25255B1%25255D.jpg?imgmax=800" width="407" height="342" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Most common belief is that “&lt;a&gt;&lt;em&gt;When I get ___, I will be happy,&lt;/em&gt; or &lt;em&gt;When I achieve ___, I will be happy.&lt;/em&gt;&lt;/a&gt;”. But the reality is that, happiness gained in such manner tend do disappear very quickly. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Happiness Framework.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a&gt;&lt;em&gt;Happiness is really just about four things: perceived control, perceived progress, connectedness (number and depth of your &lt;/em&gt;&lt;/a&gt;&lt;a&gt;&lt;em&gt;relationships), and vision/meaning (being part of something bigger than yourself).&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;#160;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;a href="http://lh3.ggpht.com/-wp1_MY5vUDI/Tih16OeeatI/AAAAAAAAAb8/8u0E1tMpbjk/s1600-h/Art_P233%25255B3%25255D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Art_P233" border="0" alt="Art_P233" src="http://lh6.ggpht.com/-IBKPtSpWfVw/Tih176CuR3I/AAAAAAAAAcA/EspJAfVqByY/Art_P233_thumb%25255B1%25255D.jpg?imgmax=800" width="418" height="351" /&gt;&lt;/a&gt; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;em&gt;&lt;/em&gt;  &lt;p&gt;Maslow’s Hierarchy.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-JFj9WerCuJY/Tih2J96l7HI/AAAAAAAAAcE/wMCgoGfoE64/s1600-h/Art_P236%25255B5%25255D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Art_P236" border="0" alt="Art_P236" src="http://lh3.ggpht.com/-rg-NWWRtCW4/Tih2LtEoKiI/AAAAAAAAAcI/KuI8M2TYLOs/Art_P236_thumb%25255B3%25255D.jpg?imgmax=800" width="454" height="350" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Self-actualization"&gt;Self actualization&lt;/a&gt; is the ultimate form of happiness according to Maslow’s hierarchy.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;a href="http://lh3.ggpht.com/-tS-PIQ1Y3LY/Tih2NA6W55I/AAAAAAAAAcM/iP9s4VKXPkM/s1600-h/Art_P237%25255B4%25255D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Art_P237" border="0" alt="Art_P237" src="http://lh4.ggpht.com/-72xhnIofbuA/Tih2OktBQLI/AAAAAAAAAcQ/GpxP_Ghmy7g/Art_P237_thumb%25255B2%25255D.jpg?imgmax=800" width="450" height="348" /&gt;&lt;/a&gt; &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h5&gt;Pleasure&lt;/h5&gt;  &lt;p&gt;&lt;a&gt;The pleasure type of happiness is about always chasing the next high&lt;/a&gt;.&lt;a&gt;As soon as the source of stimuli goes away, people’s happiness levels drop immediately&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;Passion&lt;/h5&gt;  &lt;p&gt;The passion type of happiness is also known as &lt;a href="http://en.wikipedia.org/wiki/Flow_(psychology)"&gt;flow&lt;/a&gt;, where peak performance meets peak engagement, and time flies by.&lt;/p&gt;  &lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;Higher Purpose&lt;/h5&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The higher-purpose type of happiness is about being part of something bigger than yourself that has meaning to you. Research has shown that of the three types of happiness, this is the longest lasting. What I find interesting is that many people go through life chasing after the pleasure type of happiness, thinking that once they are able to sustain that, then they will worry about the passion and, if they get around to it, look for their higher purpose.&lt;/p&gt;  &lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Start asking yourself the right questions.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Are you working toward maximizing your happiness each day?&lt;/li&gt;    &lt;li&gt;What is the net effect of your existence on the total amount of happiness in the world each day?&lt;/li&gt;    &lt;li&gt;What are your values?&lt;/li&gt;    &lt;li&gt;What are you passionate about?&lt;/li&gt;    &lt;li&gt;What inspires you?&lt;/li&gt;    &lt;li&gt;What is your goal in life?&lt;/li&gt;    &lt;li&gt;What are your company’s values?&lt;/li&gt;    &lt;li&gt;What is your company’s higher purpose?&lt;/li&gt;    &lt;li&gt;What is &lt;em&gt;your&lt;/em&gt; higher purpose?&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;strong&gt;When you walk with purpose, you collide with destiny&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;  &lt;p align="center"&gt;—BERTICE BERRY&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Source:&lt;a href="http://en.wikipedia.org/wiki/Delivering_Happiness"&gt;http://en.wikipedia.org/wiki/Delivering_Happiness&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And read &lt;a href="http://zenhabits.net/happy/"&gt;how to be happy&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-6929798529882620724?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/6929798529882620724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/delivering-happiness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6929798529882620724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6929798529882620724'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/delivering-happiness.html' title='Delivering Happiness'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-oN4KSMNOJdA/Tih14nmUgtI/AAAAAAAAAb4/F3tgxmQnh7U/s72-c/Art_P229_thumb%25255B1%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1433246508655810801</id><published>2011-07-19T10:26:00.001-07:00</published><updated>2011-07-19T10:27:54.614-07:00</updated><title type='text'>PERSUASION PRINCIPLES</title><content type='html'>&lt;p&gt;&lt;strong&gt;LIKING:      &lt;br /&gt;&lt;/strong&gt;People like those like them, who like them.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;To influence people, win friends, through: Similarity:Create early bonds with new peers, bosses, and direct reports by informally discovering common interests—you’ll establish goodwill and trustworthiness.Praise:Charm and disarm.Make positive remarks about others—you’ll generate more willing compliance&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RECIPROCITY:      &lt;br /&gt;&lt;/strong&gt;People repay in kind.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Give what you want to receive. Lend a staff member to a colleague who needs help; you’ll get his help later.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SOCIAL PROOF:      &lt;br /&gt;&lt;/strong&gt;People follow the lead of similar others.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Use peer power to influence horizontally, not vertically; e.g., ask an esteemed “old timer” to support your new initiative if other veterans resist.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;CONSISTENCY:&lt;/strong&gt;     &lt;br /&gt;People fulfill written, public, and voluntary commitments.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Make others’ commitments active, public, and      &lt;br /&gt;voluntary. If you supervise an employee who should submit reports on time, get that understanding in writing (a memo); make the commitment public (note colleagues’ agreement with the memo); and link the commitment to the employee’s values (the       &lt;br /&gt;impact of timely reports on team spirit).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;AUTHORITY:      &lt;br /&gt;&lt;/strong&gt;People defer to experts who provide shortcuts to decisions requiring specialized information.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Don’t assume your expertise is self-evident. Instead, establish your expertise before doing business with new colleagues or partners; e.g., in conversations     &lt;br /&gt;before an important meeting, describe how you solved a problem similar to the one on the agenda.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SCARCITY:     &lt;br /&gt;&lt;/strong&gt;People value what’s scarce.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Use exclusive information to persuade. Influence and rivet key players’ attention by saying, for example:“…Just got this information today.It &lt;/em&gt;&lt;em&gt;won’t be distributed until next week.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Source : Harnessing the Science of Persuasion by &lt;a href="http://en.wikipedia.org/wiki/Robert_Cialdini"&gt;Robert B. Cialdini&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1433246508655810801?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1433246508655810801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/persuasion-principles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1433246508655810801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1433246508655810801'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/persuasion-principles.html' title='PERSUASION PRINCIPLES'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4536136256733519248</id><published>2011-07-07T09:14:00.001-07:00</published><updated>2011-07-07T09:14:23.271-07:00</updated><title type='text'>Lessons learned from Bill Gates</title><content type='html'>&lt;p&gt;&lt;a title="http://sourcesofinsight.com/2011/01/19/lessons-learned-from-bill-gates/" href="http://sourcesofinsight.com/2011/01/19/lessons-learned-from-bill-gates/"&gt;http://sourcesofinsight.com/2011/01/19/lessons-learned-from-bill-gates/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What i really liked is Bill Gate’s 11 Rules of life.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;Rule 1: Life is not fair&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Rule 2: The world won’t care about your self-esteem.&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Rule 3: You will NOT make $60,000 a year right out of high school. &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Rule 4: If you think your teacher is tough, wait till you get a boss.&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Rule 5: Flipping burgers is not beneath your dignity.&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Rule 6: If you mess up, it’s not your parents’ fault, so don’t whine about your mistakes, learn from them.&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Rule 7: Before you were born, your parents weren’t as boring as they are now.&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Rule 8: Your school may have done away with winners and losers, but life HAS NOT.&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Rule 9: Life is not divided into semesters.&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Rule 10: Television is NOT real life. &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Rule 11: Be nice to nerds.&lt;/em&gt;&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/5702309079039458297-4536136256733519248?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4536136256733519248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/lessons-learned-from-bill-gates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4536136256733519248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4536136256733519248'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/lessons-learned-from-bill-gates.html' title='Lessons learned from Bill Gates'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1180242177140927772</id><published>2011-07-01T10:54:00.001-07:00</published><updated>2011-07-01T10:54:38.847-07:00</updated><title type='text'>Toss Your Expectations Into the Ocean</title><content type='html'>&lt;p&gt;‘Act without expectation.’ &lt;strong&gt;~Lao Tzu&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://zenhabits.net/ah/"&gt;http://zenhabits.net/ah/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1180242177140927772?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1180242177140927772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/toss-your-expectations-into-ocean.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1180242177140927772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1180242177140927772'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/07/toss-your-expectations-into-ocean.html' title='Toss Your Expectations Into the Ocean'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-308142256614554764</id><published>2011-06-27T11:01:00.001-07:00</published><updated>2011-06-27T11:01:43.524-07:00</updated><title type='text'>Emotional Intelligence</title><content type='html'>&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e4dafa55-ddf0-422c-b7b0-4d0f2d795aac" class="wlWriterEditableSmartContent"&gt;&lt;div id="66cf4902-5d1a-454f-a2b7-4239a68fd8d0" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=-hoo_dIOP8k" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/-w7_QCcN36RY/TgjFheDBrbI/AAAAAAAAAbw/pzKYeXQFBSQ/video3f42f6514e41%25255B3%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('66cf4902-5d1a-454f-a2b7-4239a68fd8d0'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/-hoo_dIOP8k&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/-hoo_dIOP8k&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&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/5702309079039458297-308142256614554764?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/308142256614554764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/emotional-intelligence.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/308142256614554764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/308142256614554764'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/emotional-intelligence.html' title='Emotional Intelligence'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-w7_QCcN36RY/TgjFheDBrbI/AAAAAAAAAbw/pzKYeXQFBSQ/s72-c/video3f42f6514e41%25255B3%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-8105349671362061094</id><published>2011-06-22T11:52:00.001-07:00</published><updated>2011-06-22T11:52:46.454-07:00</updated><title type='text'>Banksy’s Graffiti Art</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/-eeeliyB4QDE/TgI54xBLIjI/AAAAAAAAAbg/qTRJ1KkgQtw/s1600-h/mondays7.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="mondays" border="0" alt="mondays" src="http://lh6.ggpht.com/-MO16ORVtK_k/TgI571a8b0I/AAAAAAAAAbk/LSfhhd8JHQo/mondays_thumb5.jpg?imgmax=800" width="631" height="620" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-ASq9YSd8suw/TgI59br5hdI/AAAAAAAAAbo/AIe665FsUgk/s1600-h/3xsculpt4.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="" border="0" alt="" src="http://lh3.ggpht.com/-RW38ogBlDA8/TgI5_PiARJI/AAAAAAAAAbs/LysPgRk97xo/3xsculpt_thumb2.jpg?imgmax=800" width="625" height="424" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Find more of it at &lt;a href="http://banksy.co.uk/"&gt;http://banksy.co.uk/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-8105349671362061094?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/8105349671362061094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/banksys-graffiti-art.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8105349671362061094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8105349671362061094'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/banksys-graffiti-art.html' title='Banksy’s Graffiti Art'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-MO16ORVtK_k/TgI571a8b0I/AAAAAAAAAbk/LSfhhd8JHQo/s72-c/mondays_thumb5.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1036656876138358898</id><published>2011-06-18T21:25:00.001-07:00</published><updated>2011-06-18T21:25:44.208-07:00</updated><title type='text'>Great site with quality content</title><content type='html'>&lt;p&gt;&lt;a href="http://www.businessballs.com/"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="businessballs-poster" border="0" alt="businessballs-poster" src="http://lh3.ggpht.com/-slT_a7D4NA8/Tf16Rg_jd3I/AAAAAAAAAbY/X2n5JqSxL6g/businessballs-poster%25255B3%25255D.jpg?imgmax=800" width="244" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1036656876138358898?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1036656876138358898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/great-site-with-quality-content.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1036656876138358898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1036656876138358898'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/great-site-with-quality-content.html' title='Great site with quality content'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-slT_a7D4NA8/Tf16Rg_jd3I/AAAAAAAAAbY/X2n5JqSxL6g/s72-c/businessballs-poster%25255B3%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5517238834582062411</id><published>2011-06-18T21:10:00.001-07:00</published><updated>2011-06-18T21:10:13.016-07:00</updated><title type='text'>You’re a Good Little Slave!</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;em&gt;If you knew with certainty that you would be dead exactly one year from today, would you continue to do the same things each day that you are doing right now?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lifestyleignition.com/2010/05/you%E2%80%99re-a-good-little-slave/"&gt;http://www.lifestyleignition.com/2010/05/you%E2%80%99re-a-good-little-slave/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5517238834582062411?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5517238834582062411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/youre-good-little-slave.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5517238834582062411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5517238834582062411'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/youre-good-little-slave.html' title='You’re a Good Little Slave!'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4626574250097024347</id><published>2011-06-17T11:20:00.001-07:00</published><updated>2011-06-17T11:20:52.606-07:00</updated><title type='text'>Servant Leadership</title><content type='html'>&lt;p&gt;Extract from Wikipedia.&lt;/p&gt;  &lt;p&gt;10 characteristics that are central to the development of a servant leader&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Listening"&gt;Listening&lt;/a&gt;: Traditionally, and also in servant leadership, managers are required to have communication skills as well as the competence to make decisions. A servant leader has the motivation to listen actively to his fellow men and supports them in decision identification. This applies particularly to pay attention to unspoken. This means relying on his inner voice and find out what the body, mind and spirit are communicating.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Servant_leadership#cite_note-3"&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Empathy"&gt;Empathy&lt;/a&gt;: A servant leader attempts to understand and empathize with others. Workers may be considered not only as employees, but also as people who need respect and appreciation for their personal development. As a result, leadership is seen as a special type of human work, which ultimately generates a competitive advantage..&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Servant_leadership#cite_note-4"&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Healing"&gt;Healing&lt;/a&gt;: A great strength of a Servant Leader is the ability for healing one’s self and others. A servant leader tries to help people solving their problems and conflicts in relationships, because he wants to develop the skills of each individual.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Servant_leadership#cite_note-5"&gt;[6]&lt;/a&gt;&lt;/sup&gt; This leads to the formation of a business culture, in which the working environment is characterized by dynamic, fun and no fear from failure.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Servant_leadership#cite_note-6"&gt;[7]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Awareness"&gt;Awareness&lt;/a&gt;: A servant leader needs to gain general awareness and especially self-awareness. He has the ability to view situations from a more integrated, holistic position. As a result, he gets a better understanding about ethics and values.&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Persuasion"&gt;Persuasion&lt;/a&gt;: A Servant Leader does not take advantage of his power and his status by coercing compliance; he rather tries to convince them. This element distinguishes servant leadership most clearly from traditional, authoritarian models and can be traced back to the religious views of the inventor Robert Greenleaf.&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;Conceptualization: A servant leader thinks beyond day-to-day realities. That means he has the ability to see beyond the limits of the operating business and also focuses on long term operating goals.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Servant_leadership#cite_note-7"&gt;[8]&lt;/a&gt;&lt;/sup&gt; A Leader constructs a personal vision that only he can develop by reflecting on the meaning of life. As a result, he derives specific goals and implementation strategies.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Servant_leadership#cite_note-8"&gt;[9]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Foresight"&gt;Foresight&lt;/a&gt;: Foresight is the ability to foresee the likely outcome of a situation. It enables the servant leader to learn about the past and to achieve a better understanding about the current reality. It also enables to identify consequences about the future. This characteristic is closely related to conceptualization. In contrast to the other characteristics, which can be consciously developed, foresight is a characteristic which one may be born.&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Stewardship"&gt;Stewardship&lt;/a&gt;: CEOs, staffs and trustees have the task to hold their institution in trust for the greater good of society. In conclusion, servant leadership is seen as an obligation to help and serve others. Openness and persuasion are more important than control.&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;Commitment to the growth of people: A servant leader is convinced that people have an intrinsic value beyond their contributions as workers. Therefore, he should nurture the personal, professional and spiritual growth of employees. For example he spends money for the personal and professional development of the people as well as having a personal interest in the ideas form everyone and involving workers in decisions. making.&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;Building community: A servant leader identifies means to build a strong community within his organization and wants to develop a true community among businesses and institutions.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Servant_leadership#cite_note-9"&gt;[10]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Servant_leadership#Concept_of_Servant_Leadership"&gt;http://en.wikipedia.org/wiki/Servant_leadership#Concept_of_Servant_Leadership&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4626574250097024347?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4626574250097024347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/servant-leadership.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4626574250097024347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4626574250097024347'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/servant-leadership.html' title='Servant Leadership'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4457010606173816171</id><published>2011-06-17T10:49:00.001-07:00</published><updated>2011-06-17T10:49:34.713-07:00</updated><title type='text'>How to correct connection refused exception with port 1433 on MSSQL server</title><content type='html'>&lt;p&gt;On the SQL Server network configuration manager, select protocols for SQL…. On the TCP/IP option, click and enable it if it is disabled. Note that Listen ALL option is disabled.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-h40ZQOcKWpQ/TfuTfuCKYtI/AAAAAAAAAbI/yh8LYNHN7Ko/s1600-h/image%25255B6%25255D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-G78XcQjBPD4/TfuTneLzS1I/AAAAAAAAAbM/JF_XJ4mpnF8/image_thumb%25255B2%25255D.png?imgmax=800" width="307" height="338" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;On the IP Address tab, &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-ykIeMq9QzwU/TfuTpJcKIOI/AAAAAAAAAbQ/dW1u3-88d_M/s1600-h/image%25255B10%25255D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-v-uQqI5hK2k/TfuTrbt7IdI/AAAAAAAAAbU/c0Whcxjjp7w/image_thumb%25255B4%25255D.png?imgmax=800" width="312" height="344" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;select the ip where you want to listen to port 1433 and make sure its enabled, with the TCP port configured to 1433 as shown in the image. That’s it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4457010606173816171?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4457010606173816171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/how-to-correct-connection-refused.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4457010606173816171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4457010606173816171'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/how-to-correct-connection-refused.html' title='How to correct connection refused exception with port 1433 on MSSQL server'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-G78XcQjBPD4/TfuTneLzS1I/AAAAAAAAAbM/JF_XJ4mpnF8/s72-c/image_thumb%25255B2%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-3944297086361356482</id><published>2011-06-17T02:04:00.001-07:00</published><updated>2011-06-18T20:31:32.397-07:00</updated><title type='text'>How to migrate an MSSQL Server Database from one location to another</title><content type='html'>&lt;p&gt;A database in MSSQL server is stored in two files, namely .ldf file and a .mdf file. In case of MSSQL Server 2008 , these files are by default located at C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA directory.&lt;/p&gt;  &lt;p&gt;In order to move these files from one MSSQL server instance to another MSSQL instance, we need to copy these file from one location and paste at another location. For that, first we should detach the db. It can be done from the management studio using the following commands.&lt;/p&gt;  &lt;p&gt;Assuming that the database name is &lt;strong&gt;mydb &lt;/strong&gt;following sql query will &lt;strong&gt;detach&lt;/strong&gt; the db from the server.&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;use master      &lt;br /&gt;go       &lt;br /&gt;alter database mydb set single_user with rollback immediate       &lt;br /&gt;alter database mydb set restricted_user with rollback immediate       &lt;br /&gt;go       &lt;br /&gt;exec sp_detach_db mydb       &lt;br /&gt;go&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now the data file and log file can be copied without issue to the destination. Now in order to re attach the database, use the following command.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;EXEC sp_attach_db @dbname = N'mydb',&amp;#160;&amp;#160;&amp;#160;&amp;#160; @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\mydb.mdf',&amp;#160;&amp;#160;&amp;#160;&amp;#160; @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\mydb_log.ldf'&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-3944297086361356482?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/3944297086361356482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/how-to-migrate-mssql-server-database.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3944297086361356482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3944297086361356482'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/06/how-to-migrate-mssql-server-database.html' title='How to migrate an MSSQL Server Database from one location to another'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4694786072896100599</id><published>2011-03-22T09:50:00.001-07:00</published><updated>2011-03-22T09:50:53.021-07:00</updated><title type='text'>How to setup MSSQL Server Express 2008</title><content type='html'>&lt;p&gt;I happened to install MSSQL server express and thought of writing down some useful tips.&lt;/p&gt;  &lt;p&gt;If you have Visual Studio 2008 installed on the system, you will need to install Visual Studio Service Pack1 before installing MSSQL Server Express. Once installed, next step is to login to the server using the SQL Server Management Studio. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Connecting to SQL Server using Management Studio.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Here are the steps to follow to connect to the server using management studio.&lt;/p&gt;  &lt;p&gt;1. Enable TCP/IP, Named Pipes&amp;#160; options for sql server using SQL Server configuration Manager.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/TYjSo0XMvxI/AAAAAAAAAaI/frM86m4G6Zg/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_honSoB4kSVs/TYjStenaDbI/AAAAAAAAAaM/-RXsCbrIb_Q/image_thumb%5B3%5D.png?imgmax=800" width="663" height="403" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/TYjSu5js91I/AAAAAAAAAaQ/uwHwKjogcYw/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_honSoB4kSVs/TYjSxnJBdfI/AAAAAAAAAaU/epvvUjSRTxM/image_thumb%5B1%5D.png?imgmax=800" width="385" height="424" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. Step 2&lt;/p&gt;  &lt;p&gt;Using the management studio, connect to the server.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/TYjS0LcjvNI/AAAAAAAAAaY/7xIclNt8lWQ/s1600-h/image%5B14%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_honSoB4kSVs/TYjS3dQTjXI/AAAAAAAAAac/dKYj2ebMDls/image_thumb%5B6%5D.png?imgmax=800" width="445" height="340" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For the server type, select Database Engine. For server name, you will need to specify the Computer Name(Host computer Name)\(Server Name) Or .\(Server Name). Otherwise you will get a nasty error message. For the authentication option, select Windows Authentication. Now, all is set to connect to the server.&amp;#160; If you forget to specify the Host name or use .\ in the Server name option, this is the error message you will get.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/TYjS5TURsZI/AAAAAAAAAag/Z69Jm0d56CY/s1600-h/image%5B19%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_honSoB4kSVs/TYjS8DHrQLI/AAAAAAAAAak/iT8lqYu7PM4/image_thumb%5B9%5D.png?imgmax=800" width="480" height="175" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Configuring SQL Server for Username/Password authentication ( Mixed mode ) &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In order to access the SQL Server programmatically, it should be configured for Mixed mode authentication. When configured for Mixed mode, SQL server allows login in to the server using SQL Server authentication ( Using a username, password ). &lt;/p&gt;  &lt;p&gt;First, we need to create a new user login, which will be granted with the SQL Server Authentication. For that, go to logins tab under security as shown below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_honSoB4kSVs/TYjS_FrJD_I/AAAAAAAAAao/wZ08TL6-FOQ/s1600-h/image%5B28%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_honSoB4kSVs/TYjTB6ndy5I/AAAAAAAAAas/bQnmeYcL84s/image_thumb%5B14%5D.png?imgmax=800" width="367" height="385" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Right click on the logins and select new login. Select SQL Server authentication option and specify the Login name and password.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/TYjTFOMKhyI/AAAAAAAAAaw/t-jXY2iq-iE/s1600-h/image%5B32%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_honSoB4kSVs/TYjTJBLNaNI/AAAAAAAAAa0/91oFGIuE_7o/image_thumb%5B16%5D.png?imgmax=800" width="389" height="350" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Under User Mapping option, you can select the databases, this login has access to. Under status option check whether login option is enabled. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_honSoB4kSVs/TYjTP0StRkI/AAAAAAAAAa4/xZmCTbpKVA0/s1600-h/image%5B42%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_honSoB4kSVs/TYjTVKKcHAI/AAAAAAAAAa8/ViNNTDe939g/image_thumb%5B22%5D.png?imgmax=800" width="431" height="389" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now you are ready to login to the SQL Server using SQL Server Authentication.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Configuring a listening port for SQL Server remote access.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In order to access SQL server programmatically, the server has to be listening on a port. Usually this port is 1433. however, when installing the SQL server, if you gave the server instance a name, it wont be listening on this port by default. Hence you need to configure it. &lt;/p&gt;  &lt;p&gt;Go to SQL Server configuration manager and select SQL server network configurations. Select the named SQL server instance which need to be configured for remote access. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/TYjTX6p0yKI/AAAAAAAAAbA/6r40cxXoJm4/s1600-h/image%5B40%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_honSoB4kSVs/TYjTab1BBHI/AAAAAAAAAbE/RGaj3S0ryw8/image_thumb%5B20%5D.png?imgmax=800" width="527" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Under Protocols, select TCP/IP and select the IP Addresses Tab. Now you can configure a given IP address and port for server to listen. Here, I am configuring the 127.0.0.1 for listening. On the enabled option, select yes. On the TCP Port option, specify the port. In this case, 1433. On the TCP Dynamic Ports option, if the value is 0 remove it and click ok. SQL server service should be restarted before you can access it though 1433 port.&lt;/p&gt;  &lt;p&gt;Now get a command line and check whether server is listening on port 1433 with command netstat –a. Alternatively you can use to telent as well. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4694786072896100599?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4694786072896100599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/03/how-to-setup-mssql-server-express-2008.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4694786072896100599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4694786072896100599'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/03/how-to-setup-mssql-server-express-2008.html' title='How to setup MSSQL Server Express 2008'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_honSoB4kSVs/TYjStenaDbI/AAAAAAAAAaM/-RXsCbrIb_Q/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-2840979011786355321</id><published>2011-02-13T09:49:00.001-08:00</published><updated>2011-02-13T09:49:24.392-08:00</updated><title type='text'>How to do a demo</title><content type='html'>&lt;p&gt;The key to a demo is to tell a story.&amp;#160; &lt;/p&gt;  &lt;p&gt;You need to put yourself into the “role” of a person using the product who has a problem that he or she is trying to solve.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.bothsidesofthetable.com/2009/06/10/doing-a-demo-vc-pitch-or-otherwise-part-5-in-vc-series/"&gt;http://www.bothsidesofthetable.com/2009/06/10/doing-a-demo-vc-pitch-or-otherwise-part-5-in-vc-series/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-2840979011786355321?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/2840979011786355321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/02/how-to-do-demo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2840979011786355321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2840979011786355321'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/02/how-to-do-demo.html' title='How to do a demo'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-932969310843219838</id><published>2011-02-12T04:54:00.001-08:00</published><updated>2011-02-12T04:54:29.198-08:00</updated><title type='text'>Never Eat Alone</title><content type='html'>&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:eb396cb0-91fe-4fc9-bab3-9c460d52dc00" class="wlWriterEditableSmartContent"&gt;&lt;div id="1bc1e343-2d74-4784-abad-2fa77cea3be8" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=E2yMpwPdIxU" target="_new"&gt;&lt;img src="http://lh6.ggpht.com/_honSoB4kSVs/TVaDAv2h0QI/AAAAAAAAAaA/a2pmcKusZyE/videofe39b22bbc49%5B3%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('1bc1e343-2d74-4784-abad-2fa77cea3be8'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/E2yMpwPdIxU&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/E2yMpwPdIxU&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&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/5702309079039458297-932969310843219838?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/932969310843219838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/02/never-eat-alone.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/932969310843219838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/932969310843219838'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/02/never-eat-alone.html' title='Never Eat Alone'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_honSoB4kSVs/TVaDAv2h0QI/AAAAAAAAAaA/a2pmcKusZyE/s72-c/videofe39b22bbc49%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-554782948515518817</id><published>2011-02-11T10:08:00.001-08:00</published><updated>2011-02-11T10:08:25.180-08:00</updated><title type='text'>Does your company value user experience</title><content type='html'>&lt;p&gt;&lt;a href="http://blog.pekpongpaet.com/2010/12/13/does-your-organization-value-user-experience/"&gt;http://blog.pekpongpaet.com/2010/12/13/does-your-organization-value-user-experience/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-554782948515518817?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/554782948515518817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/02/does-your-company-value-user-experience.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/554782948515518817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/554782948515518817'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/02/does-your-company-value-user-experience.html' title='Does your company value user experience'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-3288315790798032986</id><published>2011-02-09T10:28:00.001-08:00</published><updated>2011-02-09T10:28:53.251-08:00</updated><title type='text'>7 Sources of Innovation</title><content type='html'>&lt;p&gt;Peter Drucker, one of the greatest management thinkers from the last century, defined in his book “Innovation and Entrepreneurship” (1986) 7 classes of “OPPORTUNITIES”. He named these the &amp;quot;SOURCES OF INNOVATION&amp;quot;, namely:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;THE UNEXPECTED: An example of the unexpected is the development of Nutrasweet. A chemist developed a new chemical. Accidentally he got some of it in his mouth. To his surprise it tasted very sweet. This was the start of a development trajectory, that took many years before Nutrasweet was introduced by Searle into the market. &lt;/li&gt;    &lt;li&gt;INCONGRUITIES: Incongruities or conflicts between opposing functions, requirements or values may be the start of an innovation. For example the request for a small car with still enough space on the inside seems to be incongruent. This however was solved in a new design as the Smart. &lt;/li&gt;    &lt;li&gt;PROCESS NEEDS: An old proverb says that “necessity is the mother of invention”. In the old days of the US many unskilled immigrants from Europe arrived. They were peasants that lacked in skills for the manufacturing of sophisticated artifacts such as guns. In those days one made every component of these guns by hand. To let them fit to each other and work properly required high skills in manufacturing. By making machines more precise and introducing standardization of the artifacts one could produce thousands of components individually. The machine or gun could be assembled using arbitrarily with ever component from the stores. The individual tasks could easily be learned by the immigrants, without years of training to become an overall master. In this way they could profit maximally from the existing economies of scale and learning curve. &lt;/li&gt;    &lt;li&gt;INDUSTRY AND MARKET STRUCTURE: Industry markets and market structure may offer opportunity’s for new types of services. Outsourcing of activities such as maintenance of the IT infrastructure is an example. Other examples are the merging of industry’s such as for example the merging of the computer industry with consumer electronics or IT with business consulting services. The X box of Microsoft is just one example from many. &lt;/li&gt;    &lt;li&gt;DEMOGRAPHICS: Demographics have long been a major source of innovation creating opportunities for new types of products and services. Life style drugs such as Viagra are just examples where the growing group of elderly people who feel themselves still very healthy and who would like to enjoy life longer can conquer the effects of biological aging. &lt;/li&gt;    &lt;li&gt;CHANGES IN PERCEPTION: An example of changes in perception as source of innovation is the following. In older days health was seen as related to body mass, meaning fatter people were perceived as more healthy. In the last century this perception changed as a result of medical study’s that revealed that overweight was a risk factor. Since that time many light products have come to the market. Many substitutes of sugar have been developed such as Nutrasweet. Also substitutes of fat have been developed although these have not been successfully introduced into the market yet. &lt;/li&gt;    &lt;li&gt;NEW KNOWLEDGE: Last but not least new knowledge has produced many opportunities for new products. The emergence of micro-electronics and new programming methods and tools, biotechnology, nano-technology etc have been the main motors of innovation and progress over the last decades . This will probably continue for the coming decades”. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://www.innovationmanagement.org/Wiki/index.php?title=7_Sources_of_Innovation_(Peter_Drucker)"&gt;http://www.innovationmanagement.org/Wiki/index.php?title=7_Sources_of_Innovation_(Peter_Drucker)&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-3288315790798032986?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/3288315790798032986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/02/7-sources-of-innovation.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3288315790798032986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3288315790798032986'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2011/02/7-sources-of-innovation.html' title='7 Sources of Innovation'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-6641931364493238373</id><published>2010-12-30T23:08:00.001-08:00</published><updated>2010-12-30T23:14:39.046-08:00</updated><title type='text'>How to statically serve a wsdl with WSF/PHP.</title><content type='html'>&lt;p&gt;WSF/PHP has two modes of operations. When using wsdl mode, you will always start with a wsdl and hence, that wsdl will be served for ?wsdl request. On the other hand, you can write a service with annotations and the corresponding wsdl will be generated for you. However, when using the xml-in-out mode with WSMessage object as the input and output parameter for the operation, its better to be able to serve a wsdl that is saved in the server since auto generated wsdl’s schema might not match the operation accepted xml.&lt;/p&gt;  &lt;p&gt;Getting this done is quite simple. all you need to do is to set the option “&lt;u&gt;&lt;strong&gt;omitProcesswsdl&lt;/strong&gt;&lt;/u&gt;” in &lt;strong&gt;WSService&lt;/strong&gt; operations array to true.&amp;#160; &lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="676"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="674"&gt;         &lt;p&gt;$opParams = array(&amp;quot;testFunction&amp;quot;=&amp;gt;&amp;quot;WSMESSAGE&amp;quot;); &lt;/p&gt;          &lt;p&gt;$service = new WSService(array(&amp;#160; &amp;quot;wsdl&amp;quot;=&amp;gt;&amp;quot;mystaticwsdl.wsdl&amp;quot;,            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;omitProcesswsdl&amp;quot;=&amp;gt;TRUE,             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;opParams&amp;quot;=&amp;gt;$opParams,             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;operations&amp;quot; =&amp;gt; $operations,             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;actions&amp;quot;=&amp;gt;$actions );&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;div&gt;By specifying omitProcesswsdl, you can prevent WSF/PHP from trying to process the operation as a WSDL Mode operation. Also note that you would need to set your function as of type WSMESSAGE by using opParams. This is a work about which is not required for current svn trunk. &lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&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/5702309079039458297-6641931364493238373?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/6641931364493238373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/12/how-to-statically-serve-wsdl-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6641931364493238373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6641931364493238373'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/12/how-to-statically-serve-wsdl-with.html' title='How to statically serve a wsdl with WSF/PHP.'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1915818416633379835</id><published>2010-12-14T01:10:00.001-08:00</published><updated>2010-12-14T01:10:39.349-08:00</updated><title type='text'>Running Objective C code on Windows 7</title><content type='html'>&lt;p&gt;If you are on Windows and want to run object c code, there are few Objective C&amp;#160; compilers available for windows. One such implementation of Objective C spec is&amp;#160; &lt;a href="http://www.gnustep.org/"&gt;GNUstep&lt;/a&gt; project which has implementations for a number of operating systems including windows. &lt;/p&gt;  &lt;p&gt;Installing it is straightforward. Download and run the installers in the &lt;a href="http://www.gnustep.org/experience/Windows.html"&gt;specified order&lt;/a&gt;. Once its complete,&amp;#160; you will get a GNUstep option in the start menu. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/TQc0djRBWBI/AAAAAAAAAZo/7mb3HYsgiCM/s1600-h/start%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="start" border="0" alt="start" src="http://lh3.ggpht.com/_honSoB4kSVs/TQc0ijfB8PI/AAAAAAAAAZs/qqqbBJ6-_hE/start_thumb.png?imgmax=800" width="244" height="124" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Shell can be used to compile and run programs including Objective C programs. This shell has most of the unix programming utilities including gcc, g++ , make and gdb. &lt;/p&gt;  &lt;p&gt;In order to build and run a sample program, easiest way is to use a makefile. For GUNstep, the makefile should be named GNUmakefile. If the makefile uses any other name, it should be specified in the make command. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1915818416633379835?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1915818416633379835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/12/running-objective-c-code-on-windows-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1915818416633379835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1915818416633379835'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/12/running-objective-c-code-on-windows-7.html' title='Running Objective C code on Windows 7'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_honSoB4kSVs/TQc0ijfB8PI/AAAAAAAAAZs/qqqbBJ6-_hE/s72-c/start_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-6436441821262149251</id><published>2010-12-13T09:15:00.001-08:00</published><updated>2010-12-13T21:50:53.147-08:00</updated><title type='text'>How to fix VMWare server 2.0 VM No Internet Access issue on Windows 7</title><content type='html'>&lt;p&gt;If you are on windows 7 and using VMWare 2.0. server, your virtual machines will have a problem of accessing the internet.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_honSoB4kSVs/TQZS42MfD7I/AAAAAAAAAZQ/cI7D2LwE6DI/s1600-h/nonetwork%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="nonetwork" border="0" alt="nonetwork" src="http://lh4.ggpht.com/_honSoB4kSVs/TQZUebwoywI/AAAAAAAAAZU/AJ86BxLI1-g/nonetwork_thumb%5B3%5D.png?imgmax=800" width="690" height="408" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;However, there is a work around to get network access with the VM using the windows Internet Connection Sharing option. First open up the WMWare Virtual network editor vmnetcfg.exe located at C:\Program Files (x86)\VMware\VMware Server.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_honSoB4kSVs/TQZUi2F_RZI/AAAAAAAAAZY/JkYfobUy9xk/s1600-h/image%5B10%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_honSoB4kSVs/TQZUmrGHE2I/AAAAAAAAAZc/a_CgEP44Zuk/image_thumb%5B3%5D.png?imgmax=800" width="451" height="368" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;On the “Host Virtual network Mapping” tab , for VMNet1, click the &amp;gt; button and select subnet option. Put an Ip address other then 192.168.137.0 and click OK.&amp;#160; For VMnet8 adaptor click &amp;gt; and set the subnet ip to 192.168.137.0 for the subnet option and on the default gateway option, set 192.168.137.1 and click OK. This is the IP address Windows 7 assign when using Internet connection sharing option. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Open the ‘Network and Sharing Center’ from control panel and click ‘Change Adaptor Settings’ Open the properties for your active Internet connection, go to sharing tab and click the check box with option “allow other network users to connect through this computer’s internet connection” and for the Home networking connection , Select to connect though VMnet8. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/TQZUqHd4xpI/AAAAAAAAAZg/i1Ceylwg6Dk/s1600-h/image%5B20%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_honSoB4kSVs/TQZUsyfpllI/AAAAAAAAAZk/1uX6Jv4nBaQ/image_thumb%5B7%5D.png?imgmax=800" width="283" height="357" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Windows will tell that it will assign IP 192.168.137.1. &lt;/p&gt;  &lt;p&gt;If your VM machine does not have a fixed IP configured , it should be able to access internet without issue now. In case, it has a fixed IP configured, VM IP4 gateway and DNS1 should be changed to 192.168.137.1&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-6436441821262149251?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/6436441821262149251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/12/how-to-fix-vmware-server-20-vm-no.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6436441821262149251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6436441821262149251'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/12/how-to-fix-vmware-server-20-vm-no.html' title='How to fix VMWare server 2.0 VM No Internet Access issue on Windows 7'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_honSoB4kSVs/TQZUebwoywI/AAAAAAAAAZU/AJ86BxLI1-g/s72-c/nonetwork_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5809369546663563511</id><published>2010-10-27T11:03:00.001-07:00</published><updated>2010-10-27T11:08:52.574-07:00</updated><title type='text'>Google Transliteration IME</title><content type='html'>&lt;p&gt;Google transliteration input method supports many languages including Sinhalese. One great feature is the availability of the ‘zero width joiner’ and ‘zero width non joiner’ support with makes is so easy to type the combined characters which are otherwise hard to get right.&amp;#160; It includes this typing keypad as well. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/TMhpT7MkunI/AAAAAAAAAY4/VPZe4ZYM3-0/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_honSoB4kSVs/TMhpWiuJXjI/AAAAAAAAAY8/ar7G60VaL-c/image_thumb%5B3%5D.png?imgmax=800" width="391" height="293" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In addition, the transliteration web page is also available. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/TMhpY8lIhcI/AAAAAAAAAZA/a0JYOTw6f74/s1600-h/image%5B14%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_honSoB4kSVs/TMhpbsq7e2I/AAAAAAAAAZE/jqq4tStUeDY/image_thumb%5B8%5D.png?imgmax=800" width="649" height="217" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;With the IME installed, all you need to do is to select the input method and you are off typing in Sinhalese. සිංහළෙන් බ්ලොග් ලියමු දැන්.&lt;/p&gt;  &lt;p&gt;Download transliterating IME from &lt;a href="http://www.google.com/ime/transliteration/"&gt;http://www.google.com/ime/transliteration/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_honSoB4kSVs/TMhpdjhLBLI/AAAAAAAAAZI/ChMs_o9-5Js/s1600-h/image%5B20%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_honSoB4kSVs/TMhpf0dNLGI/AAAAAAAAAZM/AQH1PnPU-c4/image_thumb%5B12%5D.png?imgmax=800" width="613" height="141" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5809369546663563511?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5809369546663563511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/10/google-transliteration-ime.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5809369546663563511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5809369546663563511'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/10/google-transliteration-ime.html' title='Google Transliteration IME'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_honSoB4kSVs/TMhpWiuJXjI/AAAAAAAAAY8/ar7G60VaL-c/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-6011724356893888742</id><published>2010-08-29T22:29:00.001-07:00</published><updated>2010-08-29T22:30:51.568-07:00</updated><title type='text'>Memory Lane</title><content type='html'>&lt;p&gt;WSO2 is celebrating its fifth anniversary. I have been at wso2 for exactly 5 years today.So I decided to put together some special moments at WSO2. There were many and these are the photos I could find. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/THtBfpSmqXI/AAAAAAAAAX4/g-9bAgMeylc/s1600-h/P1010086_2%5B1%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="OLYMPUS DIGITAL CAMERA         " border="0" alt="OLYMPUS DIGITAL CAMERA         " src="http://lh4.ggpht.com/_honSoB4kSVs/THtBhLp85dI/AAAAAAAAAX8/BQY2jJrGt2s/P1010086_2_thumb.jpg?imgmax=800" width="512" height="405" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This was the first WSO2 day out. This was way back in 2005 and place is blue waters. From left to right, Chamil, Sahan, Ruchith, Chinthaka, Saminda, Sanka, Deepal, Buddhika, Chamikara,Dr Sanjiva, Samisa and me.&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/THtBiKD0DgI/AAAAAAAAAYA/hIEl1Uf-viE/s1600-h/IMG_0019%5B1%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="IMG_0019" border="0" alt="IMG_0019" src="http://lh6.ggpht.com/_honSoB4kSVs/THtBjRCBoKI/AAAAAAAAAYE/eyUSe3_B2hE/IMG_0019_thumb.jpg?imgmax=800" width="503" height="387" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This was the first major WSO2 product release. WSO2 WSAS was called Tungsten in those days. With ‘w’&amp;#160; representing Tungsten in the periodic table and w being the starting letter of the company name, it was decided to name WSO2’s first product as Tungsten. Sad that those metallic product names had to go away. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/THtBkT4GJCI/AAAAAAAAAYI/cCj1rmWLUiI/s1600-h/Picture%20045%5B1%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Picture 045" border="0" alt="Picture 045" src="http://lh6.ggpht.com/_honSoB4kSVs/THtBlt5Yi6I/AAAAAAAAAYM/ecWpn16zILo/Picture%20045_thumb%5B1%5D.jpg?imgmax=800" width="497" height="383" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Samisa was the first wso2 employee to get married while at WSO2. It was Axis2/C early days and we were on a tight release schedule on those days. The C team had a call with Samisa even on his wedding holidays!. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/THtBm55ZoaI/AAAAAAAAAYQ/xpNEAb8Qwyc/s1600-h/03sigiriyabychamil0693.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="03-sigiriya-by-chamil-069" border="0" alt="03-sigiriya-by-chamil-069" src="http://lh5.ggpht.com/_honSoB4kSVs/THtBnyreF7I/AAAAAAAAAYU/XPIEd9tlkaU/03sigiriyabychamil069_thumb1.jpg?imgmax=800" width="345" height="507" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/THtBpJZg-QI/AAAAAAAAAYY/FoGGcJlNb30/s1600-h/04-safari-by-samisa-051.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="04-safari-by-samisa-051" border="0" alt="04-safari-by-samisa-051" src="http://lh5.ggpht.com/_honSoB4kSVs/THtBqdAE3gI/AAAAAAAAAYc/do5MbSqFBgc/04-safari-by-samisa-051_thumb.jpg?imgmax=800" width="530" height="405" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This was the first official WSO2 trip. It was to habarana lodge. The food there was awesome and the guys had put up a few kilos by the time we left. The top photo is taken at the entrance of Sigiriya. The second one was taken at Echo park. Deep and Me ended up going to this place three times. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/THtBrGF0zTI/AAAAAAAAAYg/67xVl6148Yc/s1600-h/IMG_0074%5B2%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="IMG_0074" border="0" alt="IMG_0074" src="http://lh3.ggpht.com/_honSoB4kSVs/THtBsqfFNdI/AAAAAAAAAYk/HSzucwhBbNE/IMG_0074_thumb%5B1%5D.jpg?imgmax=800" width="536" height="424" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is one of the group photos taken inside the old WSO2 office in merchant tower.&amp;#160; Everyone is dressed to go to a wedding as I remember.&amp;#160; From left to right, its Sandakith, Nandika, Azeez, Saminda, Asanka, Milinda, Ajith, Chinthaka, Deepal, Ruchith, Chamikara, Sanjaya, Sahan, Amila, Sanka, Samisa and Damitha.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_honSoB4kSVs/THtBtpbwhXI/AAAAAAAAAYo/JAmfKcPL-e8/s1600-h/DSC_0184_small%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DSC_0184_small" border="0" alt="DSC_0184_small" src="http://lh5.ggpht.com/_honSoB4kSVs/THtBu3OClLI/AAAAAAAAAYs/eiaimpEuidc/DSC_0184_small_thumb%5B2%5D.jpg?imgmax=800" width="538" height="367" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;WSO2 has grown and prospered over five years and this is how it looks in 2010.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-6011724356893888742?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/6011724356893888742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/08/memory-lane.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6011724356893888742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6011724356893888742'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/08/memory-lane.html' title='Memory Lane'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_honSoB4kSVs/THtBhLp85dI/AAAAAAAAAX8/BQY2jJrGt2s/s72-c/P1010086_2_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5688621810644814850</id><published>2010-07-05T02:21:00.001-07:00</published><updated>2010-07-05T02:21:15.864-07:00</updated><title type='text'>WSO2 Web Services Framework for PHP 2.1.0 Released</title><content type='html'>&lt;p&gt;I am pleased to announce the release of v2.1.0 of&amp;#160; wso2 wsf/php. This release comes after quite some time since the 2.0.0 release was back in late 2008. Since then a lot of changes have token place in the underlying code base of WSF/PHP. The WS-Security handling has been improved and updated and that functionality is now available with this release of WSF/PHP. In addition to that, this release is built and tested for PHP 5.3. Many users have been querying about a PHP 5.3 compatible release for a while and with this release, all the issues users had with installing and running on php 5.3 will be solved. Libxml2 dependency has been removed from the default build and it uses build-in Guththila xml parser for xml handling which should also improve the performance.&lt;/p&gt;  &lt;p&gt;You can download the release from &lt;a href="http://wso2.org/downloads/wsf/php"&gt;http://wso2.org/downloads/wsf/php&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;You can find the complete release note here.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://svn.wso2.org/repos/wso2/branches/wsf/php/2.1.0/NEWS"&gt;https://svn.wso2.org/repos/wso2/branches/wsf/php/2.1.0/NEWS&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy WSO2 WSF/PHP 2.1.0.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5688621810644814850?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5688621810644814850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/07/wso2-web-services-framework-for-php-210.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5688621810644814850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5688621810644814850'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/07/wso2-web-services-framework-for-php-210.html' title='WSO2 Web Services Framework for PHP 2.1.0 Released'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-6327622980948951281</id><published>2010-05-21T10:37:00.001-07:00</published><updated>2010-05-21T10:44:18.181-07:00</updated><title type='text'>How to configure https for Apache2.2 and consume PHP web services over https</title><content type='html'>&lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Create a Certificate Authority, &lt;strong&gt;CA&lt;/strong&gt;.&lt;/p&gt;  &lt;blockquote&gt;&lt;strong&gt;openssl genrsa -des3 -out ca.key 4096&lt;/strong&gt;     &lt;br /&gt;&lt;strong&gt;openssl req -new -x509 -days 365 -key ca.key -out ca.crt&lt;/strong&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;em&gt;Now we have a certificate authority certificate to sign the certificate for the server.&lt;/em&gt;&lt;/p&gt; &lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Generate a key for the server.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;openssl genrsa -des3 -out server.key 4096&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Generate a certificate signing request&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;em&gt;openssl req -new -key server.key -out server.csr&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Optional step : remove the passphrase from the key&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Rename server.key to server.key.bac.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;em&gt;openssl rsa -in server.key.bac -out server.key&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Step3. &lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Sign the generated key with certificate authority&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;em&gt;openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now we have the necessary keys and certificates to configure Apache2.2 server to enable &lt;strong&gt;https&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step4.&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;copy the generated keys, certificates to a directory named keys under the conf directory.&lt;/p&gt;    &lt;p&gt;Uncomment ssl module and ssl configuration file in httpd.conf.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;LoadModule ssl_module modules/mod_ssl.so&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Include conf/extra/httpd-ssl.conf&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Step 5. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;configure https in httpd-ssl.conf file located in conf/extra directory. Use the default settings and specify the following Files to match your local settings.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;SLCertificateFile &amp;quot;F:/Apache2.2/conf/keys/server.crt&amp;quot;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;SSLCertificateKeyFile &amp;quot;F:/Apache2.2/conf/keys/server.key&amp;quot;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;SSLCACertificateFile &amp;quot;F:/Apache2.2/conf/keys/ca.crt&amp;quot;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;#SSLVerifyClient require&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;SSLVerifyDepth 1&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;SSLVerifyClient and SSLVerifyDepth options would only be required, if you want the client to authenticate to the server using a certificate and a passphrase. &lt;/p&gt;  &lt;p&gt;Now you have successfully configured https for your server. &lt;/p&gt;  &lt;p&gt;When connecting to the server, you can obtain the servers certificate by using openssl. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;openssl s_client –connect &lt;/strong&gt;&lt;a href="http://localhost"&gt;&lt;strong&gt;localhost&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:443 &amp;gt; scert.pem&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now open the scert.pem and remove the unnecessary. Only the content within the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- needed for the certificate. You certificate would look like&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;-----BEGIN CERTIFICATE-----&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;-----END CRETIFICATE-----&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 6. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now we can connect to a service deployed in Apache server using https and consume it.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;$client = new WSClient(array(“to”=&amp;gt;”https://localhost/webservices/service1.php”,&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; “CACert”=&amp;gt;”cert.pem”));&lt;/p&gt;    &lt;p&gt;$response = $client-&amp;gt;request($input);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Much more detailed discussion on implementing https alone with Axis2/C is available &lt;a href="http://wso2.org/library/articles/ssl-enabled-web-services-apache-axis2-c"&gt;here.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-6327622980948951281?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/6327622980948951281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/05/how-to-configure-https-for-apache22-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6327622980948951281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6327622980948951281'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/05/how-to-configure-https-for-apache22-and.html' title='How to configure https for Apache2.2 and consume PHP web services over https'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-7769143601846576125</id><published>2010-03-14T05:21:00.001-07:00</published><updated>2010-03-14T05:21:44.367-07:00</updated><title type='text'>WSF/C++ Performance Comparison</title><content type='html'>&lt;p&gt;We carried out a simple performance comparison between WSF/C++ , WSF/C against a set of other web services products. The results are &lt;a href="http://wso2.org/library/articles/high-performance-web-services-c"&gt;published here&lt;/a&gt;. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-7769143601846576125?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/7769143601846576125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/03/wsfc-performance-comparison.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7769143601846576125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7769143601846576125'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/03/wsfc-performance-comparison.html' title='WSF/C++ Performance Comparison'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-6769499141469997198</id><published>2010-03-10T23:23:00.001-08:00</published><updated>2010-03-10T23:23:40.847-08:00</updated><title type='text'>WSO2 Carbon Based Admin Console for Axis2/C WSF/C and WSF/C++</title><content type='html'>&lt;p&gt;&lt;a title="http://wso2.org/projects/wsf/cpp" href="http://wso2.org/projects/wsf/cpp"&gt;http://wso2.org/projects/wsf/cpp&lt;/a&gt;With the availability of &lt;a href="http://wso2.org/projects/wsf/cpp"&gt;WSO2 WSF Admin&lt;/a&gt;, now users can manage their C and C++ Web Services Deployed in Axis2/C, WSF/C or WSF/C++ using the GUI interface of Carbon. At present, WSF Admin is at first milestone and supports following set of features. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Service Listing and Module Listing&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Security Configuration&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Policy Editing&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Service Statistics&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Following are some of the screen shots of New WSF Admin Console with WSF/C++.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Service Listing&lt;/strong&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/_honSoB4kSVs/S5iaSmYbn8I/AAAAAAAAAUA/xFFgJbcVBqU/s1600-h/servicelisting%5B5%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="servicelisting" border="0" alt="servicelisting" src="http://lh3.ggpht.com/_honSoB4kSVs/S5iaT_6rDzI/AAAAAAAAAUE/UbO5fepD0V0/servicelisting_thumb%5B3%5D.png?imgmax=800" width="729" height="539" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Engage Statistics Module to a service using the admin console and view the service usage statistics.&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/S5iaV0wgHDI/AAAAAAAAAUI/s-x2cdVPw7Y/s1600-h/engage%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="engage" border="0" alt="engage" src="http://lh4.ggpht.com/_honSoB4kSVs/S5iaXmNZw6I/AAAAAAAAAUM/oojSItSjt0s/engage_thumb%5B2%5D.png?imgmax=800" width="733" height="539" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_honSoB4kSVs/S5iaYr6ag1I/AAAAAAAAAUQ/lL7Sh6g-H58/s1600-h/stats%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="stats" border="0" alt="stats" src="http://lh5.ggpht.com/_honSoB4kSVs/S5iaZu7OHSI/AAAAAAAAAUU/cUef2mQRj9A/stats_thumb%5B2%5D.png?imgmax=800" width="633" height="385" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Configure Security&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_honSoB4kSVs/S5iaa6piJJI/AAAAAAAAAUY/-FY6J-SaP_o/s1600-h/security%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="security" border="0" alt="security" src="http://lh5.ggpht.com/_honSoB4kSVs/S5iacgg2IZI/AAAAAAAAAUc/gyqhUJowevw/security_thumb%5B2%5D.png?imgmax=800" width="681" height="500" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;View and Edit Service Policies&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_honSoB4kSVs/S5iadnO3JVI/AAAAAAAAAUg/vp9vGqZEjGk/s1600-h/policies%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="policies" border="0" alt="policies" src="http://lh5.ggpht.com/_honSoB4kSVs/S5iae3l5HwI/AAAAAAAAAUk/nr0dzvP2tho/policies_thumb%5B2%5D.png?imgmax=800" width="695" height="511" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There are lots of other functionality in-addition to the once I have shown above.&amp;#160; WSF Admin is a set set of web services and modules implemented using WSO2 Web Services Framework, plus a Customized Carbon Instance. The Admin Console works by using web services interactions to the WSF/C Back End where the C Admin Services deployed. WSF Admin is also a demonstration of not only the interoperability of WSO2 products ( Between java based Carbon Platform and C/C++ based WSF Products ) but also the flexibility of WSO2 Carbon Platform.&amp;#160; &lt;/p&gt;  &lt;p&gt;WSF Admin milestone 1 release does not have the persistence and hence the configuration changes you make will not be preserved once you shutdown your server. The next release of WSF Admin will be having the persistence capability.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-6769499141469997198?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/6769499141469997198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/03/wso2-carbon-based-admin-console-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6769499141469997198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6769499141469997198'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/03/wso2-carbon-based-admin-console-for.html' title='WSO2 Carbon Based Admin Console for Axis2/C WSF/C and WSF/C++'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_honSoB4kSVs/S5iaT_6rDzI/AAAAAAAAAUE/UbO5fepD0V0/s72-c/servicelisting_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5395143914224767320</id><published>2010-01-27T20:34:00.001-08:00</published><updated>2010-01-27T20:34:03.920-08:00</updated><title type='text'>Making the Skeleton Dance</title><content type='html'>&lt;p&gt;This is a very interesting marketing strategy.&amp;#160; A guy walks into an into an interview and&amp;#160; highlights his negatives.&lt;/p&gt;  &lt;p&gt;As I look over my copy of Thompson's application, I mentally reduce his chances from minuscule to nonexistent. I glance at my watch. I've got an early flight. I wonder how long it will take my compatriots to blow poor Thompson off.    &lt;br /&gt;&amp;quot;So why should we hire you, Mr. Thompson?&amp;quot; the area manager asks, starting with the question she usually finishes with.     &lt;br /&gt;Thompson smiles.     &lt;br /&gt;&amp;quot;I'm 53 years old,&amp;quot; he says without hesitation. &amp;quot;I'm not pretty. I've been unemployed for almost five months—ever since my last company went belly-up. I've got no experience in your industry. If you take a look at my application you'll see that there's a checkmark next to the yes on that question about whether or not I've ever been convicted of a felony. I've applied for any number of other jobs and no one else will hire me.&amp;quot; He looks at us each in turn while he's slowly ticking off these points on his fingers, as confidently as if he were explaining his Harvard MBA, his Olympic gold medals and his seven years as CEO of General Motors. &amp;quot;So let me tell you why I'm the best possible candidate you're ever going to find for this position.&amp;quot;     &lt;br /&gt;And that's exactly what he proceeds to do—demonstrating the poise and assurance and experience he'd gained in those 53 years.     &lt;br /&gt;&amp;quot;If you hire me, I can't afford not to succeed!&amp;quot; he tells us with passion and conviction. &amp;quot;I don't have the option of being able to move on to greener pastures—or even brown pastures—when the job gets too grueling. I'm 100 percent committed. As locked into this position as I was locked into that jail cell 35 years ago. And if you'll notice that's where I earned the most of the credits for my college degree. I never wanted a Master's, so I've made sure I've never had to go back. But what I learned in that place—the formal and the informal training—has a lot to do with why I've been so successful at every job I've had since then.&amp;quot;&lt;/p&gt;  &lt;p&gt;Read the full article here. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.evancarmichael.com/Sales/372/Making-the-Skeleton-Dance-Bragging-about-the-Negatives.html"&gt;http://www.evancarmichael.com/Sales/372/Making-the-Skeleton-Dance-Bragging-about-the-Negatives.html&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5395143914224767320?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5395143914224767320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/01/making-skeleton-dance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5395143914224767320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5395143914224767320'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/01/making-skeleton-dance.html' title='Making the Skeleton Dance'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-3824394734656714405</id><published>2010-01-18T20:29:00.001-08:00</published><updated>2010-01-18T20:29:56.336-08:00</updated><title type='text'>How to write a custom message receiver for WSF/CPP</title><content type='html'>&lt;p&gt;When you have to go beyond the supported interface of a ServiceSkeleton when implementing a service, you can use a custom message receiver to achieve that functionality.&amp;#160; For example, recently we encountered such scenario where the unparsed soap enveloped body has to be accessed for some custom logic. But when implementing a service using ServiceSkeleton interface, you would always ended up getting the first child of the soap body as an argument.&lt;/p&gt;  &lt;p&gt;In that kind of a situation, the best option would be to implement a custom message receiver. WSF/CPP now provides a very convenient API for implementing a message receiver.&amp;#160; &lt;/p&gt;  &lt;p&gt;For implementing a custom message receiver, WSF/CPP provides a class named MessageReceiver. What a user has to do is to extend from this and implement the abstract method &lt;strong&gt;invokeBusinessLogicSync&lt;/strong&gt; which will receive inflow message context and outflow message context as arguments. Then you have the full control over the processing of the message received by the message receiver. &lt;/p&gt;  &lt;p&gt;Next add the macro &lt;strong&gt;WSF_MESSAGE_RECEIVER_INIT &lt;/strong&gt;and pass the message receiver class name as the argument.&lt;/p&gt;  &lt;p&gt;Next compile the written code as a shared library and place it in &amp;lt;WSFCPP_REPO&amp;gt;\lib directory. When implementing a service which would be invoked using this custom message receiver, set the name of the shared library as the “messageReceiver” parameter for each operation. For example, if the shared library name is “&lt;strong&gt;CustomMsgRecv&lt;/strong&gt;”&lt;/p&gt;  &lt;p&gt;&amp;lt;operation name=”Op1”&amp;gt;&amp;lt;messageReceiver class=”&lt;strong&gt;CustomMsgRecv&lt;/strong&gt;”/&amp;gt;&amp;lt;/operation&amp;gt;&lt;/p&gt;  &lt;p&gt;Here is the example message receiver code.&lt;/p&gt;  &lt;p&gt;/* CustomMsgRecv.h */&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;#include &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;lt;MessageReceiver.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;class &lt;/span&gt;CustomMsgRecv : &lt;span style="color: blue"&gt;public &lt;/span&gt;wso2wsf::MessageReceiver&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;:&lt;br /&gt;    WSF_EXTERN &lt;span style="color: blue"&gt;bool &lt;/span&gt;WSF_CALL &lt;br /&gt;        invokeBusinessLogicSync(wso2wsf::MessageContext *inMsgCtx, &lt;br /&gt;                                wso2wsf::MessageContext* outMsgCtx);&lt;br /&gt;    CustomMsgRecv(&lt;span style="color: blue"&gt;void&lt;/span&gt;);&lt;br /&gt;    ~CustomMsgRecv(&lt;span style="color: blue"&gt;void&lt;/span&gt;);&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;/** CustomMsgRecv.cpp */&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;#include &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;CustomMsgRecv.h&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;#include &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;lt;MessageReceiver.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using namespace &lt;/span&gt;wso2wsf;&lt;br /&gt;&lt;br /&gt;WSF_MESSAGE_RECEIVER_INIT(CustomMsgRecv)&lt;br /&gt;&lt;br /&gt;CustomMsgRecv::CustomMsgRecv(&lt;span style="color: blue"&gt;void&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;CustomMsgRecv::~CustomMsgRecv(&lt;span style="color: blue"&gt;void&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;WSF_EXTERN &lt;span style="color: blue"&gt;bool &lt;/span&gt;WSF_CALL &lt;br /&gt;CustomMsgRecv::invokeBusinessLogicSync(wso2wsf::MessageContext *inMsgCtx,&lt;br /&gt;                                       wso2wsf::MessageContext *outMsgCtx)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: green"&gt;/** Add Your Logic Here */&lt;br /&gt;&lt;/span&gt;}&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-3824394734656714405?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/3824394734656714405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/01/how-to-write-custom-message-receiver.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3824394734656714405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3824394734656714405'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2010/01/how-to-write-custom-message-receiver.html' title='How to write a custom message receiver for WSF/CPP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-9198995753496715576</id><published>2009-11-05T10:23:00.001-08:00</published><updated>2009-11-05T10:23:19.984-08:00</updated><title type='text'>Better Open Source Enterprise C++ Web Services-webinar</title><content type='html'>&lt;p&gt;I will be doing a webinar on &lt;a href="http://wso2.org/projects/wsf/cpp"&gt;WSF/C++&lt;/a&gt; on 10th November. If you are looking to incorporate native web services stack in your web services solution, this webinar will be of great value for you to evaluate WSF/C++ and get to know the capabilities and get started and what's more its free. This webinar will be a technical oriented one with covering lots of details on how you can use WSF/C++ framework.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://wso2.org/library/webinars/11-10-2009-webinar-better-open-source-enterprise-cpp-web-services/?soaotad=10302009"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="wsf-c  -banner-ot" src="http://lh6.ggpht.com/_honSoB4kSVs/SvMYFiu8SRI/AAAAAAAAAJg/-WJSHfKXpeE/wsf-c%2B%2B-banner-ot%5B4%5D.jpg?imgmax=800" width="616" height="271" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="https://www2.gotomeeting.com/register/211560395"&gt;Registration for webinar&lt;/a&gt; is now open. Looking forward to seeing lots of you turn-up for the webinar. :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-9198995753496715576?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/9198995753496715576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/11/better-open-source-enterprise-c-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/9198995753496715576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/9198995753496715576'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/11/better-open-source-enterprise-c-web.html' title='Better Open Source Enterprise C++ Web Services-webinar'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_honSoB4kSVs/SvMYFiu8SRI/AAAAAAAAAJg/-WJSHfKXpeE/s72-c/wsf-c%2B%2B-banner-ot%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5533586981536414319</id><published>2009-10-18T22:10:00.001-07:00</published><updated>2009-10-18T22:10:45.779-07:00</updated><title type='text'>WSO2 WSF/C++ 2.1.0 Released</title><content type='html'>&lt;p&gt;We are pleased to announce the release of WSO2 Web Services Framework for C++ 2.1.0 release.&amp;#160; With this 2.1 release comes some very useful usability enhancements in addition to many improvements to the framework. &lt;/p&gt;  &lt;p&gt;Now the code generator tool is able to generate visual studio project files for the generated code. In addition, we have released an eclipse plug-in wizard alone with this release, which provides a comprehensive GUI interface to the code generator tool. This will allow the users who are working within eclipse IDE to generate code without having to leave the IDE. &lt;/p&gt;  &lt;p&gt;We have done some work to improve the performance of the WSF/C framework within this period of time. In addition, the many shortcomings&amp;#160; in the code generation tool has been addressed from the previous release.New samples were added. Also some platform specific issues have been addressed in this release which allowed WSF/C++ to be complied in both &lt;strong&gt;MacOS&lt;/strong&gt; as well as &lt;strong&gt;Solaris&lt;/strong&gt; without having to do any changes. &lt;/p&gt;  &lt;p&gt;You can download the &lt;a href="http://wso2.org/downloads/wsf/cpp"&gt;&lt;font color="#ff0080"&gt;2.1 release&lt;/font&gt;&lt;/a&gt; from here.&amp;#160; Also download the &lt;a href="http://wso2.org/projects/wsf/cpp/codegen-plugin-wizard-for-eclipse"&gt;&lt;font color="#ff0080"&gt;Eclipse Codegen Wizard Plugin&lt;/font&gt;&lt;/a&gt; if your prefer to work in eclipse.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Here is the complete release note. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WSO2 Web Services Framework for C++ (WSO2 WSF/C++) 2.1.0 Released&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;=================================================================&lt;/p&gt;  &lt;p&gt;WSO2 WSF/C++ team is pleased to announce the release of WSO2 WSF/C++ 2.1.0.&lt;/p&gt;  &lt;p&gt;You can download this release from: &lt;a href="http://wso2.org/downloads/wsf/cpp"&gt;http://wso2.org/downloads/wsf/cpp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;WSO2 Web Services Framework for C++ (WSO2 WSF/C++) is a standards compliant, enterprise&lt;/p&gt;  &lt;p&gt;grade, open source, C++ library for providing and consuming Web services in C++, based on the popular,&lt;/p&gt;  &lt;p&gt;WSO2 WSF/C library.&lt;/p&gt;  &lt;p&gt;Project home page:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://wso2.org/projects/wsf/cpp"&gt;http://wso2.org/projects/wsf/cpp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;-------------&lt;/p&gt;  &lt;p&gt;Key Features&lt;/p&gt;  &lt;p&gt;=============&lt;/p&gt;  &lt;p&gt;1. Client API to consume Web services&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * ServiceClient class with one-way and two-way service invocation support&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for SOAP 1.1, and SOAP 1.2.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Options class to facilitate configuring the client for both SOAP and REST options.&lt;/p&gt;  &lt;p&gt;2. Service API to provide Web Services&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * ServiceSkeleton class to extend from to implement services.&lt;/p&gt;  &lt;p&gt;2. Attachments with MTOM&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Binary optimized&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Non-optimized (Base64 binary)&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Attachment Caching Support&lt;/p&gt;  &lt;p&gt;3. WS-Addressing&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Version 1.0&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Submission&lt;/p&gt;  &lt;p&gt;4. WSPolicy &lt;/p&gt;  &lt;p&gt;5. WS-Security&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Username Token &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Timestamp Token &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; *&amp;#160; Signing&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; *&amp;#160; Encryption &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WS-SecurityPolicy based configuration&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Reply detection&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WS-Trust&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WS-Secure Conversation&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;6. Code generation Tool&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * By providing a wsdl and options, generate client stubs and service skeletons&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; in C++ using the code generation tool. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * A Code generation Eclipse plugin is also available with this release. The code generation tool&lt;/p&gt;  &lt;p&gt;has been integrated into an eclipse plugin wizard which allows a user to conveniently &lt;/p&gt;  &lt;p&gt;utilise the code generation tool while working within eclipse. &lt;/p&gt;  &lt;p&gt;7. SSL enabled transport layer&lt;/p&gt;  &lt;p&gt;8. WS-Reliable Messaging&lt;/p&gt;  &lt;p&gt;9. Has all the capabilities available from WSF/C library.&lt;/p&gt;  &lt;p&gt;--------------------------------&lt;/p&gt;  &lt;p&gt;Major Changes Since Last Release&lt;/p&gt;  &lt;p&gt;================================&lt;/p&gt;  &lt;p&gt;1. Eclipse plugin for code generation tool added.&lt;/p&gt;  &lt;p&gt;2. Visual Studio project file generation is added to the code generation tool.&lt;/p&gt;  &lt;p&gt;3. Documentation Improved.&lt;/p&gt;  &lt;p&gt;4. Many bugs fixed in the code generation tool.&lt;/p&gt;  &lt;p&gt;5. Many memory leak fixes.&lt;/p&gt;  &lt;p&gt;6. More samples have been added. &lt;/p&gt;  &lt;p&gt;7. The Service API has been enhanced to allow users to extend from the generated skeleton classes.&lt;/p&gt;  &lt;p&gt;-------------------&lt;/p&gt;  &lt;p&gt;Known Issues&lt;/p&gt;  &lt;p&gt;-------------------&lt;/p&gt;  &lt;p&gt;There could be memory leaks in some scenarios.&lt;/p&gt;  &lt;p&gt;-------------------&lt;/p&gt;  &lt;p&gt;Reporting Problems&lt;/p&gt;  &lt;p&gt;===================&lt;/p&gt;  &lt;p&gt;Issues can be reported using the public JIRA available at:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://wso2.org/jira/browse/WSFCPP"&gt;https://wso2.org/jira/browse/WSFCPP&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;-----------&lt;/p&gt;  &lt;p&gt;Contact Us&lt;/p&gt;  &lt;p&gt;===========&lt;/p&gt;  &lt;p&gt;Mailing Lists&lt;/p&gt;  &lt;p&gt;-------------&lt;/p&gt;  &lt;p&gt;Please subscribe to our user or developer mailing lists. For details on how&lt;/p&gt;  &lt;p&gt;to subscribe please visit: &lt;a href="http://wso2.org/mail"&gt;http://wso2.org/mail&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Discussion Forums&lt;/p&gt;  &lt;p&gt;-----------------&lt;/p&gt;  &lt;p&gt;Questions could be raised using the WSF/C++ forum.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://wso2.org/forum/352"&gt;http://wso2.org/forum/352&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Training&lt;/p&gt;  &lt;p&gt;========&lt;/p&gt;  &lt;p&gt;WSO2 Inc. offers a variety of professional Training Programs which includes training on WSF/C++. &lt;/p&gt;  &lt;p&gt;For additional information please refer to &lt;a href="http://wso2.com/training/"&gt;http://wso2.com/training/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Support&lt;/p&gt;  &lt;p&gt;========&lt;/p&gt;  &lt;p&gt;WSO2 Inc. offers a variety of development and production support programs, ranging from Web-based &lt;/p&gt;  &lt;p&gt;support up through normal business hours, to premium 24x7 phone support.&lt;/p&gt;  &lt;p&gt;For additional support information please refer to &lt;a href="http://wso2.com/services/support/"&gt;http://wso2.com/services/support/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We welcome your early feedback on this implementation.&lt;/p&gt;  &lt;p&gt;Thank you for your interest in WSO2 WSF/C++.&lt;/p&gt;  &lt;p&gt;-- WSO2 WSF/C++ Team --&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5533586981536414319?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5533586981536414319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/10/wso2-wsfc-210-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5533586981536414319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5533586981536414319'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/10/wso2-wsfc-210-released.html' title='WSO2 WSF/C++ 2.1.0 Released'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-3930300790353337412</id><published>2009-09-24T01:40:00.001-07:00</published><updated>2009-09-24T01:40:27.457-07:00</updated><title type='text'>New Blog on C++  Web Services</title><content type='html'>&lt;p&gt;We created a new blog &lt;a href="http://cppwebservices.blogspot.com/"&gt;http://cppwebservices.blogspot.com/&lt;/a&gt; which will work as an aggregator for discussing matters related to doing Web Services, SOA in C++. The plan to get it to the same level like &lt;a href="http://www.phpwebservices.blogspot.com/"&gt;http://www.phpwebservices.blogspot.com/&lt;/a&gt; which is an aggregated blog where you can find lots of details on PHP Web Services. &lt;/p&gt;  &lt;p&gt;The blog would be primarily discussing&amp;#160; how you can get web services running smoothly With WSF/C++Web Services Framework.&amp;#160; WSF/C++ comes with lots of features as demonstrated by the following architecture diagram.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_honSoB4kSVs/SrswdM4msQI/AAAAAAAAAIg/3-4ldfSjggs/s1600-h/wsf-cpp-architecture%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="wsf-cpp-architecture" src="http://lh5.ggpht.com/_honSoB4kSVs/Srswebe4mAI/AAAAAAAAAIk/_M_56_HPYII/wsf-cpp-architecture_thumb%5B1%5D.png?imgmax=800" width="556" height="336" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-3930300790353337412?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/3930300790353337412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/09/new-blog-on-c-web-services.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3930300790353337412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3930300790353337412'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/09/new-blog-on-c-web-services.html' title='New Blog on C++  Web Services'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_honSoB4kSVs/Srswebe4mAI/AAAAAAAAAIk/_M_56_HPYII/s72-c/wsf-cpp-architecture_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1076051055943523359</id><published>2009-09-01T11:47:00.001-07:00</published><updated>2009-09-01T11:47:48.053-07:00</updated><title type='text'>Getting Started with Axiom/CPP</title><content type='html'>&lt;p&gt;WSF/CPP comes with its own XML processing model which is Axiom. If you are already familiar with either Axiom/Java or Axiom/C it would not be difficult to grasp how to use Axiom/CPP. &lt;/p&gt;  &lt;p&gt;Lets have a look at an small example. Say we want to construct an XML as follows.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;WSO2 xmlns:ns1=&amp;quot;http://wso2.org&amp;quot;&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;projects&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;WSF&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;WSFCPP&amp;gt;http://wso2.org/projects/wsf/cpp&amp;lt;/WSFCPP&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;WSFPHP&amp;gt;http://wso2.org/projects/wsf/php&amp;lt;/WSFPHP&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;/WSF&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;/projects&amp;gt;.&lt;/p&gt;    &lt;p&gt;&amp;lt;/WSO2&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Lets construct this xml using Axiom/CPP.&lt;/p&gt;  &lt;p&gt;First call the Environment::initialize() method to initialize WSF/CPP.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now create OMElement in the corresponding order. You can pass the parent element to the constructor of the child element. The code is self explanatory.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;int main()&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;{ &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160; Environment::initialize(&amp;quot;test.log&amp;quot;,AXIS2_LOG_LEVEL_TRACE);&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; &lt;strong&gt;OMElement *wso2 = new OMElement(NULL,&amp;quot;WSO2&amp;quot;, new OMNamespace(&amp;quot;&lt;/strong&gt;&lt;a href="http://wso2.org" ,?ns1?));?=",?ns1?));?"&gt;&lt;strong&gt;http://wso2.org&amp;quot;,&amp;quot;ns1&amp;quot;));&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; OMElement *projects = new OMElement(wso2, &amp;quot;projects&amp;quot;);;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; OMElement *wsf = new OMElement(projects,&amp;quot;WSF&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; OMElement *wsfcpp = new OMElement(wsf, &amp;quot;WSFCPP&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; wsfcpp-&amp;gt;setText(&amp;quot;&lt;/strong&gt;&lt;a href="http://wso2.org/projects/wsf/cpp" );?=");?"&gt;&lt;strong&gt;http://wso2.org/projects/wsf/cpp&amp;quot;);&lt;/strong&gt;&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; OMElement *wsfphp = new OMElement(wsf, &amp;quot;WSFPHP&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; wsfphp-&amp;gt;setText(&amp;quot;&lt;/strong&gt;&lt;a href="http://wso2.org/projects/wsf/php" );?=");?"&gt;&lt;strong&gt;http://wso2.org/projects/wsf/php&amp;quot;);&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; cout&amp;lt;&amp;lt;wso2;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; delete wso2;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160; return 0;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1076051055943523359?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1076051055943523359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/09/getting-started-with-axiomcpp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1076051055943523359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1076051055943523359'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/09/getting-started-with-axiomcpp.html' title='Getting Started with Axiom/CPP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-317923937502775148</id><published>2009-09-01T10:26:00.001-07:00</published><updated>2009-09-01T10:26:22.748-07:00</updated><title type='text'>Common Issue with Certificates created on Windows</title><content type='html'>&lt;p&gt;One of the common issues faced when dealing with certificates for doing SSL communication or WS-Security is that the certificates created on windows does not work on Linux. This is due to the addition of Windows Specific characters to the certificate. I have seen so many users struggle to get SSL/HTTPS working due to this problem. &lt;/p&gt;  &lt;p&gt;So easiest thing to do, if you want to run a client with HTTPS on Linux with a certificate created on windows, just do a dos2unix on the certificate.&amp;#160; :)&lt;/p&gt;  &lt;p&gt;This should help you save a lot of time. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-317923937502775148?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/317923937502775148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/09/common-issue-with-certificates-created.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/317923937502775148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/317923937502775148'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/09/common-issue-with-certificates-created.html' title='Common Issue with Certificates created on Windows'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-305734001086786724</id><published>2009-09-01T10:04:00.001-07:00</published><updated>2009-09-01T10:04:18.523-07:00</updated><title type='text'>Building WSF/PHP with PHP 5.3.0</title><content type='html'>&lt;p&gt;Since the release of PHP5.3.0 number of requests were there inquiring the compatibility of WSF/PHP with PHP 5.3.0.&amp;#160; I tried it out on windows and I only encountered minor issues. These issues are now fixed on the svn trunk. Here is how you can build WSF/PHP from the svn source to use with PHP 5.3.0.&lt;/p&gt;  &lt;p&gt;First download both PHP 5.3.0 source and binary distributions from php.net. You will also need to download the binary tools such as bison.exe which are required to build the PHP source. &lt;/p&gt;  &lt;p&gt;Next you need to run the buildconf.bat contained with the php source in order to build the windows specific headers. &lt;/p&gt;  &lt;p&gt;Now you are ready to build wsf/php for php 5.3.0. &lt;/p&gt;  &lt;p&gt;Get the svn source of wsf/php from&amp;#160; &lt;a title="https://wso2.org/repos/wso2/trunk/wsf/php" href="https://wso2.org/repos/wso2/trunk/wsf/php"&gt;https://wso2.org/repos/wso2/trunk/wsf/php&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;svn co &lt;a title="https://wso2.org/repos/wso2/trunk/wsf/php" href="http://wso2.org/repos/wso2/trunk/wsf/php"&gt;http://wso2.org/repos/wso2/trunk/wsf/php&lt;/a&gt; wsfphp&lt;/p&gt;  &lt;p&gt;Now cd to wsfphp directory and open the configure.in file and set php configurations as follows.&lt;/p&gt;  &lt;p&gt;PHP_SRC_DIR = E:\php\php-5.3.0   &lt;br /&gt;PHP_BIN_DIR = E:\php\php-5.3.0-Win32    &lt;br /&gt;BINDLIB_DIR = E:\php\bindlib-cvs-vc8&lt;/p&gt;  &lt;p&gt;Of course you need to set the other dependencies according to your machine configurations. &lt;/p&gt;  &lt;p&gt;Now run the build.bat file. This will build wsf/php binary for php 5.3.0&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-305734001086786724?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/305734001086786724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/09/building-wsfphp-with-php-530.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/305734001086786724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/305734001086786724'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/09/building-wsfphp-with-php-530.html' title='Building WSF/PHP with PHP 5.3.0'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1666127924707810732</id><published>2009-08-05T12:06:00.001-07:00</published><updated>2009-08-05T12:06:19.781-07:00</updated><title type='text'>Personality types</title><content type='html'>&lt;p&gt;Knowing your &lt;a href="http://en.wikipedia.org/wiki/Personality_type"&gt;personality type&lt;/a&gt; can be really useful. I found these links on the Internet which helps one judge what his personality type is like. &lt;/p&gt;  &lt;p&gt;Here is &lt;a href="http://www.saleshelp.com/assessments/PersonalityStylesInventory/PerStyleInv.html"&gt;one nice exercise&lt;/a&gt; which can be used to decide the personality oneself.&amp;#160; I saw somewhere that most programmer and software engineers happen to be &lt;a href="http://www.net2.com/mb/intj.htm"&gt;INTJ&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://athma-pure.com/personality.aspx"&gt;Here&lt;/a&gt; is another type of analysis. The good thing about this one is it has some tips on how to deal with each type of personality. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1666127924707810732?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1666127924707810732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/08/personality-types.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1666127924707810732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1666127924707810732'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/08/personality-types.html' title='Personality types'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-2304847663518506055</id><published>2009-07-23T22:44:00.001-07:00</published><updated>2009-07-23T22:44:26.930-07:00</updated><title type='text'>WSO2 WSF/CPP 2.0.0 Released</title><content type='html'>&lt;p&gt;WSO2 WSF/CPP 1.0.0 was released sometime back with the intention of providing a C++ API for C++ developers while leveraging the capabilities of WSF/C Web Services Stack. It only had the Client API. With this new release,the product has been significantly enhanced with the addition of a Service API, Code Generation support for C++, and Many WS-Security features. WSF/C++ can be deployed on both Apache2, and IIS. Also it has the stand alone http server as well. You can download WSF/C++ from &lt;a href="http://wso2.org/downloads/wsf/cpp"&gt;http://wso2.org/downloads/wsf/cpp&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Here is the complete release note.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;WSO2 Web Services Framework for C++ (WSO2 WSF/C++) 2.0.0 Released&lt;/p&gt;  &lt;p&gt;=================================================================&lt;/p&gt;  &lt;p&gt;WSO2 WSF/C++ team is pleased to announce the release of WSO2 WSF/C++ 2.0.0.&lt;/p&gt;  &lt;p&gt;You can download this release from: &lt;a href="http://wso2.org/downloads/wsf/cpp"&gt;http://wso2.org/downloads/wsf/cpp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;WSO2 Web Services Framework for C++ (WSO2 WSF/C++) is a standards compliant, enterprise&lt;/p&gt;  &lt;p&gt;grade, open source, C++ library for providing and consuming Web services in C++, based on the popular,&lt;/p&gt;  &lt;p&gt;WSO2 WSF/C library.&lt;/p&gt;  &lt;p&gt;Project home page:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://wso2.org/projects/wsf/cpp"&gt;http://wso2.org/projects/wsf/cpp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;-------------&lt;/p&gt;  &lt;p&gt;Key Features&lt;/p&gt;  &lt;p&gt;=============&lt;/p&gt;  &lt;p&gt;1. Client API to consume Web services&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * ServiceClient class with one-way and two-way service invocation support&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for SOAP 1.1, and SOAP 1.2.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Options class to facilitate configuring the client for both SOAP and REST options.&lt;/p&gt;  &lt;p&gt;2. Service API to provide Web Services&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * ServiceSkeleton class to extend from to implement services.&lt;/p&gt;  &lt;p&gt;2. Attachments with MTOM&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Binary optimized&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Non-optimized (Base64 binary)&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Attachment Caching Support&lt;/p&gt;  &lt;p&gt;3. WS-Addressing&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Version 1.0&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Submission&lt;/p&gt;  &lt;p&gt;4. WSPolicy &lt;/p&gt;  &lt;p&gt;5. WS-Security&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Username Token &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Timestamp Token &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; *&amp;#160; Signing&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; *&amp;#160; Encryption &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WS-SecurityPolicy based configuration&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Reply detection&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WS-Trust&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WS-Secure Conversation&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;6. Code generation Tool&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * By providing a wsdl and options, generate client stubs and service skeletons&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; in C++ using the code generation tool. &lt;/p&gt;  &lt;p&gt;7. SSL enabled transport layer&lt;/p&gt;  &lt;p&gt;8. WS-Reliable Messaging&lt;/p&gt;  &lt;p&gt;9. Has all the capabilities available from WSF/C library.&lt;/p&gt;  &lt;p&gt;--------------------------------&lt;/p&gt;  &lt;p&gt;Major Changes Since Last Release&lt;/p&gt;  &lt;p&gt;================================&lt;/p&gt;  &lt;p&gt;1. Service API which enable implementing services in C++.&lt;/p&gt;  &lt;p&gt;2. Code Generation tool for C++.&lt;/p&gt;  &lt;p&gt;3. Documentation Improved.&lt;/p&gt;  &lt;p&gt;4. WS-Security Additions including&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; * WS-Secure Conversation&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; * Replay Detection &lt;/p&gt;  &lt;p&gt;5. Many bug fixes.&lt;/p&gt;  &lt;p&gt;-------------------&lt;/p&gt;  &lt;p&gt;Known Issues&lt;/p&gt;  &lt;p&gt;-------------------&lt;/p&gt;  &lt;p&gt;Dual channel scenarios could cause crash issues.&lt;/p&gt;  &lt;p&gt;-------------------&lt;/p&gt;  &lt;p&gt;Reporting Problems&lt;/p&gt;  &lt;p&gt;===================&lt;/p&gt;  &lt;p&gt;Issues can be reported using the public JIRA available at:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://wso2.org/jira/browse/WSFCPP"&gt;https://wso2.org/jira/browse/WSFCPP&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;----------------------&lt;/p&gt;  &lt;p&gt;Contact Us&lt;/p&gt;  &lt;p&gt;===========&lt;/p&gt;  &lt;p&gt;Please subscribe to our user or developer mailing lists. For details on how&lt;/p&gt;  &lt;p&gt;to subscribe please visit: &lt;a href="http://wso2.org/mail"&gt;http://wso2.org/mail&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We welcome your early feedback on this implementation.&lt;/p&gt;  &lt;p&gt;Thank you for your interest in WSO2 WSF/C++.&lt;/p&gt;  &lt;p&gt;-- WSO2 WSF/C++ Team --&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-2304847663518506055?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/2304847663518506055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/07/wso2-wsfcpp-200-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2304847663518506055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2304847663518506055'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/07/wso2-wsfcpp-200-released.html' title='WSO2 WSF/CPP 2.0.0 Released'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-8064698784368290471</id><published>2009-06-29T22:56:00.001-07:00</published><updated>2009-06-29T22:56:53.168-07:00</updated><title type='text'>Develop Web Services With WSF/C++</title><content type='html'>&lt;p&gt;WSF/C++ is the latest product from the WSF family of frameworks for developing Web Services with C++. Its client side was released a while back and now the server side has also been added to the stack. This is due to be release soon.&lt;/p&gt;  &lt;p&gt;Following are some of the features of the Up coming WSF/C++ 2.0.0.&lt;/p&gt;  &lt;p&gt;1. Client and Service API s for providing and consuming Web Services.&lt;/p&gt;  &lt;p&gt;2. Support for WS-Security, WS-Secure Conversation and WS-Policy based configuration options. &lt;/p&gt;  &lt;p&gt;3. MTOM attachments support. &lt;/p&gt;  &lt;p&gt;4. Code generation tool to generate client stubs and service skeletons given a wsdl.&lt;/p&gt;  &lt;p&gt;I will go though these futures in detail in future posts. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-8064698784368290471?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/8064698784368290471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/06/develop-web-services-with-wsfc.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8064698784368290471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8064698784368290471'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/06/develop-web-services-with-wsfc.html' title='Develop Web Services With WSF/C++'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-7666226656896097856</id><published>2009-06-29T22:50:00.001-07:00</published><updated>2009-06-29T22:50:57.819-07:00</updated><title type='text'>Installing eAccelerator with WSF/PHP</title><content type='html'>&lt;p&gt;eAccelerator is a popular php optimizer and a dynamic content cache. By installing an optimizer, a php web site can be optimized to get maximum performance and would result in very quick response times for the clients significantly improving the client experience.&lt;/p&gt;  &lt;p&gt;Here we will have a look at how to install this tool with a PHP system which already have installed WSF/PHP. One of the complains I have seen is that eAccelerator does not work properly with WSF/PHP which is not correct.&amp;#160; You can easily get both WSF/PHP and eAccelerator running together. &lt;/p&gt;  &lt;p&gt;First install WSF/PHP which has been explained in detail in the installation guide. Next download the &lt;a href="http://bart.eaccelerator.net/source/0.9.5.3/"&gt;eAccelerator source code.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now you are ready to go ahead with the installation. &lt;/p&gt;  &lt;p&gt;unzip the source code.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;unzip eaccelerator-0.9.5.3.zip&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;cd eaccelerator-0.9.5.3&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;type ./configure --help to view the configuration options. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;./configure --help&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You will find the configuration option &lt;strong&gt;--with-eaccelerator-doc-comment-inclusion&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now you are ready to configure and install eaccelerator.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;./configure --with-eaccelerator-doc-comment-inclusion&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;./make &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;./make install&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This will install the eaccelerator shared library to the php extensions directory.&amp;#160; Now configure the php.ini settings for eaccelerator. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-7666226656896097856?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/7666226656896097856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/06/installing-eaccelerator-with-wsfphp.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7666226656896097856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7666226656896097856'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/06/installing-eaccelerator-with-wsfphp.html' title='Installing eAccelerator with WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-3423203193664073562</id><published>2009-03-01T21:15:00.001-08:00</published><updated>2009-03-01T21:15:39.497-08:00</updated><title type='text'>Dealing with Log files</title><content type='html'>&lt;p&gt;WSF/PHP uses two log files to log down certain messages useful for tracing and debugging incase of an error. These logs are handled by the underlying WSF/C Framework. It supports a log rotation as well.&lt;/p&gt;  &lt;p&gt;Following are the log level supported by WSF/PHP.&lt;/p&gt;  &lt;p&gt;Log values are set to the wsf.log_level php.ini entry.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;0 -&amp;gt; CRITICAL&amp;#160; ( Only critical errors will be logged )      &lt;br /&gt;1 -&amp;gt; ERROR&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ( Errors will be logged)       &lt;br /&gt;2 -&amp;gt; WARNING&amp;#160; ( Errors and Warnings will be logged)       &lt;br /&gt;3 -&amp;gt; INFO&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ( Errors , Warnings and Information will be logged)       &lt;br /&gt;4 -&amp;gt; DEBUG&amp;#160;&amp;#160; ( All log messages including debug messages will be logged)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When you have enabled log higher log levels, a large number of log messages are done to the log file which result in the log file growing rapidly with the number of messages processed. This would not be a problem if you are running your system for testing. But if you are running it on production this could cause some problems, because we noticed that these is a issue in the log rotation scheme for WSF/PHP 2.0.0. Due to this issue, a number of users have complained that apache stopped working as well. &lt;font color="#ff0000"&gt;Therefore it is recommenced that you used the log level &lt;strong&gt;0&lt;/strong&gt; on production systems. &lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-3423203193664073562?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/3423203193664073562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/03/dealing-with-log-files.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3423203193664073562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3423203193664073562'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/03/dealing-with-log-files.html' title='Dealing with Log files'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-7277841393495383251</id><published>2009-02-23T10:31:00.001-08:00</published><updated>2009-02-23T10:31:58.389-08:00</updated><title type='text'>Getting started with BPEL</title><content type='html'>&lt;p&gt;These days I have been doing a bit of reading on BEPL ( Business Process execution language. )&amp;#160; BPEL plays a vital role in an real SOA deployment.Here are some of the nice tutorial links i found on the web.&lt;/p&gt;  &lt;p&gt;1. &lt;a href="http://www.oracle.com/technology/pub/articles/matjaz_bpel1.html"&gt;A Hands-on Introduction to BPEL&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. &lt;a href="A Hands-on Introduction to BPEL, Part 2: Advanced BPEL"&gt;A Hands-on Introduction to BPEL, Part 2: Advanced BPEL&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Both these links are from oracle and involved with oracle process manager. However the BPEL aspect is explained in a very elegant way.&lt;/p&gt;  &lt;p&gt;Also you can find some very nice links from apache &lt;a href="http://ode.apache.org/links.html"&gt;ODE site&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-7277841393495383251?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/7277841393495383251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/02/getting-started-with-bpel.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7277841393495383251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7277841393495383251'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/02/getting-started-with-bpel.html' title='Getting started with BPEL'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-8917015749586712702</id><published>2009-02-15T10:31:00.001-08:00</published><updated>2009-02-15T10:31:53.410-08:00</updated><title type='text'>Apache OFBiz Development ( Book Review )</title><content type='html'>&lt;p&gt;I had the opportunity of reading the book&amp;#160; &lt;a href="http://www.packtpub.com/apache-ofbiz-development-beginners-tutorial/book"&gt;Apache OFBiz Development&lt;/a&gt;.&amp;#160; &lt;a href="http://ofbiz.apache.org/"&gt;Apache OFBiz&lt;/a&gt; is a top level project at apache software foundation and has a large code base and an active development community. OFBiz (Open For Business) is a open source enterprise automation software project. It has the capabilities to&amp;#160; cater for many business requirements like ERP, CRM , E-Business ect. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/SZhfkiQ8KiI/AAAAAAAAAII/zeywSEaVWFY/s1600-h/1847194001%5B3%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="247" alt="1847194001" src="http://lh6.ggpht.com/_honSoB4kSVs/SZhfmEjBsHI/AAAAAAAAAIM/UH6CbcuCWTs/1847194001_thumb%5B1%5D.png?imgmax=800" width="204" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Apache OFBiz development book&amp;#160; is written in such a manner that even a total new developer to the domain can quickly get started with the software. It begins with the all important aspect of how to obtain the software, how to install and getting started which is absolutely&amp;#160; vital.The first chapter contains details on even setting up&amp;#160; the eclipse devolvement environment for OFBiz as well.&amp;#160; The authors only expect the knowledge of java language since the software is in java.&lt;/p&gt;  &lt;p&gt;OFBiz is a software that is built around the popular MVC ( Model View Controller ) architecture. So the book also focuses on each of these aspects thought the book. The first set of chapters focus on explaining the View aspect.&amp;#160; For any business application with a front end, the look and feel of the front end, the maintainability and usability of the front end is absolutely vital and the book covers a great deal about it. &lt;/p&gt;  &lt;p&gt;From the 2nd to 6 chapter, the book covers creating a webapp with OFBiz, the how to customize it. The book goes in to great deal of detail in explaining the creating a component in OFbiz and then enhancing it systematically. Chapters 3 and four covers screen widgets and Form widgets. It has lots of detail on how to use xml configuration files. Form widgets chapter covers how to create forms , fundamentals of XHTML forms, event handling ect...&lt;/p&gt;  &lt;p&gt;Entire chapter 6 has been dedicated to explaining the control servlet ( Controller of MVC). It&amp;#160; covers all details you need to know.&amp;#160; &lt;/p&gt;  &lt;p&gt;Next the book focuses on the Model aspect (Data) of OFBiz. OFbiz has a Declarative Entity Engine ( Database agnostic ).&amp;#160; And Chapter 7 and 8 covers all the know how stuff needed for managing the data within OFbiz. It covers Entity Engine concepts, creating and using entities relationship types ... and many more. &lt;/p&gt;  &lt;p&gt;Chapter 9 focus on Events. It focus is on Java Events, OFBiz techniques for programing business logic, handling security, .... Chapter 10 covers how to make your business components operate within an SOA model by making services available. It covers in detail &amp;quot;The Service Engine&amp;quot; of the OFbiz software.Also the book covers permissions,&amp;#160; security, configurations with SSL, Apache, controlling look and feel, and vital tips and techniques in managing an deploying in a live environment. &lt;/p&gt;  &lt;p&gt;What i like about this book is the number of code samples, details explanations, and the coverage of each and every aspect of the software. Being a very large software project , OFBiz has lots of things to cover, and authors does an excellent job in putting together&amp;#160; think kind of a comprehensive book. For any developer using OFBiz&amp;#160; this is a must have book. It will not only guide you through all the important aspects of OFBiz, but also will serve as a vital reference to look up when ever you need to figure out something. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-8917015749586712702?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/8917015749586712702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/02/apache-ofbiz-development-book-review.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8917015749586712702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8917015749586712702'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/02/apache-ofbiz-development-book-review.html' title='Apache OFBiz Development ( Book Review )'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_honSoB4kSVs/SZhfmEjBsHI/AAAAAAAAAIM/UH6CbcuCWTs/s72-c/1847194001_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-883339350436950204</id><published>2009-01-29T22:44:00.001-08:00</published><updated>2009-02-04T07:25:31.092-08:00</updated><title type='text'>Making Good SOA Great</title><content type='html'>&lt;p&gt;WSO2 has release a nice booklet on leveraging Carbon platform to make good SOA great. Here is a link to it.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://wso2.org/project/carbon/making_good_soa_great.pdf" href="http://wso2.org/project/carbon/making_good_soa_great.pdf"&gt;http://wso2.org/project/carbon/making_good_soa_great.pdf&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-883339350436950204?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/883339350436950204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/01/making-god-soa-great.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/883339350436950204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/883339350436950204'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/01/making-god-soa-great.html' title='Making Good SOA Great'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-8752437398675692721</id><published>2009-01-26T23:20:00.001-08:00</published><updated>2009-01-26T23:20:26.630-08:00</updated><title type='text'>Nice article on C/C++ calling conventions</title><content type='html'>&lt;p&gt;I found &lt;a href="http://www.codeproject.com/KB/cpp/calling_conventions_demystified.aspx"&gt;this nice article&lt;/a&gt; on code project explaining the use of calling conventions. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-8752437398675692721?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/8752437398675692721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/01/nice-article-on-cc-calling-conventions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8752437398675692721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8752437398675692721'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/01/nice-article-on-cc-calling-conventions.html' title='Nice article on C/C++ calling conventions'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-867547105538488220</id><published>2009-01-22T22:27:00.001-08:00</published><updated>2009-01-22T22:30:43.798-08:00</updated><title type='text'>Deb and RPM packages for WSF/PHP</title><content type='html'>&lt;p&gt;From 1.2.1 release on wards, we did not release the .deb and .rpm packages for WSF/PHP. This was due to number of reasons.When the number of release packages were big, the testing process involved becomes lengthy. Also due the different versions of operating systems these packages have to be built for each version. Since the limited about of resources and time availability, we decided to release only the src [1]packages for linux , and binary and src packages for Windows. Also we released a [2]pecl package for Linux as well. In case you are using the PECL package, you will also need to download and install the dependency library WSF/C[3]. Therefore, it is always easier to download and installed the src package, since it contains all the decencies as well.&amp;#160; How ever we did not remove the installation instructions for deb and rpm since it might be useful if one is using and older release which contained deb and rpm packages or if one wished to build them manually. &lt;/p&gt;  &lt;p&gt;In case you want to build the&amp;#160; binary packages for linux yourself, you can find the installation instructions here.&lt;/p&gt;  &lt;p&gt;[1] &lt;a title="http://dist.wso2.org/products/wsf/php/2.0.0/wso2-wsf-php-src-2.0.0.tar.gz" href="http://dist.wso2.org/products/wsf/php/2.0.0/wso2-wsf-php-src-2.0.0.tar.gz"&gt;http://dist.wso2.org/products/wsf/php/2.0.0/wso2-wsf-php-src-2.0.0.tar.gz&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[2]&lt;a title="http://dist.wso2.org/products/wsf/php/2.0.0/wso2_wsf_php-2.0.0.tgz" href="http://dist.wso2.org/products/wsf/php/2.0.0/wso2_wsf_php-2.0.0.tgz"&gt;http://dist.wso2.org/products/wsf/php/2.0.0/wso2_wsf_php-2.0.0.tgz&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[3] &lt;a href="http://wso2.org/downloads/wsf/c"&gt;http://wso2.org/downloads/wsf/c&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[4]. &lt;a title="http://wso2.org/wiki/display/wsfphp/Release+Process" href="http://wso2.org/wiki/display/wsfphp/Release+Process"&gt;http://wso2.org/wiki/display/wsfphp/Release+Process&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-867547105538488220?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/867547105538488220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/01/deb-and-rpm-packages-for-wsfphp.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/867547105538488220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/867547105538488220'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2009/01/deb-and-rpm-packages-for-wsfphp.html' title='Deb and RPM packages for WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-8686368515009079867</id><published>2008-12-31T09:08:00.001-08:00</published><updated>2009-01-01T23:22:35.850-08:00</updated><title type='text'>RESTful PHP Web Services</title><content type='html'>&lt;p&gt;In the last couple of days, I finished reading the book &lt;a href="http://www.packtpub.com/restful-php-web-services/book" target="_blank"&gt;&amp;quot;RESTful PHP Web Services&amp;quot; by Samisa Abeysinghe.&lt;/a&gt; It is a book that&amp;#160; focuses on explaining the REST architectural style and its application to PHP. It is written with a very nice flow, starting with the basic principles, and gradually developing samples based on the REST principles and towards the end,explains the construction of a real world REST application. So by reading this book , the reader is able&amp;#160; understand, grasp and go on to build real world distributed REST applications. It requires only the knowledge of PHP language from the reader. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.packtpub.com/restful-php-web-services/book"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="1847195520" src="http://lh4.ggpht.com/_honSoB4kSVs/SVxeFbf674I/AAAAAAAAAIE/YPvjeLI7xDQ/1847195520%5B3%5D.jpg?imgmax=800" width="199" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In addition to explaining the&amp;#160; REST architectural style with interesting examples and applications, the book also explores the REST frameworks that are available, which can be used to implement your applications, instead of writing your own code from scratch. There are two whole chapters dedicated to explore the building of REST Client and Services using &lt;a href="http://framework.zend.com/" target="_blank"&gt;Zend Framework&lt;/a&gt;&amp;#160; and &lt;a href="http://wso2.org/projects/wsf/php" target="_blank"&gt;WSO2 WSF-PHP Framework&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Author&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Samisa Abeysinghe has been involved in open source for many many years and has been a main contributor to many highly successful Open Source&amp;#160; Web Services middleware projects like AxisC++, Axis2/C at apache software foundation. In addition, he has been&amp;#160; leading the WSO2 Web Services Framework effort with products like WSF/C, WSF/PHP, WSF/Ruby. Having got years of experience in building distributed middleware, he has put his knowledge and know how in to this book in a very elegant way.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Content of the Book&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The book chapters are organized in such a way that, a user with some PHP language knowledge can go through the book and get all the knowledge he needs to build quality applications incorporating REST principles. The First chapter introduces the&amp;#160; concepts and the tools used to build REST applications.&amp;#160; After explaining the principles and concepts, it also explores existing real world REST applications, how best is to utilize these services to enhance your existing applications and then goes on building real client and services. One great aspect about this book is that it comes with a very nice set of samples with all necessary parts nicely explained. The book also covers, rarely explained know how on debugging REST applications. Throughout the book , the best practices involved in building applications are also highlighted.&lt;/p&gt;  &lt;p&gt;I would highly recommend this book to anyone expecting to master the techniques of building RESTful applications in PHP. Reading the book will enlighten you not only on building RESTful PHP applications, but also in the broad area of building reusable distributed applications. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-8686368515009079867?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/8686368515009079867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/restful-php.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8686368515009079867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8686368515009079867'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/restful-php.html' title='RESTful PHP Web Services'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_honSoB4kSVs/SVxeFbf674I/AAAAAAAAAIE/YPvjeLI7xDQ/s72-c/1847195520%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-8016467319353837006</id><published>2008-12-26T23:57:00.001-08:00</published><updated>2008-12-26T23:57:25.049-08:00</updated><title type='text'>Merry Christmas  and Happy New Year</title><content type='html'>&lt;p&gt;Wish everybody a merry Christmas and a happy New Year !!!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-8016467319353837006?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/8016467319353837006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/merry-christmas-and-happy-new-year.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8016467319353837006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8016467319353837006'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/merry-christmas-and-happy-new-year.html' title='Merry Christmas  and Happy New Year'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4276138305796441007</id><published>2008-12-20T22:27:00.001-08:00</published><updated>2008-12-20T22:28:49.819-08:00</updated><title type='text'>REST Vs SOAP</title><content type='html'>&lt;p&gt;Both REST ( Representational states transfer) and SOAP is widely adopted techniques for building distributed systems. REST is an architectural style for implementing systems on top of HTTP infrastructure.&amp;#160; A large number of Specifications has been developed on top of SOAP and there are large number of SOAP stacks both open source and proprietary out there implementing large part of this WS* stack. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Both these d techniques have their advantages and drawbacks. Here are few of the advantages and disadvantages of each paradigm.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;REST&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Advantages &lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;1. Based on few simple principles which are already in wide adoption on the Web itself&lt;/p&gt;    &lt;p&gt;2. Can be implemented very quickly.&lt;/p&gt;    &lt;p&gt;3. Ideal for providing simple API's to the users. (Eq Whether Services, Flicker, Yahoo REST services )&lt;/p&gt;    &lt;p&gt;4. Amount of learning required to get started is minimum in comparison to SOAP&lt;/p&gt;    &lt;p&gt;5. Has a very large following amount the scripting community&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;1. If the system is a very large one, then designing based on REST could become a very complex task. &lt;/p&gt;    &lt;p&gt;2. Implementing Security on a REST system is one major issues. Although HTTPS, and HTTP Authentication can be used,&amp;#160; they only provide transport level security.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;SOAP&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt; &lt;/p&gt;    &lt;p&gt;1. Well designed mature technology&lt;/p&gt;    &lt;p&gt;2. Has been widely adopted in industry&lt;/p&gt;    &lt;p&gt;3. Large number of SOAP stacks available to choose from.&lt;/p&gt;    &lt;p&gt;4. Has support for Both Transport level and message level security which is a big advantage over REST.&lt;/p&gt;    &lt;p&gt;5. Supports multiple protocol bindings ( Not just HTTP)&lt;/p&gt;    &lt;p&gt;6. Ideal for implementing complex enterprise&amp;#160; systems since the SOAP Stacks cater for security, reliability, transactions ect.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;1. Complex in comparison to REST&lt;/p&gt;    &lt;p&gt;2. Big learning curve required&lt;/p&gt;    &lt;p&gt;3. Difficult to debug a complex system&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;One great thing about using WSF/PHP is that it can support Both of these techniques simultaneously. However, if you are building a complex system which require&amp;#160; security, I would always recommend the use of SOAP.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4276138305796441007?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4276138305796441007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/rest-vs-soap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4276138305796441007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4276138305796441007'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/rest-vs-soap.html' title='REST Vs SOAP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4718589497328467705</id><published>2008-12-13T09:22:00.001-08:00</published><updated>2008-12-13T09:22:56.716-08:00</updated><title type='text'>WSO2 Carbon Beta Released</title><content type='html'>&lt;p&gt;WSO2 Carbon is the new Componetized SOA platform from WSO2. Build on OSGi technology, it enables seamless addition of SOA components to an enterprise deployment of SOA infrastructure, as the need arises. &lt;/p&gt;  &lt;p&gt;You can checkout the release notes here.&lt;/p&gt;  &lt;p&gt;WSAS - &lt;a href="http://tinyurl.com/6nmgue"&gt;http://tinyurl.com/6nmgue&lt;/a&gt;    &lt;br /&gt;ESB - &lt;a href="http://tinyurl.com/6gxuwr"&gt;http://tinyurl.com/6gxuwr&lt;/a&gt;    &lt;br /&gt;BPS - &lt;a href="http://tinyurl.com/6jtjjj"&gt;http://tinyurl.com/6jtjjj&lt;/a&gt;    &lt;br /&gt;Registry - &lt;a href="http://tinyurl.com/5vd6j5"&gt;http://tinyurl.com/5vd6j5&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4718589497328467705?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4718589497328467705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/wso2-carbon-beta-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4718589497328467705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4718589497328467705'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/wso2-carbon-beta-released.html' title='WSO2 Carbon Beta Released'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-436204486172282868</id><published>2008-12-12T10:01:00.001-08:00</published><updated>2008-12-12T10:01:11.235-08:00</updated><title type='text'>Getting Started With Axis2/Java</title><content type='html'>&lt;p&gt;Last week, I was involved with some work in Axis2.&amp;#160; I had to set up Axis2. So I decided to write down the steps incase someone who is going to build axis2 from source and setup a development environment to make some modification to axis2.&lt;/p&gt;  &lt;h4&gt;Step1. Install maven2&lt;/h4&gt;  &lt;p&gt;You need to&amp;#160; install Apache Maven 2. Axis2 and many other dependent projects of Axis2 uses maven2 as the build system. Download mavan2 from &lt;a href="http://maven.apache.org/download.html" target="_blank"&gt;Apache maven&amp;#160; site&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I used the zip archive of maven. Once you have download, just extract the zip archive a preferred location. For example, my maven2 directory is E:\javasoftware\apache-maven-2.0.9.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/SUKmqOdRn7I/AAAAAAAAAG0/m4oS6BV1_OQ/s1600-h/image%5B5%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="349" alt="image" src="http://lh4.ggpht.com/_honSoB4kSVs/SUKmrjRP4PI/AAAAAAAAAG4/lKE_WdlFpjw/image_thumb%5B3%5D.png?imgmax=800" width="642" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When extracted, you will find an xml file named settings.xml in the conf directory. You can edit this file and set configurations according to your preferences. One of the important settings in this file is the maven repository location. Maven repository is a directory when, maven downloads and keeps dependency jar files for building a project. Also the &lt;strong&gt;mvn install &lt;/strong&gt;command will copy the built jar file to this repository at the end of a build process as well.&amp;#160; So I configured the repository to location &lt;/p&gt;  &lt;p&gt;E:\java\respository.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&amp;lt;localRepository&amp;gt;E:\javasoftware\repository&amp;lt;/localRepository&amp;gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;There are other details like configuring a proxy. You can find a &lt;a href="http://maven.apache.org/guides/mini/guide-configuring-maven.html" target="_blank"&gt;detailed guide here.&lt;/a&gt;&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Create an environment variable MAVEN_HOME and set the maven directory as its value.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/SUKmsUzkLrI/AAAAAAAAAG8/CvLOT0h86zQ/s1600-h/image%5B9%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="169" alt="image" src="http://lh3.ggpht.com/_honSoB4kSVs/SUKmtl_SaeI/AAAAAAAAAHA/pCaLRfdXXm0/image_thumb%5B5%5D.png?imgmax=800" width="375" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now add the bin directory to your PATH environment variable.&amp;#160; You can directly add the maven bin directory to path and it will work without the MAVEN_HOME. However, it is always preferable to use an separate&amp;#160; environment variable for ease in conformability.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh5.ggpht.com/_honSoB4kSVs/SUKmud4pbYI/AAAAAAAAAHE/4ZjlSzA399I/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="173" alt="image" src="http://lh5.ggpht.com/_honSoB4kSVs/SUKmwM-6sTI/AAAAAAAAAHI/w2rjUKv-3oQ/image_thumb%5B8%5D.png?imgmax=800" width="386" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now you have configured maven. Open a new command prompt and type &lt;em&gt;&lt;strong&gt;mvn -v &lt;/strong&gt;to verify whether maven is installed properly&lt;/em&gt;.Congratulations, you have successfully configured maven on your system.&lt;/p&gt;  &lt;h4&gt;Step2. Checkout Axis2 and&amp;#160; build using maven2.&lt;/h4&gt;  &lt;p&gt;You need to have an svn client installed on your machine in order to checkout source code from the svn server. Assuming that you have an svn client.&lt;/p&gt;  &lt;p&gt;Checkout Apache Axis2 from &lt;a title="https://svn.apache.org/repos/asf/webservices/axis2/trunk/java" href="https://svn.apache.org/repos/asf/webservices/axis2/trunk/java"&gt;https://svn.apache.org/repos/asf/webservices/axis2/trunk/java&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/SUKmxKPNgXI/AAAAAAAAAHM/qepL4i66nb8/s1600-h/checkout%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="380" alt="checkout" src="http://lh3.ggpht.com/_honSoB4kSVs/SUKmyC6ojuI/AAAAAAAAAHQ/dPJ3KohE6d8/checkout_thumb%5B2%5D.jpg?imgmax=800" width="477" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It will take a few minutes to complete the checkout since, axis2 has large amount of source files.&amp;#160; Once you have taken the checkout, open a command prompt, go to axis2 checkout directory, and type mvn clean install to build the axis2 snapshot.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/SUKmyw9Jk-I/AAAAAAAAAHU/7K5CyzDDxAg/s1600-h/image%5B28%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="166" alt="image" src="http://lh3.ggpht.com/_honSoB4kSVs/SUKmz75RdbI/AAAAAAAAAHY/1MnR0oW3oEQ/image_thumb%5B14%5D.png?imgmax=800" width="409" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It will take some time to download the dependency jars, compile source and run the tests. Since you are building it for the first time, It is better to run the tests as well. In case you want to skip the Unit tests which will consume time, use the option &lt;strong&gt;-Dmaven.test.skip&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Once the build is completed, the resulting axis2-SNAPSHOT.jar file will be copied to the folder &amp;quot;org\apache\axis2\axis2\SNAPSHOT&amp;quot; within your maven repository. &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Use command &lt;strong&gt;mvn -e -X install -Dmaven.test.skip=true -Drelease&lt;/strong&gt;&amp;#160;&amp;#160; to build the distribution. This will include &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;axis2-SNAPSHOT-war.zip     &lt;br /&gt;axis2-SNAPSHOT-src.zip      &lt;br /&gt;axis2-SNAPSHOT-bin.zip&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;&lt;/blockquote&gt;  &lt;p&gt;You can find some useful maven targets for &lt;a href="http://docs.huihoo.com/apache/axis/axis2-1.0-docs/xdocs/faq.html" target="_blank"&gt;axis2 here.&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Step3. Build the project file for IDEA\Eclipse and configure the project&lt;/h4&gt;  &lt;p&gt;Use the command &lt;strong&gt;mvn idea:idea &lt;/strong&gt;to build the IntelliJ &lt;em&gt;IDEA&lt;/em&gt; project file for axis2. Once this command complete's you will find the axis2.jpr project file in the outer most directory.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/SUKm0oXOrRI/AAAAAAAAAHc/dZiVzISWC2w/s1600-h/image%5B33%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="213" alt="image" src="http://lh6.ggpht.com/_honSoB4kSVs/SUKm1tcBVpI/AAAAAAAAAHg/6PKmLHV_-9I/image_thumb%5B17%5D.png?imgmax=800" width="602" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you prefer using eclipse editor, use &lt;strong&gt;mvn eclipse:eclipse&lt;/strong&gt; to build the eclipse project files. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/SUKm2-OZBMI/AAAAAAAAAHk/JyA7ADBOULs/s1600-h/image%5B43%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="281" alt="image" src="http://lh3.ggpht.com/_honSoB4kSVs/SUKm45R9lpI/AAAAAAAAAHo/m55vblfsswM/image_thumb%5B23%5D.png?imgmax=800" width="860" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now double click on the axis2.jpr and open axis2 project in idea IDE. I will go through the steps in configuring the project in IDEA and how to debug ect in my next blog post.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-436204486172282868?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/436204486172282868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/getting-started-with-axis2java.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/436204486172282868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/436204486172282868'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/getting-started-with-axis2java.html' title='Getting Started With Axis2/Java'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_honSoB4kSVs/SUKmrjRP4PI/AAAAAAAAAG4/lKE_WdlFpjw/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-7054216955208903691</id><published>2008-12-06T09:37:00.001-08:00</published><updated>2008-12-06T09:37:48.303-08:00</updated><title type='text'>Apache OFBiz Development ( A beginner's tutorial)</title><content type='html'>&lt;p&gt;Apache Open For Business (OFBiz) is an open source enterprise automation software project.By open source enterprise automation it mean ERP, CRM E-Business/E-Commerce , SCM , Open Source MRP and so on. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.packtpub.com/apache-ofbiz-development-beginners-tutorial/book" target="_blank"&gt;Apache OFBiz Development ( A beginner's tutorial )&lt;/a&gt; is a book from &lt;a href="http://www.PacktPub.com" target="_blank"&gt;Packt Publishing&lt;/a&gt; . It is written by two experienced java developers Jonathan Wong and Rupert Howell. It explains the OFBiz functionality, covers from installing OFBiz to fixing an issue in the actual code :). &lt;/p&gt;  &lt;p&gt;What you will learn this book.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Learn what OFBiz is, and what it is capable of doing for business. &lt;/li&gt;    &lt;li&gt;Install and configure OFBiz to optimize system performance. &lt;/li&gt;    &lt;li&gt;Develop a bespoke OFBiz component. Enhance and modify existing components. &lt;/li&gt;    &lt;li&gt;Save time by learning how to re-use existing OFBiz code. &lt;/li&gt;    &lt;li&gt;Explore Entities &amp;#8211; the basic units of the framework's Model &amp;#8211; to simplify database operations and perform complicated queries. &lt;/li&gt;    &lt;li&gt;Define, create, and call Java services in the Service Engine to build synchronous and asynchronous communications. &lt;/li&gt;    &lt;li&gt;Learn syntax and schema for the OFBiz language: MiniLang. Use MiniLang to speed up your OFBiz development.&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;Acquire valuable development and performance tips that will make your custom applications supreme. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you are into developing or evaluation open source enterprise automation software at apache, this is a must have book.Here is a &lt;a href="http://people.apache.org/~nandika/bookchapter/Apache_OFBiz_Chapter_10.pdf" target="_blank"&gt;sample chapter from the book.&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-7054216955208903691?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/7054216955208903691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/apache-ofbiz-development-beginner.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7054216955208903691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7054216955208903691'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/apache-ofbiz-development-beginner.html' title='Apache OFBiz Development ( A beginner&amp;#39;s tutorial)'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-650433025027037303</id><published>2008-12-04T08:20:00.001-08:00</published><updated>2008-12-04T08:23:38.454-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Command Line'/><category scheme='http://www.blogger.com/atom/ns#' term='WSService'/><category scheme='http://www.blogger.com/atom/ns#' term='Debugging'/><title type='text'>Using command line to debug your Web Service</title><content type='html'>&lt;p&gt;You can actually run your PHP Web Service on the command line. One may wonder what the use of doing that ?&lt;/p&gt;  &lt;p&gt;The main use case is that, you can test your service, without having to write a client. It is specially useful, if your are following the code first approach.&amp;#160; You can find the code for actually doing this in one of the WSF/PHP samples. It is in fact the simplest sample of all. The echo_service.php.&lt;/p&gt;  &lt;p&gt;Lets have a look at how this becomes possible.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;strong&gt;WSService-&amp;gt;reply()&lt;/strong&gt; function takes an optional string argument .&amp;#160; &lt;/p&gt;  &lt;p&gt;1. You can pass the actual XML string expected from the client to the reply function. Then, the service can be executed on the command line to see the actual executed output from an operation.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;However, this would work only in cases where you using SOAP Body dispatching or WS-Addressing.&lt;/p&gt;    &lt;p&gt;In SOAP Body dispatching case, the XML qualified name of the child element of soap body is used to identify the operation which should be invoked.&lt;/p&gt;    &lt;p&gt;In case of WS-Addressing, the addressing action header is used. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2. Lets look at a code sample on implementing this.&amp;#160; This is the echo_service.php sample that comes with WSF/PHP&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;?php&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;$requestPayloadString&lt;/strong&gt; = &lt;font color="#ff0000"&gt;&amp;lt;&amp;lt;&amp;lt;XML        &lt;br /&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;/font&gt;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;&lt;font color="#ff0000"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header/&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:echoString xmlns:ns1=&amp;quot;&lt;/font&gt;&lt;a href="http://wso2.org/wsfphp/samples" ?="?"&gt;&lt;font color="#ff0000"&gt;http://wso2.org/wsfphp/samples&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;text&amp;gt;Hello World!&amp;lt;/text&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ns1:echoString&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;         &lt;br /&gt;&amp;lt;/soapenv:Envelope&amp;gt;         &lt;br /&gt;XML; &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;function echoFunction($inMessage) { &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; $outMessage = new WSMessage($inMessage-&amp;gt;str); &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; return $outMessage;      &lt;br /&gt;} &lt;/p&gt;    &lt;p&gt;$operations = array(&amp;quot;echoString&amp;quot; =&amp;gt; &amp;quot;echoFunction&amp;quot;); &lt;/p&gt;    &lt;p&gt;$service = new WSService(array(&amp;quot;operations&amp;quot; =&amp;gt; $operations));      &lt;br /&gt;&lt;strong&gt;$service-&amp;gt;reply($requestPayloadString); &lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;?&amp;gt;&lt;/p&gt;    &lt;p&gt;I have highlighted the important code segments. Note how the Expected soap envelope string is passed to the reply() function as an argument.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;3. Now you can execute this service on the command line and get the result.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;php echo_service.php&lt;/p&gt;    &lt;p&gt;Now you should see the expected output soap envelope after invoking the echoString operation.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;4. You can also generate the WSDL for the service on the command line as well. Simply set the reply function argument string to &amp;quot;&lt;strong&gt;wsdl&lt;/strong&gt;&amp;quot; or &amp;quot;&lt;strong&gt;wsdl2&lt;/strong&gt;&amp;quot;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;$service-&amp;gt;reply(&amp;quot;wsdl&amp;quot;); &lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;5. &lt;/strong&gt;Now you can re execute the service and get the wsdl for the service on the command line.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;php echo_service.php&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is a very useful feature for debugging your hand coded services&amp;#160; :).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-650433025027037303?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/650433025027037303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/using-command-line-to-debug-your-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/650433025027037303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/650433025027037303'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/using-command-line-to-debug-your-web.html' title='Using command line to debug your Web Service'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-7830301958692109320</id><published>2008-12-03T21:36:00.001-08:00</published><updated>2008-12-03T21:47:29.816-08:00</updated><title type='text'>Resource Oriented Architecture + PHP</title><content type='html'>&lt;p&gt;SOA (Service Oriented Architecture ) has been a buzz word for quite some time now and there are large number of frameworks and stacks to support implementing SOA with SOAP being the widely adopted protocol for the implementation of SOA. Similarly ROA( Resource Oriented Architecture talks about a set of guidelines of implementation of a REST architecture. REST architectures can be easily implemented in PHP and has wide popularity among the PHP community since it is based on HTTP and its principles. You can get a good idea about the rest principles by reading &lt;a href="http://www.infoq.com/articles/rest-introduction" target="_blank"&gt;this article from infoq&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; As you would have found out from the article above,&amp;#160;&amp;#160; Just like SOA talks about services, REST talks about resources.&amp;#160; When using resources, it is important to get the right URL design, then map the correct http methods to the resource. In this &lt;a href="http://people.apache.org/~nandika/bookchapter/Restful_PHP_Webservices_Sample_chapter.pdf" target="_blank"&gt;sample book chapter&lt;/a&gt; from Samisa's&amp;#160; &amp;quot;RESTful PHP Web Services&amp;quot; book, the design of a resource oriented system , and how to implement php clients to access such a rest system is thoroughly&amp;#160; explained. And of course , there is a lot of code samples.&lt;/p&gt;  &lt;p&gt;If you are building a REST system, this book is a must have book. It gives you large number of examples and explains the theory and best practices for REST systems. You can get this &lt;a href="http://www.packtpub.com/restful-php-web-services/book" target="_blank"&gt;book from packtpub.com.&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;em&gt;Useful links.&lt;/em&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;1. &lt;a href="http://www.infoq.com/articles/rest-introduction" target="_blank"&gt;REST article&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. &lt;a href="http://people.apache.org/~nandika/bookchapter/Restful_PHP_Webservices_Sample_chapter.pdf" target="_blank"&gt;Sample Book Chapter&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3. &lt;a href="http://www.packtpub.com/restful-php-web-services/book" target="_blank"&gt;Restful Web Services book&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-7830301958692109320?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/7830301958692109320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/resource-oriented-architecture-php.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7830301958692109320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7830301958692109320'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/12/resource-oriented-architecture-php.html' title='Resource Oriented Architecture + PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-2820718394565428103</id><published>2008-11-16T22:41:00.001-08:00</published><updated>2008-11-16T22:41:22.670-08:00</updated><title type='text'>How to contribute to WSF/PHP project</title><content type='html'>&lt;p&gt;As an open source software development project, WSF/PHP always encourage users,developers to raise bugs, and post patches etc. Of course if you have any great idea related to WSF/PHP or some enhancement to WSF/PHP, you are most welcome to contribute.&lt;/p&gt;  &lt;p&gt;Lets see how you can contribute to WSF/PHP project in various ways. If you encounter a bug, you can first check on the svn to see whether it is already fixed as well.&lt;/p&gt;  &lt;p&gt;1. How do I provide a patch to WSF/PHP .&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step1.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;WSF/PHP uses svn as its version control system. You can checkout the source code of WSF/PHP from the following URL.&lt;/p&gt;  &lt;p&gt;&lt;a title="https://wso2.org/repos/wso2/trunk/wsf/php/" href="https://wso2.org/repos/wso2/trunk/wsf/php/"&gt;https://wso2.org/repos/wso2/trunk/wsf/php/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On windows you can use Tortoise SVN to checkout the source code as follows. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Create a folder to which you will checkout the source code. &lt;/p&gt;  &lt;p&gt;Step2. Check out the code&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/SSERv-0y36I/AAAAAAAAAF0/aq7I-Pg-XhU/s1600-h/img1%5B5%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="img1" src="http://lh3.ggpht.com/_honSoB4kSVs/SSERxNylMvI/AAAAAAAAAF4/0J_YgYVhvyY/img1_thumb%5B1%5D.jpg?imgmax=800" width="234" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_honSoB4kSVs/SSERyXz-voI/AAAAAAAAAF8/U6AuwmwaHpQ/s1600-h/img2%5B18%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="img2" src="http://lh4.ggpht.com/_honSoB4kSVs/SSERz8bblcI/AAAAAAAAAGA/KAGv0MQs3z4/img2_thumb%5B14%5D.jpg?imgmax=800" width="391" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Now you can make any changes or additions, you would like to make.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 3. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Use create patch option in Tortoise svn to create a patch.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_honSoB4kSVs/SSER1BRf9TI/AAAAAAAAAGE/jsxORdTjRp0/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="452" alt="image" src="http://lh6.ggpht.com/_honSoB4kSVs/SSER2hoGF_I/AAAAAAAAAGI/HNGl26pSSmE/image_thumb%5B12%5D.png?imgmax=800" width="357" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;This should provide you with a patch file.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 4. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Go to WSO2 Jira project and select &lt;a href="https://wso2.org/jira/secure/Dashboard.jspa"&gt;WSF/PHP project&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_honSoB4kSVs/SSER3_i__LI/AAAAAAAAAGM/u6-9O-aMJ6E/s1600-h/jira1%5B18%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="495" alt="jira1" src="http://lh5.ggpht.com/_honSoB4kSVs/SSER6XCqWoI/AAAAAAAAAGQ/30zOhxq_bas/jira1_thumb%5B16%5D.jpg?imgmax=800" width="762" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; Select WSF/PHP project&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/SSER78miAZI/AAAAAAAAAGU/IM5CI6IWWBo/s1600-h/jira2%5B15%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="400" alt="jira2" src="http://lh6.ggpht.com/_honSoB4kSVs/SSER9Gx8r7I/AAAAAAAAAGY/oUWf1vdD-UE/jira2_thumb%5B13%5D.jpg?imgmax=800" width="697" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Go to create new issue options and select WSO2 WSF/PHP from projects drop down menu. Then select the issue type&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_honSoB4kSVs/SSER-dqfqZI/AAAAAAAAAGc/X-SqIeOjgsE/s1600-h/jira3%5B13%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="256" alt="jira3" src="http://lh3.ggpht.com/_honSoB4kSVs/SSER_cgspTI/AAAAAAAAAGg/amc_7jy7GhA/jira3_thumb%5B11%5D.jpg?imgmax=800" width="704" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now in this issue form, you can fill out information about the issue.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_honSoB4kSVs/SSESAffcb9I/AAAAAAAAAGk/W6LmDYDhrx0/s1600-h/jira4%5B16%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="341" alt="jira4" src="http://lh3.ggpht.com/_honSoB4kSVs/SSESBhZn9gI/AAAAAAAAAGo/A4mTn1Grp2M/jira4_thumb%5B14%5D.jpg?imgmax=800" width="469" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next fill out the issue description, your testing environment, and attach the patch.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_honSoB4kSVs/SSESCutpsrI/AAAAAAAAAGs/r9u1z8Q5Oeo/s1600-h/jira5%5B17%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="345" alt="jira5" src="http://lh5.ggpht.com/_honSoB4kSVs/SSESEYxKoZI/AAAAAAAAAGw/Xr4h4Pdw2oQ/jira5_thumb%5B15%5D.jpg?imgmax=800" width="628" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now click create button to create the issue.&lt;/p&gt;  &lt;p&gt;This way you can contribute to WSF/PHP project which is used by a large number of PHP Developers worldwide. Looking forward to your contributions. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-2820718394565428103?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/2820718394565428103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/11/how-to-contribute-to-wsfphp-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2820718394565428103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2820718394565428103'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/11/how-to-contribute-to-wsfphp-project.html' title='How to contribute to WSF/PHP project'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_honSoB4kSVs/SSERxNylMvI/AAAAAAAAAF4/0J_YgYVhvyY/s72-c/img1_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1735431945564069404</id><published>2008-11-10T22:17:00.001-08:00</published><updated>2008-11-10T22:17:56.857-08:00</updated><title type='text'>Introduction to reliable messaging part 3</title><content type='html'>&lt;p&gt;In this blog post, we will look at how you can send multiple application messages within a single sequence reliably using&lt;/p&gt;  &lt;p&gt;WSClient API.&amp;#160; For this purpose WSClient has an option named &lt;strong&gt;willContinueSequence&lt;/strong&gt;. If you intend to send only a since application message within your reliable sequence, then you do not need to touch this option. However, when sending multiple application messages, you need to use it as follows.&lt;/p&gt;  &lt;p&gt;1. When sending the first message, set &lt;strong&gt;willContinueSequence&lt;/strong&gt;=&lt;strong&gt;TRUE&lt;/strong&gt; in WSClient.&lt;/p&gt;  &lt;p&gt;2. Send your application messages by using WSMessage object. &lt;/p&gt;  &lt;p&gt;3. When you want to send the final application message to be sent within the reliable sequence, set the option &lt;strong&gt;lastMessage&lt;/strong&gt; to true. &lt;/p&gt;  &lt;p&gt;Here is a code example demonstrating this. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step&lt;/strong&gt; 1. First create an application message.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;$requestPayloadString = &amp;lt;&amp;lt;&amp;lt;XML      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:pingString xmlns:ns1=&amp;quot;&lt;a href="http://wso2.org/wsfphp/samples/reliable" ?="?"&gt;http://wso2.org/wsfphp/samples/reliable&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;text&amp;gt;Hello World!&amp;lt;/text&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ns1:pingString&amp;gt;       &lt;br /&gt;XML;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Step&lt;/strong&gt; 2. Create a &lt;strong&gt;WSClient&lt;/strong&gt; object with &lt;strong&gt;willContinueSequence&lt;/strong&gt; option set to &lt;strong&gt;TRUE&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;$client = new WSClient(array( &amp;quot;reliable&amp;quot; =&amp;gt; TRUE, &amp;quot;useWSA&amp;quot; =&amp;gt; TRUE, &amp;quot;willContinueSequence&amp;quot; =&amp;gt; TRUE));&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;. Create and Send WSMessage objects containing application messages. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;$message = new WSMessage($requestPayloadString,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; array( &amp;quot;to&amp;quot; =&amp;gt; &amp;quot;&lt;a href="http://localhost/samples/reliable/ping_service_rm.php" ?="?"&gt;http://localhost/samples/reliable/ping_service_rm.php&amp;quot;&lt;/a&gt;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;action&amp;quot; =&amp;gt; &lt;a href="http://wso2.org/wsfphp/samples/pingString"&gt;http://wso2.org/wsfphp/samples/pingString&lt;/a&gt;));&lt;/p&gt;    &lt;p&gt;$client-&amp;gt;send($message); &lt;/p&gt;    &lt;p&gt;$message1 = new WSMessage($requestPayloadString,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; array( &amp;quot;to&amp;quot; =&amp;gt; &amp;quot;&lt;a href="http://localhost/samples/reliable/ping_service_rm.php" ?="?"&gt;http://localhost/samples/reliable/ping_service_rm.php&amp;quot;&lt;/a&gt;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;action&amp;quot; =&amp;gt; &amp;quot;&lt;a href="http://wso2.org/wsfphp/samples/pingString" ));?="));?"&gt;http://wso2.org/wsfphp/samples/pingString&amp;quot;));&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; $client-&amp;gt;send($message1);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;. When you want to send the last application message, set the option lastMessage to true in WSMessage object.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;$message2 = new WSMessage($requestPayloadString,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; array( &amp;quot;to&amp;quot; =&amp;gt; &amp;quot;&lt;a href="http://localhost/samples/reliable/ping_service_rm.php" ?="?"&gt;http://localhost/samples/reliable/ping_service_rm.php&amp;quot;&lt;/a&gt;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;action&amp;quot; =&amp;gt; &amp;quot;&lt;a href="http://wso2.org/wsfphp/samples/pingString" ?="?"&gt;http://wso2.org/wsfphp/samples/pingString&amp;quot;&lt;/a&gt;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;lastMessage&amp;quot; =&amp;gt; TRUE)); &lt;/p&gt;    &lt;p&gt;$client-&amp;gt;send($message2);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note that this is a ping service and hence the use of the method send in WSClient. You can similarly use request method as well.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1735431945564069404?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1735431945564069404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/11/introduction-to-reliable-messaging-part_10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1735431945564069404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1735431945564069404'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/11/introduction-to-reliable-messaging-part_10.html' title='Introduction to reliable messaging part 3'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-2165636413624193558</id><published>2008-11-03T08:52:00.001-08:00</published><updated>2008-11-03T08:52:39.559-08:00</updated><title type='text'>Introduction to reliable messaging part 2</title><content type='html'>&lt;p&gt;In my previous blog post, we had a look at a set of messages exchanged between a web services client and a server using WS-Reliable Messaging protocol.&amp;#160; Today, we will explore the API available in WSF/PHP to achieve reliable messaging.&lt;/p&gt;  &lt;p&gt;WS-Reliable messaging API in WSF/PHP is a simple an uncomplicated one. Lets go thorough each of the options available on WS-Client to achieve reliable messaging. &lt;/p&gt;  &lt;p&gt;To enable WS-Reliable Messaging you need to use the &amp;quot;reliable&amp;quot; option in WS-Client. However, for WS-RM to work, it is mandatory to have WS-Addressing enabled. There for you need to&amp;#160; enable WS-Addressing or at least define the &amp;quot;action&amp;quot; option in WS-Client. If the action is present, and &amp;quot;reliable&amp;quot; options is set to &amp;quot;true&amp;quot;, WSF/PHP will automatically enables WS-Addressing and enables Reliable Messaging. So following options are valid on WS-Client to enable reliable messaging.&lt;/p&gt;  &lt;p&gt;1.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;oparray[&amp;quot;action&amp;quot;] = &amp;quot;&lt;a href="http://wso2.org/wso2-wsf-php"&gt;http://wso2.org/wso2-wsf-php&lt;/a&gt;&amp;quot;;&lt;/p&gt;    &lt;p&gt;oparray[&amp;quot;reliable&amp;quot;]= TRUE;&lt;/p&gt;    &lt;p&gt;client = new WSClient(oparray);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;oparray[&amp;quot;action&amp;quot;] =&amp;quot;http://wso2.org/wso2-wsf-php&amp;quot;&lt;/p&gt;    &lt;p&gt;oparray[&amp;quot;reliable&amp;quot;]=1.1&lt;/p&gt;    &lt;p&gt;In this option, we are telling WS-Client to use WS-RM version 1.1.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In my next blog post, we will explore other configuration options of WSClient and WS-Service&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-2165636413624193558?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/2165636413624193558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/11/introduction-to-reliable-messaging-part.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2165636413624193558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2165636413624193558'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/11/introduction-to-reliable-messaging-part.html' title='Introduction to reliable messaging part 2'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1187383882055379334</id><published>2008-10-27T22:52:00.001-07:00</published><updated>2008-10-27T22:52:58.471-07:00</updated><title type='text'>Introduction to Reliable Messaging with WSF/PHP</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;With WSF/PHP you can add reliability to your web services integrations . Due to the&amp;#160; nature of PHP, WSF/PHP supports only single channel reliable messaging. Single channel means you are using the same channel to transmit both the request and response. &lt;/p&gt;  &lt;p&gt;When reliable messaging is used, in addition to the actual message being transmitted , there will be handshake interactions between the client and the service to make sure that the sent message is actually delivered to the service. In addition the , reliable messaging middleware make sure that if the receiver endpoint down, it will keep polling till the message is delivered etc.&lt;/p&gt;  &lt;p&gt;Let see how you can implement a simple reliable messaging client using WSF/PHP.&lt;/p&gt;  &lt;p&gt;These are the requirements.&lt;/p&gt;  &lt;p&gt;1. You service endpoint should be able to handle single channel reliable messaging. &lt;/p&gt;  &lt;p&gt;2.Then you need to enable addressing.&lt;/p&gt;  &lt;p&gt;In RM, the communication happens using a sequence. The initial handshake is to build this sequence, and with a sequence , one or more application messages is transmitted. Once the messaging transmission is complete, the sequence is terminated. &lt;/p&gt;  &lt;p&gt;So the messages exchanged in a single channel scenario is as follows. I am using the actual xml messages exchanged in the echo_client_rm.php sample that comes with WSF/PHP release here. &lt;/p&gt;  &lt;p&gt;1. Client sending the CreateSequence Message to the service.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:To&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:To&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:ReplyTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address&amp;gt;&lt;a href="http://www.w3.org/2005/08/addressing/anonymous"&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsa:ReplyTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:6dbfe9a0-304f-415e-91d1-49d2993bcf56&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:CreateSequence xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:AcksTo xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;&lt;a href="http://www.w3.org/2005/08/addressing/anonymous"&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:AcksTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Offer xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;df2ceab0-b04f-428a-bb94-0cfdcb0a524b&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:Offer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:CreateSequence&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2. Service responding with a CreateSequenceResponse message. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:To&amp;gt;&lt;a href="http://www.w3.org/2005/08/addressing/anonymous"&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;/a&gt;&amp;lt;/wsa:To&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponse"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponse&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:From&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsa:From&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:48020317-4e90-4b79-97ae-2fa9b78c544b&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:RelatesTo wsa:RelationshipType=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing/reply" ?="?"&gt;http://www.w3.org/2005/08/addressing/reply&amp;quot;&lt;/a&gt; xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;urn:uuid:6dbfe9a0-304f-415e-91d1-49d2993bcf56&amp;lt;/wsa:RelatesTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:CreateSequenceResponse xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;8883a8b9-9f6a-4e40-b78a-872a2708a4b3&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Accept xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:AcksTo xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:AcksTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:Accept&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:CreateSequenceResponse&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;3. Client sending the sequence Message&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Sequence soapenv:mustUnderstand=&amp;quot;1&amp;quot; xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt; xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;8883a8b9-9f6a-4e40-b78a-872a2708a4b3&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:MessageNumber xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;1&amp;lt;/wsrm:MessageNumber&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:LastMessage xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;/&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:Sequence&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:To&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:To&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://wso2.org/wsfphp/samples/echoString"&gt;http://wso2.org/wsfphp/samples/echoString&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:8e275ba1-b34b-49c1-92fa-ce86782ff803&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:echoString xmlns:ns1=&amp;quot;&lt;a href="http://wso2.org/wsfphp/samples" ?="?"&gt;http://wso2.org/wsfphp/samples&amp;quot;&lt;/a&gt;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;text&amp;gt;Hello World!&amp;lt;/text&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ns1:echoString&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;4. Service Responding with a SequenceAcknowledgement message. Since this is an echo service, in addition to sending the acknowledgement, the service also initiate a sequence here and send the application message back to the client.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Sequence soapenv:mustUnderstand=&amp;quot;1&amp;quot; xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt; xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;df2ceab0-b04f-428a-bb94-0cfdcb0a524b&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:MessageNumber xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;1&amp;lt;/wsrm:MessageNumber&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:LastMessage xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;/&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:Sequence&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:SequenceAcknowledgement soapenv:mustUnderstand=&amp;quot;0&amp;quot; xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt; xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;8883a8b9-9f6a-4e40-b78a-872a2708a4b3&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:AcknowledgementRange Lower=&amp;quot;1&amp;quot; Upper=&amp;quot;1&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:SequenceAcknowledgement&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://wso2.org/wsfphp/samples/echoString"&gt;http://wso2.org/wsfphp/samples/echoString&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:ReplyTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsa:ReplyTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:From&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsa:From&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:307e881d-8ac7-4cb4-8acf-0eb04831707f&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:RelatesTo wsa:RelationshipType=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing/reply" ?="?"&gt;http://www.w3.org/2005/08/addressing/reply&amp;quot;&lt;/a&gt; xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;urn:uuid:8e275ba1-b34b-49c1-92fa-ce86782ff803&amp;lt;/wsa:RelatesTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:echoString xmlns:ns1=&amp;quot;&lt;a href="http://wso2.org/wsfphp/samples" ?="?"&gt;http://wso2.org/wsfphp/samples&amp;quot;&lt;/a&gt;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;text&amp;gt;Hello World!&amp;lt;/text&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ns1:echoString&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;5. Client send the SequenceAcknowledgement message to the service.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:SequenceAcknowledgement soapenv:mustUnderstand=&amp;quot;0&amp;quot; xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt; xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;df2ceab0-b04f-428a-bb94-0cfdcb0a524b&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:AcknowledgementRange Lower=&amp;quot;1&amp;quot; Upper=&amp;quot;1&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:SequenceAcknowledgement&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:To&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:To&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:3b2b7a50-f962-4027-b240-5eea57142df1&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body/&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;6. Now the service sends back a TerminateSequence Message.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequence"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequence&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:6e8178c6-a566-4010-a77e-d05af67ad21a&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:TerminateSequence xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;df2ceab0-b04f-428a-bb94-0cfdcb0a524b&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:TerminateSequence&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Similarly the client and service exchanges TermianteSequenceResponse messages as well.&lt;/p&gt;  &lt;p&gt;I am sure, now you have some understanding on what actually happens when you try to send a soap message reliably from&amp;#160; one endpoint to another. In my next blog post, we will discuss how to configure WSF/PHP to implement reliable clients and services. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1187383882055379334?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1187383882055379334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/introduction-to-reliable-messaging-with_27.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1187383882055379334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1187383882055379334'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/introduction-to-reliable-messaging-with_27.html' title='Introduction to Reliable Messaging with WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-6865012681769964796</id><published>2008-10-27T22:48:00.001-07:00</published><updated>2008-10-27T22:48:28.693-07:00</updated><title type='text'>Introduction to Reliable Messaging with WSF/PHP</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;With WSF/PHP you can add reliability to your web services integrations . Due to the&amp;#160; nature of php, WSF/PHP supports only single channel reliable messaging. Single channel means you are using the same channel to transmit both the request and response. &lt;/p&gt;  &lt;p&gt;So what is the nature of a reliable messing interaction ?&lt;/p&gt;  &lt;p&gt;When reliable messaging is used, in addition to the actually message being transmitted , there will be handshake interactions between the client and the service to make sure that the send message is actually delivered to the service. In addition the , reliable messaging middleware handles make sure that if the receiver endpoint down, it will keep polling till the message is delivered etc.&lt;/p&gt;  &lt;p&gt;Let see how you can implement a simple reliable messaging client using WSF/PHP.&lt;/p&gt;  &lt;p&gt;These are the requirements.&lt;/p&gt;  &lt;p&gt;1. You service endpoint should be able to handle single channel reliable messaging. &lt;/p&gt;  &lt;p&gt;2.Then you need to enable addressing.&lt;/p&gt;  &lt;p&gt;In RM, the communication happens using a sequence. The initial handshake is to build this sequence, and with a sequence , one or more application messages is transmitted. Once the messaging transmission is complete, the sequence is terminated. &lt;/p&gt;  &lt;p&gt;So the messages exchanged in a single channel scenario is as follows. I am using the actually xml messages exchanged in the echo_client_rm.php sample that comes with WSF/PHP release here. &lt;/p&gt;  &lt;p&gt;1. Client sending the CreateSequence Message to the service.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:To&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:To&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:ReplyTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address&amp;gt;&lt;a href="http://www.w3.org/2005/08/addressing/anonymous"&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsa:ReplyTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:6dbfe9a0-304f-415e-91d1-49d2993bcf56&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:CreateSequence xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:AcksTo xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;&lt;a href="http://www.w3.org/2005/08/addressing/anonymous"&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:AcksTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Offer xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;df2ceab0-b04f-428a-bb94-0cfdcb0a524b&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:Offer&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:CreateSequence&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2. Service responding with a CreateSequenceResponse message. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:To&amp;gt;&lt;a href="http://www.w3.org/2005/08/addressing/anonymous"&gt;http://www.w3.org/2005/08/addressing/anonymous&lt;/a&gt;&amp;lt;/wsa:To&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponse"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponse&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:From&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsa:From&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:48020317-4e90-4b79-97ae-2fa9b78c544b&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:RelatesTo wsa:RelationshipType=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing/reply" ?="?"&gt;http://www.w3.org/2005/08/addressing/reply&amp;quot;&lt;/a&gt; xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;urn:uuid:6dbfe9a0-304f-415e-91d1-49d2993bcf56&amp;lt;/wsa:RelatesTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:CreateSequenceResponse xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;8883a8b9-9f6a-4e40-b78a-872a2708a4b3&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Accept xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:AcksTo xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:AcksTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:Accept&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:CreateSequenceResponse&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;3. Client sending the sequence Message&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Sequence soapenv:mustUnderstand=&amp;quot;1&amp;quot; xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt; xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;8883a8b9-9f6a-4e40-b78a-872a2708a4b3&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:MessageNumber xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;1&amp;lt;/wsrm:MessageNumber&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:LastMessage xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;/&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:Sequence&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:To&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:To&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://wso2.org/wsfphp/samples/echoString"&gt;http://wso2.org/wsfphp/samples/echoString&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:8e275ba1-b34b-49c1-92fa-ce86782ff803&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:echoString xmlns:ns1=&amp;quot;&lt;a href="http://wso2.org/wsfphp/samples" ?="?"&gt;http://wso2.org/wsfphp/samples&amp;quot;&lt;/a&gt;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;text&amp;gt;Hello World!&amp;lt;/text&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ns1:echoString&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;4. Service Responding with a SequenceAcknowledgement message. Since this is an echo service, in addition to sending the acknowledgement, the service also initiate a sequence here and send the application message back to the client.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Sequence soapenv:mustUnderstand=&amp;quot;1&amp;quot; xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt; xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;df2ceab0-b04f-428a-bb94-0cfdcb0a524b&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:MessageNumber xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;1&amp;lt;/wsrm:MessageNumber&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:LastMessage xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;/&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:Sequence&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:SequenceAcknowledgement soapenv:mustUnderstand=&amp;quot;0&amp;quot; xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt; xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;8883a8b9-9f6a-4e40-b78a-872a2708a4b3&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:AcknowledgementRange Lower=&amp;quot;1&amp;quot; Upper=&amp;quot;1&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:SequenceAcknowledgement&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://wso2.org/wsfphp/samples/echoString"&gt;http://wso2.org/wsfphp/samples/echoString&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:ReplyTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsa:ReplyTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:From&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Address&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:Address&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsa:From&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:307e881d-8ac7-4cb4-8acf-0eb04831707f&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:RelatesTo wsa:RelationshipType=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing/reply" ?="?"&gt;http://www.w3.org/2005/08/addressing/reply&amp;quot;&lt;/a&gt; xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;urn:uuid:8e275ba1-b34b-49c1-92fa-ce86782ff803&amp;lt;/wsa:RelatesTo&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:echoString xmlns:ns1=&amp;quot;&lt;a href="http://wso2.org/wsfphp/samples" ?="?"&gt;http://wso2.org/wsfphp/samples&amp;quot;&lt;/a&gt;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;text&amp;gt;Hello World!&amp;lt;/text&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ns1:echoString&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;5. Client send the SequenceAcknowledgement message to the service.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:SequenceAcknowledgement soapenv:mustUnderstand=&amp;quot;0&amp;quot; xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt; xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;df2ceab0-b04f-428a-bb94-0cfdcb0a524b&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:AcknowledgementRange Lower=&amp;quot;1&amp;quot; Upper=&amp;quot;1&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:SequenceAcknowledgement&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:To&amp;gt;&lt;a href="http://localhost/samples/reliable/echo_service_rm.php"&gt;http://localhost/samples/reliable/echo_service_rm.php&lt;/a&gt;&amp;lt;/wsa:To&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:3b2b7a50-f962-4027-b240-5eea57142df1&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body/&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;6. Now the service sends back a TerminateSequence Message.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope" ?="?"&gt;http://www.w3.org/2003/05/soap-envelope&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header xmlns:wsa=&amp;quot;&lt;a href="http://www.w3.org/2005/08/addressing" ?="?"&gt;http://www.w3.org/2005/08/addressing&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:Action&amp;gt;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequence"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequence&lt;/a&gt;&amp;lt;/wsa:Action&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsa:MessageID&amp;gt;urn:uuid:6e8178c6-a566-4010-a77e-d05af67ad21a&amp;lt;/wsa:MessageID&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Header&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:TerminateSequence xmlns:wsrm=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/ws/2005/02/rm" ?="?"&gt;http://schemas.xmlsoap.org/ws/2005/02/rm&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;wsrm:Identifier&amp;gt;df2ceab0-b04f-428a-bb94-0cfdcb0a524b&amp;lt;/wsrm:Identifier&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/wsrm:TerminateSequence&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Similarly the client and service exchanges TermianteSequenceResponse messages as well.&lt;/p&gt;  &lt;p&gt;I am sure, now you have some understanding on what acctually happens when you try to send a soap message reliably from&amp;#160; one endpoint to another. In my next blog post, we will discuss how to configure WSF/PHP to implement reliable clients and services. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-6865012681769964796?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/6865012681769964796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/introduction-to-reliable-messaging-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6865012681769964796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6865012681769964796'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/introduction-to-reliable-messaging-with.html' title='Introduction to Reliable Messaging with WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-2756973165602067760</id><published>2008-10-23T23:01:00.001-07:00</published><updated>2008-10-23T23:02:55.117-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP11'/><category scheme='http://www.blogger.com/atom/ns#' term='Content-Type'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP12'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP Action'/><title type='text'>How to learn the SOAP version by looking at a soap message</title><content type='html'>&lt;p&gt;I have seen number of questions on the forums on issues related to this. So here are some tips on getting to know spec versions by looking at a soap message with http headers.&lt;/p&gt;  &lt;p&gt;Here is an example SOAP1.1 one message. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;POST /samples/echo_service.php HTTP/1.1     &lt;br /&gt;User-Agent: Axis2C/1.5.0      &lt;br /&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;SOAPAction: &amp;quot;&amp;quot;&lt;/strong&gt;        &lt;br /&gt;&lt;/font&gt;Content-Length: 242      &lt;br /&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Content-Type: text/xml&lt;/font&gt;&lt;/strong&gt;;charset=UTF-8      &lt;br /&gt;Host: 127.0.0.1:8080 &lt;/p&gt;    &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://schemas.xmlsoap.org/soap/envelope/""&gt;&lt;font color="#ff0000"&gt;http://schemas.xmlsoap.org/soap/envelope/&lt;/font&gt;&amp;quot;&lt;/a&gt;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:echoString xmlns:ns1=&amp;quot;&lt;a href="http://wso2.org/wsfphp/samples""&gt;http://wso2.org/wsfphp/samples&amp;quot;&lt;/a&gt;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;text&amp;gt;Hello World!&amp;lt;/text&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ns1:echoString&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I have marked highlighted the important points. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In SOAP1.1&lt;/strong&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1.&amp;#160; Content-Type will be&lt;strong&gt; &amp;quot;text/xml&amp;quot;&lt;/strong&gt;.&lt;/p&gt;    &lt;p&gt;2. SOAPAction is a separate HTTP Header&lt;/p&gt;    &lt;p&gt;3. SOAP envelope namespace uri is&amp;#160; &amp;quot;&lt;a href="http://schemas.xmlsoap.org/soap/envelope/""&gt;&lt;font color="#ff0000"&gt;http://schemas.xmlsoap.org/soap/envelope/&lt;/font&gt;&lt;/a&gt;&amp;quot;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Here is a SOAP 1.2 message.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;POST /samples/echo_service.php HTTP/1.1     &lt;br /&gt;User-Agent: Axis2C/1.5.0      &lt;br /&gt;Content-Length: 240      &lt;br /&gt;&lt;font color="#ff0000"&gt;Content-Type: application/soap+xml;&lt;/font&gt;charset=UTF-8;&lt;strong&gt;&lt;font color="#ff0000"&gt;action=&amp;quot;urn:echoString&amp;quot;         &lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;Host: 127.0.0.1:8080 &lt;/p&gt;    &lt;p&gt;&amp;lt;soapenv:Envelope xmlns:soapenv=&amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope""&gt;&lt;font color="#ff0000"&gt;http://www.w3.org/2003/05/soap-envelope&lt;/font&gt;&amp;quot;&lt;/a&gt;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Header/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;soapenv:Body&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:echoString xmlns:ns1=&amp;quot;&lt;a href="http://wso2.org/wsfphp/samples""&gt;http://wso2.org/wsfphp/samples&amp;quot;&lt;/a&gt;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;text&amp;gt;Hello World!&amp;lt;/text&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ns1:echoString&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/soapenv:Body&amp;gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;In SOAP 1.2&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1. Content-Type header is &lt;strong&gt;&amp;quot;application/soap+xml&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;2. SOAP envelope namespace uri is &amp;quot;&lt;a href="http://www.w3.org/2003/05/soap-envelope""&gt;&lt;font color="#ff0000"&gt;http://www.w3.org/2003/05/soap-envelope&lt;/font&gt;&lt;/a&gt;&amp;quot;.&lt;/p&gt;  &lt;p&gt;3. soap action header will go in the Content-type header as 'action'&lt;/p&gt;  &lt;p&gt;Depending on you requirement, you can switch between between soap versions by passing the option &amp;quot;useSOAP&amp;quot;=&amp;gt;1.1 or &amp;quot;useSOAP&amp;quot;=&amp;gt;1.2.&lt;/p&gt;  &lt;p&gt;For a service in WSF/PHP, the soap version does not matter since the framework is capable of handling either type.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-2756973165602067760?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/2756973165602067760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/how-to-learn-soap-version-by-looking-at.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2756973165602067760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2756973165602067760'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/how-to-learn-soap-version-by-looking-at.html' title='How to learn the SOAP version by looking at a soap message'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5205594071120866360</id><published>2008-10-22T00:16:00.001-07:00</published><updated>2008-10-22T00:17:04.560-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WS-Addressing'/><category scheme='http://www.blogger.com/atom/ns#' term='WSSecurity'/><title type='text'>How to Get WS-Security working without WS-Addressing in WSF/PHP</title><content type='html'>&lt;p&gt;Usually, most security scenarios use WS-Addressing. But there are scenarios that uses security without WS-Addressing. Due to configuration&amp;#160; file settings, WSF/PHP works with WS-Security only when WS-Addressing is also used. However, by doing some simple changes to a couple of Xml files, you can get WSF/PHP to support some security scenario's that does not use WS-Addressing.&lt;/p&gt;  &lt;p&gt;Here is what you need to do.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Step One.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Open the axis2.xml file found in was_c directory. In it,&amp;#160; change in &lt;strong&gt;inflow &lt;/strong&gt;by adding another phase named &lt;strong&gt;Security &lt;/strong&gt;as follows. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;phaseOrder type=&amp;quot;&lt;b&gt;inflow&lt;/b&gt;&amp;quot;&amp;gt; &lt;a&gt;-&lt;/a&gt; &amp;lt;!-- System pre defined phases&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; --&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;phase name=&amp;quot;&lt;b&gt;Transport&lt;/b&gt;&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;phase name=&amp;quot;&lt;b&gt;PreDispatch&lt;/b&gt;&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;phase name=&amp;quot;&lt;b&gt;Dispatch&lt;/b&gt;&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;phase name=&amp;quot;&lt;b&gt;PostDispatch&lt;/b&gt;&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;!-- End system pre defined phases&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; --&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;!-- After PostDispatch phase, module or service author can add any phase as required&amp;#160; --&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;!-- User defined phases could be added here --&amp;gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;&amp;lt;phase name=&amp;quot;Security&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;phase name=&amp;quot;&lt;b&gt;Rahas&lt;/b&gt;&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;phase name=&amp;quot;&lt;b&gt;RMPhase&lt;/b&gt;&amp;quot; /&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;/phaseOrder&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I have highlighted the line added in red. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Step two&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Open the module.xml file found in wsf_c/modules/rampart/ directory and change the inflow elements phase name attribute from &amp;quot;PreDispatch&amp;quot; to &amp;quot;Security&amp;quot; as follows.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;inflow&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;handler name=&amp;quot;RampartInHandler&amp;quot; class=&amp;quot;mod_rampart&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;order phase=&amp;quot;&lt;strong&gt;&lt;font color="#ff0000"&gt;Security&lt;/font&gt;&lt;/strong&gt;&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/handler&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/inflow&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Again, I have highlighted the change.&lt;/p&gt;  &lt;p&gt;That's all you need to do to get WS-Security to work without using WS-Addressing. &lt;/p&gt;  &lt;p&gt;Note that,for this to work, you will have to have either SOAPAction or an element that matches the operation name in Soap Body. Of course there are some WS-Security scenarios that cannot work without WS-Addressing.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5205594071120866360?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5205594071120866360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/how-to-get-ws-security-working-without.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5205594071120866360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5205594071120866360'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/how-to-get-ws-security-working-without.html' title='How to Get WS-Security working without WS-Addressing in WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-451299840883914448</id><published>2008-10-21T09:26:00.001-07:00</published><updated>2008-10-21T09:26:09.728-07:00</updated><title type='text'>Tips on avoiding common WSF/PHP installation issues.</title><content type='html'>&lt;p&gt;Here are some useful tips avoid common fit falls in installing WSF/PHP.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Often users complain that When the run the sample clients, they see the response &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;quot;ERROR, WS Client not Found'.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is often due not setting the wsf.home entry not being set correctly. Make sure to set wsf.home directory to point to wsf_c&amp;#160; directory if your are on windows or using pecl installation with WSF/C library installed separately. &lt;/p&gt;  &lt;p&gt;Another reason for this is not adding the wsf_c/lib directory to PATH environment variable if you are on a windows system. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.&amp;#160; WSDL Generation and WSDL mode does not work.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is often due to you not having added the scripts folder found inside the wsfphp distribution to the php.ini's include path entry. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3. Compile WSF/PHP using source gives errors.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This could be due to two issues. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. First you need to have installed the dev-libraries of PHP, Libxml2 and OpenSSL.&lt;/p&gt;    &lt;p&gt;2. Incorrect configure options provided to the configure script. &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Often you do not need to provide any options to the configure script since it is written to work as&lt;/p&gt;    &lt;p&gt;./configure, make , make install sequence. &lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-451299840883914448?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/451299840883914448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/tips-on-avoiding-common-wsfphp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/451299840883914448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/451299840883914448'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/tips-on-avoiding-common-wsfphp.html' title='Tips on avoiding common WSF/PHP installation issues.'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1484002275738840838</id><published>2008-10-20T12:17:00.001-07:00</published><updated>2008-10-20T12:17:46.081-07:00</updated><title type='text'>How to use Attachment Caching with WSF/PHP</title><content type='html'>&lt;p&gt;WSF/PHP 2.0.0 has the support for caching attachments ( writing to a file ). This effectively reduces the amount of memory used when sending and receiving attachments and its specially useful, if your application requires to send or receiving a very large file in the scale of megabytes.&lt;/p&gt;  &lt;p&gt;WSF/PHP adds two php.ini entries in order to allow attachment caching.&lt;/p&gt;  &lt;p&gt;1. wsf.attachment_cache_dir &lt;/p&gt;  &lt;p&gt;2.wsf.enable_attachment_caching&lt;/p&gt;  &lt;p&gt;wsf.attachment_cache dir is the location where the received attachments will be saved.&lt;/p&gt;  &lt;p&gt;wsf.enable_attachment_caching option enables attachment caching. &lt;/p&gt;  &lt;p&gt;By default, attachment caching can be done only for attachments larger than 1 MB.&lt;/p&gt;  &lt;p&gt;Lets see a code sample on how to use this. This is a simple php service, which reads a binary file and send it to the client as an&amp;#160; MTOM attachment.&lt;/p&gt;  &lt;p&gt;&amp;lt;?php&lt;/p&gt;  &lt;p&gt;&lt;font color="#800000"&gt;ini_set(&amp;quot;wsf.enable_attachment_caching&amp;quot;, 1);      &lt;br /&gt;ini_set(&amp;quot;wsf.attachment_cache_dir&amp;quot;,&amp;quot;E:\\&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;function sendAttachment($msg)    &lt;br /&gt;{     &lt;br /&gt;$responsePayloadString = &amp;lt;&amp;lt;&amp;lt;XML     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:download xmlns:ns1=&amp;quot;&lt;a href="http://php.axis2.org/samples/mtom" ?="?"&gt;http://php.axis2.org/samples/mtom&amp;quot;&lt;/a&gt;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:fileName&amp;gt;test.jpg&amp;lt;/ns1:fileName&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ns1:image xmlmime:contentType=&amp;quot;image/jpeg&amp;quot; xmlns:xmlmime=&amp;quot;&lt;a href="http://www.w3.org/2004/06/xmlmime" ?="?"&gt;http://www.w3.org/2004/06/xmlmime&amp;quot;&lt;/a&gt;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xop:Include xmlns:xop=&amp;quot;&lt;a href="http://www.w3.org/2004/08/xop/include" ?="?"&gt;http://www.w3.org/2004/08/xop/include&amp;quot;&lt;/a&gt; &lt;font color="#800000"&gt;href=&amp;quot;cid:myid1&amp;quot;&lt;/font&gt;&amp;gt;&amp;lt;/xop:Include&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ns1:image&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ns1:download&amp;gt;     &lt;br /&gt;XML;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; $responseMessage = new WSMessage($responsePayloadString,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; array( &amp;quot;attachments&amp;quot; =&amp;gt; array(&lt;strong&gt;&lt;font color="#800000"&gt;&amp;quot;myid1&amp;quot; =&amp;gt; &amp;quot;../resources/large_image.jpg&amp;quot;&lt;/font&gt;&lt;/strong&gt;)));&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return $responseMessage;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;} &lt;/p&gt;  &lt;p&gt;$operations = array(&amp;quot;download&amp;quot; =&amp;gt; &amp;quot;sendAttachment&amp;quot;); &lt;/p&gt;  &lt;p&gt;$service = new WSService(array(&amp;quot;operations&amp;quot; =&amp;gt; $operations, &lt;font color="#800000"&gt;&amp;quot;useMTOM&amp;quot; =&amp;gt; TRUE&lt;/font&gt;)); &lt;/p&gt;  &lt;p&gt;$service-&amp;gt;reply();&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;?&amp;gt; &lt;/p&gt;  &lt;p&gt;Now in above code, I have highlighted the important code pieces.&lt;/p&gt;  &lt;p&gt;1. The php ini settings at the top of the code where the attachment_cache_dir is set and attachment caching is enabled.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#800000"&gt;ini_set(&amp;quot;wsf.enable_attachment_caching&amp;quot;, 1);        &lt;br /&gt;ini_set(&amp;quot;wsf.attachment_cache_dir&amp;quot;,&amp;quot;E:\\&amp;quot;); &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2. Setting of a fake content id to which the actual attachment is assigned. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#800000"&gt;href=&amp;quot;cid:myid1&amp;quot;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;3. Instead of setting binary attachment as an string in the attachment array, we should set the actual path to the file.&lt;/p&gt;  &lt;p&gt;array(&lt;strong&gt;&lt;font color="#800000"&gt;&amp;quot;myid1&amp;quot; =&amp;gt; &amp;quot;../resources/large_image.jpg&amp;quot;&lt;/font&gt;&lt;/strong&gt;)&lt;/p&gt;  &lt;p&gt;Thats all you need to do to get attachment caching working. The same technique can be used for the client as well. It will be consuming lot less amount of memory.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1484002275738840838?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1484002275738840838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/how-to-use-attachment-caching-with.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1484002275738840838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1484002275738840838'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/how-to-use-attachment-caching-with.html' title='How to use Attachment Caching with WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5269914733974214383</id><published>2008-10-17T00:06:00.001-07:00</published><updated>2008-10-17T00:07:15.635-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Keystore'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='WSSecurity'/><title type='text'>Using Open SSL to manage Your Keys</title><content type='html'>&lt;p&gt;When it comes to WS-Security, for most of the operations, you will need to have either a certificate, or a key or both. Or you will need to provide a key store. WSF/PHP uses Open SSL library underneath to build WS-Security. Therefore knowing how to work with Open SSL can be really useful.&lt;/p&gt;  &lt;p&gt;Lets go through some of the important commands you need to know to effectively get work done using Open SSL.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Generating a Certificate using Open SSL.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When generating a certificate, you have to decide whether you want an encrypted key or not. If you select the encrypted key option, your key will be protected by a passphrase.&amp;#160; This adds more security to your key since it will be difficult for some one stealing your key to use it. How ever you will need to provide this passphrase, every time you use the key. A self signed certificate is used to sign other certificates. &lt;/p&gt;  &lt;p&gt;Use the command &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;These options tells openssl to generate key length 1024&amp;#160; bits which is valid for 365 days and put both private key and certificate to a file named mycert.pem.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/jayawark/SPg5YFdDtYI/AAAAAAAAADY/0Z03LbTsXpo/s1600-h/image%5B19%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="233" alt="image" src="http://lh5.ggpht.com/jayawark/SPg5ZTBH3EI/AAAAAAAAADc/g__-z5JqD9U/image_thumb%5B13%5D.png?imgmax=800" width="688" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now you will be prompt to answer a number of questions and then OpenSSL will generate you a self signed certificate.&amp;#160; Now if you open the mycert.pem you will see both the private key and the certificate stored there. If you remove the &lt;strong&gt;-nodes &lt;/strong&gt;option, you will be asked to provide a passphrase. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Generating a private key and a matching public key using RSA algorithm.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It is sometimes necessary to generate the private key and public keys separately.&lt;/p&gt;  &lt;p&gt;You can generate an RSA public key using the option &lt;strong&gt;genrsa&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;openssl genrsa -out mykey.pem 2048&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This generates a rsa private key with 2048 bits.&lt;/p&gt;  &lt;p&gt;Using rsa option, you can get the corresponding public key.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;openssl rsa -in mykey.pem -pubout&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3. Creating a PKCS12 Keystore and adding keys to it.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;openssl pkcs12 -export&amp;#160; -out mycert.pfx -in mycert.pem&amp;#160; -name &amp;quot;My Keystore&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This command generates a PKCS12&amp;#160; key store by exporting the above generated certificate. Here you will be asked for a passphrase as well.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5269914733974214383?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5269914733974214383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/using-open-ssl-to-manage-your-keys-part.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5269914733974214383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5269914733974214383'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/using-open-ssl-to-manage-your-keys-part.html' title='Using Open SSL to manage Your Keys'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/jayawark/SPg5ZTBH3EI/AAAAAAAAADc/g__-z5JqD9U/s72-c/image_thumb%5B13%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4409618295884244233</id><published>2008-10-15T23:01:00.001-07:00</published><updated>2008-10-16T22:20:43.711-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Compiling'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP Source'/><title type='text'>How to build PHP from source</title><content type='html'>&lt;p&gt;It is an interesting thing to build PHP source on a Windows Platform. It is extremely useful to build PHP source with various options specially if you wish to write a php extension. Here are some interesting tips on how you can build PHP source on a windows platform. &lt;/p&gt;  &lt;p&gt;First you need to download the following dependencies. &lt;/p&gt;  &lt;p&gt;1. You need to have visual studio or windows platform SDK install on you machine in order to have the required compiler and build tools.&lt;/p&gt;  &lt;p&gt;2. You need to download the PHP build dependencies. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;These include &lt;/p&gt;    &lt;p&gt;1. &lt;a href="http://pecl2.php.net/downloads/php-windows-builds/php-libs/binary-tools.zip"&gt;Binary tools&lt;/a&gt; - Essential&lt;/p&gt;    &lt;p&gt;2. Libxml2&amp;#160;&amp;#160; - Optional&lt;/p&gt;    &lt;p&gt;3. Iconv Optional &lt;/p&gt;    &lt;p&gt;4. Zlib&amp;#160;&amp;#160; - Optional &lt;/p&gt;    &lt;p&gt;5. Apache or other web server that you intend to build modules.&lt;/p&gt;    &lt;p&gt;6. &lt;a href="http://www.php.net/downloads.php"&gt;PHP Source&lt;/a&gt;&amp;#160; - Essential &lt;/p&gt;    &lt;p&gt;7. &lt;a href="http://pecl2.php.net/downloads/php-windows-builds/php-libs/VC8/x86/bindlib-cvs-vc8.zip"&gt;bindlib-cvs-vc8&lt;/a&gt;&amp;#160; - Essential &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Most of these tools can be downloaded from &lt;a href="http://pecl2.php.net/downloads/php-windows-builds/php-libs/"&gt;here.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once you have downloaded these tools, you are ready to build PHP from source. &lt;/p&gt;  &lt;p&gt;First unzip all these tools to a directory.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/jayawark/SPbYp16jnwI/AAAAAAAAACY/GcYdDXIPVzc/s1600-h/img1%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="278" alt="img1" src="http://lh6.ggpht.com/jayawark/SPbYqwnkaII/AAAAAAAAACc/2qpYIJiA4u4/img1_thumb%5B1%5D.jpg?imgmax=800" width="331" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next, open visual studio command prompt and add binary-tools\bin directory to the path.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/jayawark/SPbYrhbnNHI/AAAAAAAAACg/s9L-eeEgmcE/s1600-h/img2%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="109" alt="img2" src="http://lh3.ggpht.com/jayawark/SPbYsYZ7RhI/AAAAAAAAACk/aBJVXFOiLd4/img2_thumb%5B1%5D.jpg?imgmax=800" width="418" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now, go to the PHP source extract directory and type,&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;buildconf.bat&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Then run &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;cscript /nologo configure.js --help&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/jayawark/SPbYtf8ZHDI/AAAAAAAAACo/_qPOzYvxinc/s1600-h/img3%5B4%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="478" alt="img3" src="http://lh5.ggpht.com/jayawark/SPbYu6_fcLI/AAAAAAAAACs/m26SUDRIR0A/img3_thumb%5B2%5D.jpg?imgmax=800" width="483" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You will see a large number of options as shown above. &lt;/p&gt;  &lt;p&gt;Next open the config.nice.bat file located in the php source directory and add necessary configure options for your build&lt;/p&gt;  &lt;p&gt;Here are my configuration options&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;cscript&lt;/strong&gt; /nologo configure.js&amp;#160; &amp;quot;&lt;strong&gt;--with-extra-includes&lt;/strong&gt;=E:\phpbuild\bindlib-cvs-vc8\include;E:\Apache22\include;E:\phpbuild\iconv-1.9.2.win32\include;E:\phpbuild\libxml2-2.6.30.win32\include;E:\phpbuild\zlib-1.2.3.win32\include&amp;quot; &lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;strong&gt;--with-extra-libs&lt;/strong&gt;=E:\phpbuild\iconv-1.9.2.win32\lib;E:\phpbuild\libxml2-2.6.30.win32\lib;E:\phpbuild\zlib-1.2.3.win32\lib;E:\Apache22\lib;E:\phpbuild\bindlib-cvs-vc8\lib&amp;quot; &lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;strong&gt;--enable-debug&lt;/strong&gt;&amp;quot;&amp;#160; &amp;quot;&lt;strong&gt;--enable-apache2-2handler&lt;/strong&gt;&amp;quot; %*&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here I am using the option &lt;strong&gt;--with-extra-includes&lt;/strong&gt; to specify the include paths of the dependency libraries.&amp;#160; Similarly &lt;strong&gt;--with-extra-libs&lt;/strong&gt; is used to specify the library path. &lt;/p&gt;  &lt;p&gt;I use the options --enable-debug to make it a debug build.&lt;/p&gt;  &lt;p&gt;Now run config.nice.bat file.&lt;/p&gt;  &lt;p&gt;Next you can try nmake on the command line&amp;#160; and it will build the PHP Source.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4409618295884244233?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4409618295884244233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/how-to-build-php-from-source.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4409618295884244233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4409618295884244233'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/10/how-to-build-php-from-source.html' title='How to build PHP from source'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/jayawark/SPbYqwnkaII/AAAAAAAAACc/2qpYIJiA4u4/s72-c/img1_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-448419919348006941</id><published>2008-09-19T03:20:00.001-07:00</published><updated>2008-09-19T03:23:00.333-07:00</updated><title type='text'>Integrating PHP CMS Systems with Web Services</title><content type='html'>&lt;p&gt;There are many PHP CMS Frameworks which provide the capability to easily handle a quality web site which needs daily maintenance. &lt;a href="http://drupal.org"&gt;Drupal&lt;/a&gt; , &lt;a href="www.joomla.org/"&gt;Joomla&lt;/a&gt; are two such CMS frameworks. These are grate tools for building web sites and managing content. How ever they are functioning in isolation.&amp;#160; When a site grows big, these systems happen to have a lot of valuable data that needs to be integrated with other enterprise systems in order to add business value. &lt;/p&gt;  &lt;p&gt;For example consider an enterprise which has build its main web site using one of these tools and has many registered users to this site. Now the enterprise wants to incorporate these users to another application which the enterprise is running, because it wants to provide single sign on capability without having make the users go through another tiresome registration workflow. Also think a scenario where this other system is running on java or .net. &lt;/p&gt;  &lt;p&gt;One obvious solution would be to share the database used by the CMS framework for the other application. But such a thing would add many complexities and would require one of the systems to be changed which is not doable in many situations. Now if the other system provides some programmable API or a web services API, then there is an elegant way to solve this integration problem.&lt;/p&gt;  &lt;p&gt;With the availability of WSF/PHP&amp;#160; Data Services solution, now you have an easy way to overcome such problems. You can exposed data manipulation operations of the CMS database as web services using WSF/PHP Data Services. Now the two systems can talk to each other using their respective web services and clients, and you have a beautifully integrated solution.&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-448419919348006941?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/448419919348006941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/09/integrating-php-cms-systems-with-web.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/448419919348006941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/448419919348006941'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/09/integrating-php-cms-systems-with-web.html' title='Integrating PHP CMS Systems with Web Services'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5387924233096395698</id><published>2008-09-18T01:00:00.001-07:00</published><updated>2008-09-18T01:01:44.167-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Debugging PHP Web Services</title><content type='html'>&lt;p&gt;One of the difficulties of doing distributed computing, is the difficulty of debugging when things are not going well. It is no exception for Web Services. Since messages are exchanged between services, clients, we have to have some mechanisms&amp;#160; to capture messages, view the soap messages exchanged, some known error messages etc.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Capturing Messages&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;One of the most well known technique in debugging web services calls is to&amp;#160; some tcp message capture tool to capture the messages exchanged. There are few such good tools for this task. &lt;/p&gt;    &lt;p&gt;1. TCPMON tool from apache &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; This is a very simple and easy to use tool which has very wide adoption and is quite popular among developers. You can download this tool from &lt;a href="http://ws.apache.org/commons/tcpmon/"&gt;apache tcpmon site.&lt;/a&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;2. SOAP UI&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; This is another popular tool for debugging and developing SOAP based applications. This tool is able to generate request SOAP message for a given WSDL where you fill out the values and send a valid soap request and response. This is a very useful tool to get started with Web Services. You can download soap UI from &lt;a href="http://www.soapui.org/"&gt;soapui.org&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;3.&amp;#160;&amp;#160; Ethereal &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; This is another tool that is quite useful is capturing and analyzing messages. &lt;a title="http://thud.ethereal.com/" href="http://thud.ethereal.com/"&gt;http://thud.ethereal.com/&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Using debugging functions from framework&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;you can you framework provided functions for debugging. For example WSF/PHP provides two functions getLastRequest() and getLastResponse() on the WSClient class which returns the exchanged request and response messages. Also it provides functions to obtains the returned HTTP headers. Using these, you can also do some debugging. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Logging &lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Logging is another useful techniques to idenfity possible problems. You can look as the wsf_php_client.log and wsf_php_server.log files and get an idea of what went wrong. If you are not able to trace what's wrong using the logs , you can post your problem with the appropriate log messages to the &lt;a href="http://wso2.org/forum/188"&gt;forum&lt;/a&gt;&amp;#160; and get support. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Using Known Error Messages&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Another useful technique is to go through the known set of error messages to locate what went wrong. In WSF/PHP, here are &lt;a href="http://phpwebservices.blogspot.com/2008/02/meaning-of-common-soap-faults-and-error.html"&gt;some of the error messages&lt;/a&gt; you can get.&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5387924233096395698?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5387924233096395698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/09/debugging-web-services.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5387924233096395698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5387924233096395698'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/09/debugging-web-services.html' title='Debugging PHP Web Services'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-9083541845568929123</id><published>2008-09-15T22:41:00.001-07:00</published><updated>2008-09-15T23:13:24.567-07:00</updated><title type='text'>Implementing Rest Service and Client with WSF/PHP</title><content type='html'>&lt;p&gt;WSO2 WSF/PHP 2.0.0 has support for HTTP verbs GET,POST,DELETE and PUT in its REST support alone with the ability to support custom URL mappings. Lets have a look at the WSF/PHP REST API and how to implement a simple client and service.&lt;/p&gt;  &lt;p&gt;Usually, a REST system is build around CRUD ( Create, Read, Update, Delete ) model. &lt;/p&gt;  &lt;p&gt;An HTTP POST Request is a creation of a resource. Similarly a GET request is reading, PUT request is updating and DELETE request is deleting.&lt;/p&gt;  &lt;p&gt;You can find details of a design of a complex &lt;a href="http://bitworking.org/news/201/RESTify-DayTrader"&gt;REST system here.&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Implementing a PHP Web Service that can expose its operations as REST operations.&lt;/h4&gt;  &lt;p&gt;For exposing operations as REST operations, &lt;em&gt;WSService&lt;/em&gt; constructor provides the option &lt;strong&gt;RESTMapping&lt;/strong&gt; to specify each operation with its corresponding HTTP method and Custom URL that is mapped to the operation.&lt;/p&gt;  &lt;p&gt;Lets consider an example.&amp;#160; Consider we have an operations &lt;em&gt;createUserAccount&lt;/em&gt;, &lt;em&gt;updateUserAccount&lt;/em&gt;, &lt;em&gt;deleteUserAccount&lt;/em&gt;, and &lt;em&gt;readUserAccount&lt;/em&gt; as the operations of a simple service called &lt;em&gt;ManageUserAccounts.php &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Then out operations map would be like &lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 94.8%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 74px; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; $operations = array(&lt;span style="color: #006080"&gt;&amp;quot;createUserAccount&amp;quot;&lt;/span&gt; =&amp;gt; &lt;span style="color: #006080"&gt;&amp;quot;createAccount&amp;quot;&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;                &lt;span style="color: #006080"&gt;&amp;quot;updateUserAccount&amp;quot;&lt;/span&gt;=&amp;gt;&lt;span style="color: #006080"&gt;&amp;quot;updateAccount&amp;quot;&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;                 &lt;span style="color: #006080"&gt;&amp;quot;deleteUserAccount&amp;quot;&lt;/span&gt;=&amp;gt;&lt;span style="color: #006080"&gt;&amp;quot;deleteAccount&amp;quot;&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;             &lt;span style="color: #006080"&gt;&amp;quot;readUserAccount&amp;quot;&lt;/span&gt;=&amp;gt;&lt;span style="color: #006080"&gt;&amp;quot;getAccount&amp;quot;&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;Here, the actual php functions implementing the business logic are&amp;#160; &lt;em&gt;createAccount&lt;/em&gt;, &lt;em&gt;updateAccount&lt;/em&gt;, &lt;em&gt;deleteAccount&lt;/em&gt; and &lt;em&gt;getAccount&lt;/em&gt;. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now we can map these operations to an HTTP method and a custom URL, so that we can execute these same operations without having to use SOAP.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 95.92%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 168px; background-color: #f4f4f4"&gt;&lt;br /&gt;  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; $restmap = array (&lt;span style="color: #006080"&gt;&amp;quot;createUserAccount&amp;quot;&lt;/span&gt;=&amp;gt; array(&lt;span style="color: #006080"&gt;&amp;quot;HTTPMethod&amp;quot;&lt;/span&gt;=&amp;gt;&lt;span style="color: #006080"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;,&lt;span style="color: #006080"&gt;&amp;quot;RESTLocation&amp;quot;&lt;/span&gt;=&amp;gt; &lt;span style="color: #006080"&gt;&amp;quot;users&amp;quot;&lt;/span&gt;),&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;           &lt;span style="color: #006080"&gt;&amp;quot;updateUserAccount&amp;quot;&lt;/span&gt;=&amp;gt; array(&lt;span style="color: #006080"&gt;&amp;quot;HTTPMethod&amp;quot;&lt;/span&gt;=&amp;gt;&lt;span style="color: #006080"&gt;&amp;quot;PUT&amp;quot;&lt;/span&gt;,&lt;span style="color: #006080"&gt;&amp;quot;RESTLocation&amp;quot;&lt;/span&gt;=&amp;gt; &lt;span style="color: #006080"&gt;&amp;quot;users&amp;quot;&lt;/span&gt;),&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;           &lt;span style="color: #006080"&gt;&amp;quot;deleteUserAccount&amp;quot;&lt;/span&gt;=&amp;gt; array(&lt;span style="color: #006080"&gt;&amp;quot;HTTPMethod&amp;quot;&lt;/span&gt;=&amp;gt;&lt;span style="color: #006080"&gt;&amp;quot;DELETE&amp;quot;&lt;/span&gt;,&lt;span style="color: #006080"&gt;&amp;quot;RESTLocation&amp;quot;&lt;/span&gt;=&amp;gt; &lt;span style="color: #006080"&gt;&amp;quot;users&amp;quot;&lt;/span&gt;),&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;           &lt;span style="color: #006080"&gt;&amp;quot;readUserAccount&amp;quot;&lt;/span&gt;=&amp;gt; array(&lt;span style="color: #006080"&gt;&amp;quot;HTTPMethod&amp;quot;&lt;/span&gt;=&amp;gt;&lt;span style="color: #006080"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;,&lt;span style="color: #006080"&gt;&amp;quot;RESTLocation&amp;quot;&lt;/span&gt;=&amp;gt; &lt;span style="color: #006080"&gt;&amp;quot;users&amp;quot;&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;Note how HTTPMethod is used to specify the HTTP Method that will be used to invoke each operation. For example, we will be using POST method to&amp;#160; invoke &amp;quot;createUserAccount&amp;quot; operation.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;RESTLocation &lt;/strong&gt;option is used to specify a portion of a URL which will makeup the final URL of the operation. For example, if our service URL&amp;#160; is &lt;font color="#ff0080"&gt;&amp;quot;http://localhost/samples/ManageUserAcconts.php&amp;quot;&lt;/font&gt; then, since we have set &amp;quot;&lt;strong&gt;users&lt;/strong&gt;&amp;quot; as our RESTLocation, the final URL that will make the endpoint would be &lt;font color="#ff0080"&gt;&amp;quot;http://localhost/samples/ManageUserAcconts.php/users&amp;quot;&lt;/font&gt;. Note how I have used the same RESTLocation for all four operations. WSF/PHP is able to identify the correct operation using the HTTPMethod when the URL is the same. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Implementing the client&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;WSClient class which is the Client API in WSF/PHP API enables you to make use of&amp;#160; HTTP verbs POST,GET,DELETE and PUT when making a REST style operation invocation.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;First you need to know the REST endpoint where the resource is located. Consider we are invoking the &amp;quot;readUserAccount'' function defined in above service. Then our endpoint URL is&lt;font color="#ff0080"&gt;&amp;#160; &lt;font color="#ff0080"&gt;&amp;quot;http://localhost/samples/ManageUserAcconts.php/users&amp;quot;&lt;/font&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;and HTTPMethod is GET. You can do this request using WSClient as well as using the Web Browser. &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; height: 204px; background-color: #f4f4f4"&gt;&lt;br /&gt;  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt;     $client = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; WSClient( array(&lt;span style="color: #006080"&gt;&amp;quot;to&amp;quot;&lt;/span&gt; =&amp;gt; &lt;span style="color: #006080"&gt;&amp;quot;http://localhost/samples/ManageUserAccounts.php/users&amp;quot;&lt;/span&gt;,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;                                   &lt;span style="color: #006080"&gt;&amp;quot;useSOAP&amp;quot;&lt;/span&gt; =&amp;gt; FALSE,&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;                                   &lt;span style="color: #006080"&gt;&amp;quot;HTTPMethod&amp;quot;&lt;/span&gt; =&amp;gt; &lt;span style="color: #006080"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&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="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     &lt;span style="color: #008000"&gt;/** Request Payload String is the XML String send as argument to the operation, &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; &lt;span style="color: #008000"&gt;        In this case, it will be send in query string */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;                 &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     $responseMessage = $client-&amp;gt;request($requestPayloadString);&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Similarly you can invoke other operations as well.&amp;#160; I will discuss more details in another blog post.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-9083541845568929123?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/9083541845568929123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/09/implementing-rest-service-and-client.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/9083541845568929123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/9083541845568929123'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/09/implementing-rest-service-and-client.html' title='Implementing Rest Service and Client with WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5626623626472821045</id><published>2008-07-31T09:48:00.001-07:00</published><updated>2008-08-03T00:11:35.329-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>New features to be released with WSF/PHP</title><content type='html'>&lt;p&gt;Since the 1.3.2 release of &lt;a href="http://wso2.org/projects/wsf/php"&gt;WSF/PHP&lt;/a&gt;, a lot of new functionality has been added to the extension. In addition to that many bugs have been corrected. Following are some of the new features that will be released with the next release.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Improved &lt;a href="http://www.w3.org/TR/soap12-mtom/"&gt;MTOM&lt;/a&gt;/&lt;a href="http://www.w3.org/TR/SOAP-attachments"&gt;SwA&lt;/a&gt; attachment support&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;One of the limitations of WSF/PHP attachment support was that the service was not handling the http chunked messages. Also there was a limitation on the size of the attachment that can be received by the service. &lt;/p&gt;&lt;p&gt;We have recently fixed this issue. Now both the client and service is able to send binary attachments as chunked. Also with this addition, a service can receive an attachment of any size. &lt;/p&gt;&lt;p&gt;Another limitation we had was that, it was necessary to read the binary file to memory and then set it with the attachments array in order to send an attachment. Now if the file if a large file, this would require a large amount of memory. Now you can set provide the filename and enable caching in order to send the attachment in a memory efficient way. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/PKCS"&gt;PKCS12&lt;/a&gt; Key Store support.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This was one of the essential features for implementing WS-Security. Since a access restricted service would want to provide its functionality to a limited number of previously specified clients, it should have the ability to keep track of the clients public certificates in addition to its private in in a single file. This functionality has been added to WSF/PHP.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Improved &lt;a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm"&gt;REST&lt;/a&gt; Support&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It is quite handy to have the ability to expose you service operations as a REST operation in addition to having it as a soap operation. Now WSF/PHP allows you to map you operations to URL and a HTTP Method  so that you can expose the operation as a REST Style operation as well.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;PHP Data Services Solution&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This is one of the most interesting solutions we have implemented using WSF/PHP. This provides a easy to use framework for exposing the data in you &lt;a href="http://wso2.org/blog/sumedha/2573"&gt;database tables as Web Services&lt;/a&gt;. This is compatible with &lt;a href="http://www.wso2.org/projects/wsas/java"&gt;WSO2 WSAS&lt;/a&gt; Data Service solution as well. This comes with the WSDL Generation, A database abstraction layer which allows you to use multiple databases and many more features. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;WS-Secure Conversation support&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;WSF/PHP is now able to support WS-Secure conversation. WSF/PHP allows you can configure a single service to act as a security token service (STS) in addition to  providing the secured operations. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Operation Level Policy support&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Now you can configure WS Security polices at Operation level with WSF/PHP.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;MTOM Attachment Support for Contract First Web Services&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;This was one of the things that users have been asking for a while. Because of the simplicity of use, Contract first method is preferred by most users. Now WSF/PHP has the support to send and receive attachments in this mode of operation as well.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5626623626472821045?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5626623626472821045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/07/new-features-to-be-released-with-wsfphp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5626623626472821045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5626623626472821045'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/07/new-features-to-be-released-with-wsfphp.html' title='New features to be released with WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1658765735266436510</id><published>2008-07-13T09:48:00.001-07:00</published><updated>2008-07-13T09:51:41.945-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>How to implement replay detection with WSF/PHP</title><content type='html'>&lt;p&gt;There are many ways in which a secure messaging system can be attacked. Replay is one such technique. Consider the following scenario. A malicious user who is capturing the encrypted messages exchanged between the client and a service might not be able to know what the exchanged message contains. But he may still be able to do some damage by replaying the messages, if the service is not able to detect whether a received message happen to be a previously received message or not.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now a web service secured using WSF/PHP has that capability with its API. Ideally scenario for a secure web service is that, first it should detect replay attack and send appropriate fault message. &lt;/p&gt;  &lt;p&gt;Implementing this with WSF/PHP only requires you to implement a function with the specified function signature and pass the name of the function as an argument to the associative array of WSSecurityToken arguments array as &amp;quot;replayDetectionCallback&amp;quot;=&amp;gt;&amp;quot;&amp;lt;function name&amp;quot;&amp;gt;. &lt;/p&gt;  &lt;p&gt;Lets look at a simple example on how this happens. Each message exchanged between the secured web service , and a client has a unique message id. Sometimes it can contain a timestamp as well. So the replay detection function signature is defined as&amp;#160; &lt;font color="#780718"&gt;&lt;font color="#400000"&gt;bool function_name(string message_id, string time_created [,mixed args]).&lt;/font&gt; &lt;/font&gt;Here the args is an optional value which is needed in case you want to pass your own set of arguments to the reply detection function. &lt;/p&gt;  &lt;p&gt;Now what the replay detection function should do maintain a list of message id+time create values, and check against this list where the newly received values are already in the records. If should the function should return false. If the newly received values are not in the list already there, then add them and return true. Now if the function returned false, WSF/PHP will send a SOAP Fault containing appropriate fault data to the client.Otherwise the request will be handled properly.&lt;/p&gt;  &lt;p&gt;The list of records should be persistent. One of the easiest ways to do it is to write to a database. Otherwise you can use a file to maintain this data. In addition to that, you can implement additional features like how long the records should be kept ect. &lt;/p&gt;  &lt;p&gt;Now lets look at a simple code example of a replay detection function. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;font color="#ff0000"&gt;function array_contains($array_of_string, $str) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; foreach ($array_of_string as $value) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(strcmp($value, $str) == 0) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return TRUE;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return FALSE;       &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;function replay_detect_callback($msg_id, $time_created) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $max_duration = 5;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (stristr(PHP_OS, 'WIN')) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $replay_file = &amp;quot;replay.content&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }else{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $replay_file = &amp;quot;/tmp/replay.content&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $list_of_records = array();&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; clearstatcache();&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(file_exists($replay_file))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $length = filesize($replay_file);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $fp_rf = fopen($replay_file, &amp;quot;r&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(flock($fp_rf, LOCK_SH)) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $content = fread($fp_rf, $length);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; flock($fp_rf, LOCK_UN);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $tok_rec = strtok($content, '@');       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while($tok_rec) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $list_of_records[] = $tok_rec;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $tok_rec = strtok('@');       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;Couldn't lock the &amp;quot;.$replay_file.&amp;quot; for reading!&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fclose($fp_rf);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }else {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $fp_rf_w = fopen($replay_file, &amp;quot;w&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(flock($fp_rf_w, LOCK_EX)) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fwrite($fp_rf_w, $msg_id.$time_created.'@');       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; flock($fp_rf_w, LOCK_UN);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;Couldn't lock the &amp;quot;.$replay_file.&amp;quot; for writing!&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fclose($fp_rf_w);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return TRUE;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160; if(array_contains($list_of_records, $msg_id.$time_created)) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return FALSE;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } else {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $elements = count($list_of_records);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if($elements == $max_duration) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $new_rcd_list = array_splice($list_of_records, 1);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $new_rcd_list[] = $msg_id.$time_created;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $fp_rf_w = fopen($replay_file, &amp;quot;w&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(flock($fp_rf_w, LOCK_EX)) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach($new_rcd_list as $value) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fwrite($fp_rf_w, $value.'@');       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; flock($fp_rf_w, LOCK_UN);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;Couldn't lock the file for writing!&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fclose($fp_rf_w);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $list_of_records[] = $msg_id.$time_created;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $fp_rf_w = fopen($replay_file, &amp;quot;w&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(flock($fp_rf_w, LOCK_EX)) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach($list_of_records as $value) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fwrite($fp_rf_w, $value.'@');       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; flock($fp_rf_w, LOCK_UN);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } else {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;Couldn't lock the file for writing!&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fclose($fp_rf_w);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160; return TRUE;      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt; This function is quite simple. it writes each record received to a file named replay.content while implementing the above described logic.&amp;#160; Now lets look at how to use this WSSecurityToken to set this function.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;$security_token = new WSSecurityToken(&lt;/p&gt;  &lt;p&gt;array(&amp;quot;user&amp;quot; =&amp;gt; &amp;quot;Raigama&amp;quot;,&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;quot;password&amp;quot; =&amp;gt; &amp;quot;RaigamaPW&amp;quot;, &lt;/p&gt;  &lt;p&gt;&amp;quot;passwordType&amp;quot; =&amp;gt; &amp;quot;Digest&amp;quot;, &lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;quot;replayDetectionCallback&amp;quot; =&amp;gt; &amp;quot;replay_detect_callback&amp;quot;,&lt;/font&gt;&amp;#160; &lt;br /&gt; &lt;font color="#ff0000"&gt;&amp;quot;enableReplayDetect&amp;quot; =&amp;gt; TRUE&lt;/font&gt;));&lt;/p&gt;  &lt;p&gt;Note how the callback function is specified. In addition to specifying the callback function, you need to enable Replay detection functionality by setting the option &amp;quot;enableReplayDetect&amp;quot;=&amp;gt;TRUE.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1658765735266436510?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1658765735266436510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/07/how-to-implement-replay-detection-with.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1658765735266436510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1658765735266436510'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/07/how-to-implement-replay-detection-with.html' title='How to implement replay detection with WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4256397856096594088</id><published>2008-07-10T22:53:00.001-07:00</published><updated>2008-07-10T22:53:55.265-07:00</updated><title type='text'>PKCS12 Key Store support added</title><content type='html'>&lt;p&gt;WSF/PHP security API now has the pkcs12 key store support. Previously when implementing a service or a client that uses WS-Security, Sometimes it is necessary to make the service limited to a number of pre approved clients. To allow this functionality, it is necessary to obtain the approved clients public&amp;#160; keys and store them in a key store file in addition to the private key used by the service. PKCS12 is the commonly used file format to store X.509 private keys and public key certificates protected by a password.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Following is the API for using a PKCS12 Key store file.&lt;/p&gt;  &lt;p&gt;WSSecurityToken object accepts an options array in its constructor. We added a new option &amp;quot;PKCS12KeyStore&amp;quot; for specifying the key store file as a string. Following is an example service using a key store file.&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;lt;?php&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;function echoFunction($inMessage)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt; { &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;$returnMessage = new WSMessage($inMessage-&amp;gt;str); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;return $returnMessage; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;$keystore = file_get_contents(&amp;quot;../keys/bob_kstore.p12&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;$operations = array(&amp;quot;echoString&amp;quot; =&amp;gt; &amp;quot;echoFunction&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;$sec_array = array(&amp;quot;encrypt&amp;quot; =&amp;gt; TRUE, &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;algorithmSuite&amp;quot; =&amp;gt; &amp;quot;Basic256Rsa15&amp;quot;, &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;securityTokenReference&amp;quot; =&amp;gt; &amp;quot;IssuerSerial&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;$actions = array(&amp;quot;http://php.axis2.org/samples/echoString&amp;quot; =&amp;gt; &amp;quot;echoString&amp;quot;); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;$policy = new WSPolicy(array(&amp;quot;security&amp;quot;=&amp;gt; $sec_array)); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;$sec_token = new WSSecurityToken(array(&amp;quot;PKCS12KeyStore&amp;quot; =&amp;gt; $keystore, &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;user&amp;quot;=&amp;gt;&amp;quot;b&amp;quot;, &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;password&amp;quot;=&amp;gt;&amp;quot;b12345&amp;quot;)); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;$svr = new WSService(array(&amp;quot;actions&amp;quot; =&amp;gt; $actions, &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;operations&amp;quot; =&amp;gt; $operations, &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;policy&amp;quot; =&amp;gt; $policy, &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;securityToken&amp;quot; =&amp;gt; $sec_token)); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;$svr-&amp;gt;reply();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;?&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Note how the PKCS12 key store file is obtained as an string using the file_get_contents function and specified using the option &amp;quot;PKCS12KeyStore&amp;quot; option.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4256397856096594088?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4256397856096594088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/07/pkcs12-key-store-support-added.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4256397856096594088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4256397856096594088'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/07/pkcs12-key-store-support-added.html' title='PKCS12 Key Store support added'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-8684197349313688585</id><published>2008-05-29T10:30:00.001-07:00</published><updated>2008-05-29T10:30:52.908-07:00</updated><title type='text'>WSO2 WSF/PHP 1.3.1 Released</title><content type='html'>&lt;p&gt;We did a bug fix release of 1.3.0 release as &lt;a href="http://phpwebservices.blogspot.com/2008/05/wso2-web-services-framework-for-php_29.html"&gt;1.3.1.&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-8684197349313688585?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/8684197349313688585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/05/wso2-wsfphp-131-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8684197349313688585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8684197349313688585'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/05/wso2-wsfphp-131-released.html' title='WSO2 WSF/PHP 1.3.1 Released'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-6387363376272099182</id><published>2008-05-29T10:27:00.001-07:00</published><updated>2008-05-29T10:27:25.062-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><title type='text'>Tutorial on handling attachments with Axis2/C</title><content type='html'>&lt;p&gt;I wrote a small know how &lt;a href="http://wso2.org/library/3618"&gt;tutorial&lt;/a&gt; on handling MTOM and SwA attachments with &lt;a href="http://ws.apache.org/axis2/c/docs/axis2c_manual.html"&gt;Axis2/C&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-6387363376272099182?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/6387363376272099182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/05/tutorial-on-handling-attachments-with.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6387363376272099182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/6387363376272099182'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/05/tutorial-on-handling-attachments-with.html' title='Tutorial on handling attachments with Axis2/C'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-8165232306317461166</id><published>2008-05-26T21:16:00.001-07:00</published><updated>2008-05-26T21:16:36.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>WSF/PHP 1.3.0 Released</title><content type='html'>&lt;p&gt;After quite a bit of improvements to the WSDL support, we are shipping WSF/PHP 1.3.0. In addition to the improvements of WSDL mode, this release comes with the ability to send and receive SwA attachments, http authentication support as well. You can find the complete release note &lt;a href="http://wso2.org/project/wsf/php/1.3.0/release-note.html"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-8165232306317461166?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/8165232306317461166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/05/wsfphp-130-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8165232306317461166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/8165232306317461166'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/05/wsfphp-130-released.html' title='WSF/PHP 1.3.0 Released'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-7951372574374217385</id><published>2008-05-19T11:20:00.001-07:00</published><updated>2008-05-19T11:20:42.520-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Article on Writing a phpt test case</title><content type='html'>&lt;p&gt;&lt;a href="http://wso2.org/library/3579"&gt;This article&lt;/a&gt; demonstrate how to implement a simple .phpt test case to test your web service.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-7951372574374217385?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/7951372574374217385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/05/article-on-writing-phpt-test-case.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7951372574374217385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7951372574374217385'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/05/article-on-writing-phpt-test-case.html' title='Article on Writing a phpt test case'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-9042900674856794230</id><published>2008-05-12T09:31:00.001-07:00</published><updated>2008-05-12T09:31:34.547-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>WSO2 WSF/PHP 1.3.0 Coming</title><content type='html'>&lt;p&gt;WSF/PHP 1.3.0 will be released this week. We decided to cut down on the number of distributions this time around. In previous releases, we released binary packs which include rmp, deb and bin zip files. We will not be releasing those packs this time around. However if one is interested in creating a binary pack for himself using the source distribution, we are ready to help them. For 1.3.0 release we will have the source packs (zip, tar.gz) ,binary zip package for windows and pecl package. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-9042900674856794230?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/9042900674856794230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/05/wso2-wsfphp-130-coming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/9042900674856794230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/9042900674856794230'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/05/wso2-wsfphp-130-coming.html' title='WSO2 WSF/PHP 1.3.0 Coming'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1315776919011139044</id><published>2008-04-01T03:58:00.001-07:00</published><updated>2008-04-01T03:58:02.299-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='INSTALL'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><title type='text'>PHP Web Services with IIS</title><content type='html'>&lt;p&gt;I wrote an small &lt;a href="http://phpwebservices.blogspot.com/2008/04/php-web-services-with-iis.html"&gt;guide&lt;/a&gt; to installing WSF/PHP in IIS. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1315776919011139044?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1315776919011139044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/04/php-web-services-with-iis.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1315776919011139044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1315776919011139044'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/04/php-web-services-with-iis.html' title='PHP Web Services with IIS'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5444379373905763668</id><published>2008-03-21T08:51:00.001-07:00</published><updated>2008-03-21T08:53:42.257-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Getting the server port in Generated WSDL</title><content type='html'>&lt;p&gt;WSF/PHP generates WSDL for the familiar ?wsdl. Due to a bug, when the server&amp;#160; is run on a port other than 80, the generated wsdl's location attribute of the address was not printing the port. It is now fixed in the current svn head and you can get the latest nightly build. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5444379373905763668?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5444379373905763668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/03/getting-server-port-in-generated-wsdl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5444379373905763668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5444379373905763668'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/03/getting-server-port-in-generated-wsdl.html' title='Getting the server port in Generated WSDL'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-7369738279355215019</id><published>2008-03-16T23:32:00.001-07:00</published><updated>2008-03-16T23:35:02.742-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>WSO2 WSF/PHP 1.2.1 Released</title><content type='html'>&lt;p align="justify"&gt;WSF/PHP Team is pleased to announce the release of WSF/PHP 1.2.1 release. We focused on improving contract first web services support for this release.Schema types support has been improved in this release. All of the current web services stacks for PHP requires the users to go through the WSDL file and pick up the data types and construct his clients and services accordingly. This is quite a cumbersome task. To make this task easier for the user, WSF/PHP 1.2.1 release includes wsdl2php script which can generate the clients and services for a given WSDL. This is an experimental feature that is still it the testing stage. But we hope that is will make the task of implementing Clients and Services easier than ever before. &lt;/p&gt;  &lt;p align="justify"&gt;Another major problem that was fixed in this release was the large attachment support problem. This was an issue that had propagated in to WSF/PHP from WSF/C. Since the changes in WSF/C attachment handling code, the attachments sending and receiving has been made much more efficient. In addition we were able to fix some documentation errors.&amp;#160; Following is the complete feature list for this release.&lt;/p&gt;  &lt;p&gt;1. Client API to consume Web services   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WSMessage class to handle message level options    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WSClient class with both one way and two way service invocation support    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Option of using functions in place of object oriented API with ws_request &lt;/p&gt;  &lt;p&gt;2. Service API to provide Web services   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WSMessage class to handle message level options    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WSService class with support for both one way and two way operations    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Option of using functions in place of object oriented API with ws_reply &lt;/p&gt;  &lt;p&gt;3. Attachments with MTOM   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Binary optimized    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Non-optimized (Base64 binary) &lt;/p&gt;  &lt;p&gt;4. WS-Addressing   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Version 1.0    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Submission &lt;/p&gt;  &lt;p&gt;5. WS-Security    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * UsernameToken and Timestamp     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Encryption    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Signing    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WS-SecurityPolicy based configuration &lt;/p&gt;  &lt;p&gt;6. WS-Reliable Messaging   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Single channel two way reliable messaging &lt;/p&gt;  &lt;p&gt;7. WSDL Generation for Server Side   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WSDL generation based on annotations and function signatures, and     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; serving on ?wsdl or ?wsdl2 requests &lt;/p&gt;  &lt;p&gt;8. WSDL mode support for both client and server side   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Write services and client based on a given WSDL    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * WS-Addressing and WS-SecurityPolicy is supported in WSDL mode    &lt;br /&gt;9. REST Support    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Expose a single service script both as SOAP and REST service &lt;/p&gt;  &lt;p&gt;10. Provide easy to use classes for common services   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * Consume some well known services such as Yahoo search and Flickr     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; and Amazon services using predefined classes &lt;/p&gt;  &lt;p&gt;Experimental Features   &lt;br /&gt;--------------------- &lt;/p&gt;  &lt;p&gt;11. wsdl2php.php script. This script can generate PHP classes for services    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; and clients for a given WSDL to be used with WSDL Mode .&lt;/p&gt;  &lt;p&gt;We welcome you you try out this latest release. You can download it from &lt;a href="http://wso2.org/downloads/wsf/php"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-7369738279355215019?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/7369738279355215019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/03/wso2-wsfphp-121-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7369738279355215019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7369738279355215019'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/03/wso2-wsfphp-121-released.html' title='WSO2 WSF/PHP 1.2.1 Released'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1779037692649852617</id><published>2008-03-13T19:34:00.000-07:00</published><updated>2008-03-13T19:39:46.746-07:00</updated><title type='text'>WSF/PHP Demo site launched</title><content type='html'>Some interesting solutions were implemented on top of WSF/PHP Web Services framework and  now they are available online at &lt;a href="http://labs.wso2.org/wsf/php/"&gt;http://labs.wso2.org/wsf/php/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Some samples, solutions, and links to many related articles are available here. More solutions, and samples will be added to this site regularly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1779037692649852617?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1779037692649852617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/03/wsfphp-demo-site-launched.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1779037692649852617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1779037692649852617'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/03/wsfphp-demo-site-launched.html' title='WSF/PHP Demo site launched'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-7432382183584006010</id><published>2008-02-20T06:25:00.000-08:00</published><updated>2008-02-24T08:35:18.205-08:00</updated><title type='text'>Creating a .net webservice client</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;I was working with getting some .net client and services with WSF/PHP. So thought of providing some usefull information to anyone interested. I will go through the process of getting WSF/PHP services and clients working with .net clients and services in the next few days. I start with writing on how to create a C# web service client, provided that you have a valid wsdl file or and endpoint which provides a valid wsdl for ?wsdl option.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Step1.&lt;/div&gt;&lt;div&gt;In visual Studio, go to new project-&gt;C#-&gt;Windows-&gt;Console application, and give your prefered name for a client. I will use name DemoClient for my client.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_honSoB4kSVs/R7w8RpNdXaI/AAAAAAAAAAk/S7dd8G38bzU/s1600-h/seq1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5169072746132233634" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_honSoB4kSVs/R7w8RpNdXaI/AAAAAAAAAAk/S7dd8G38bzU/s400/seq1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Step 2. &lt;/div&gt;&lt;div&gt;Now you should be able to see the project from solutions explorer. Right click on the project and select the option, add Web Reference.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_honSoB4kSVs/R7w9ppNdXbI/AAAAAAAAAAs/kwIJg566teQ/s1600-h/seq2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5169074257960721842" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_honSoB4kSVs/R7w9ppNdXbI/AAAAAAAAAAs/kwIJg566teQ/s400/seq2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Step3. &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Then In AddWebReference dialog box, provide the url to your wsdl and click on the go button. Next provide a name for the web reference. Now you should have a web reference generated and added to your project. I used the WSDL Mode sample (wsdl_11_service.php) service that comes with WSF/PHP for generating this web reference.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_honSoB4kSVs/R7w_4pNdXcI/AAAAAAAAAA0/_7GjA6IZyNo/s1600-h/seq3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5169076714682015170" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_honSoB4kSVs/R7w_4pNdXcI/AAAAAAAAAA0/_7GjA6IZyNo/s400/seq3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;The name you give for your web reference will become a namespace in your project.  I gave the name PurchaseOrder for the Web Reference. So the proxy code for this web service invocation will be generated with the namespace (Purchase Order). &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Now in the my client code, I import this namespace.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;using DemoClient.PurchaseOrder;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The service described in WSDL will be available as C# class to the client code. The operations defined for each service in the WSDL will become methods of the class. So invoking the web service operation is as simple as creating an instance of the required service class and calling the needed operation on it.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Eg.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;ShippingTradeService stp = new ShippingTradeService();&lt;br /&gt;int type = stp.GetType();&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&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/5702309079039458297-7432382183584006010?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/7432382183584006010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/02/creating-net-webservice-client.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7432382183584006010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7432382183584006010'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/02/creating-net-webservice-client.html' title='Creating a .net webservice client'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_honSoB4kSVs/R7w8RpNdXaI/AAAAAAAAAAk/S7dd8G38bzU/s72-c/seq1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-7528747265698990392</id><published>2008-02-01T05:17:00.000-08:00</published><updated>2008-02-01T07:12:01.677-08:00</updated><title type='text'>Creating a custom header using an xml string</title><content type='html'>Sometimes it is necessary to send data to the service using headers. When doing so, WSF/PHP supports two ways of doing this. It accepts recursive WSHeader arrays in its constructor. Also it is possible to put an xml string directly to the WSHeader constructor.&lt;br /&gt;&lt;br /&gt;WSHeader constructor signature is as follows.&lt;br /&gt;WSHeader:__construct(array options);&lt;br /&gt;&lt;br /&gt;options is an associative array with the following values.&lt;br /&gt;"ns"=&gt; Namespace of the header&lt;br /&gt;"prefix"=&gt; If you want to associate a profix with the namespace, this can be used to set the prefix&lt;br /&gt;"name"=&gt; Localname of the header element&lt;br /&gt;"data"=&gt; string Array of WSHeader objects&lt;br /&gt;"mustUnderstand" =&gt; Bool&lt;br /&gt;"role" =&gt; int&lt;br /&gt;&lt;br /&gt;So when sending a complex header element, one can use the array of WSHeader objects but sometimes this may get quite complex.&lt;br /&gt;&lt;br /&gt;Instead it is now possible to pass the xml string of the header element's child to the "data".&lt;br /&gt;Eg&lt;br /&gt;$child = &amp;lt;&amp;lt;&amp;lt; XML&lt;br /&gt;&amp;lt;product-id&amp;gt;5&amp;lt;/product-id&amp;gt;&lt;br /&gt;XML;&lt;br /&gt;&lt;br /&gt;$header = new WSHeader(array("name"=&gt;"product", "ns"=&gt;'&lt;a href="http://test.org"&gt;http://test.org'&lt;/a&gt;, "data"=&gt;$child));&lt;br /&gt;&lt;br /&gt;How ever this only supports adding a single child element to the header. So hope to extend this to pass an array as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-7528747265698990392?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/7528747265698990392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/02/creating-custom-header-using-xml-string.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7528747265698990392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/7528747265698990392'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/02/creating-custom-header-using-xml-string.html' title='Creating a custom header using an xml string'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-5337643974640194655</id><published>2008-01-31T08:37:00.000-08:00</published><updated>2008-01-31T08:56:05.754-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virus'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Obtaining Soap Fault Information from WSFault Object</title><content type='html'>WSFault Object encapsulates the information related to SOAP Fault and stores them as properties of the WSFault object.&lt;br /&gt;&lt;br /&gt;WSFault object has the following properties.&lt;br /&gt;&lt;br /&gt;Reason, Code, Detail and Role. In addition it has a property "str" which contains the entire Fault xml as a string.&lt;br /&gt;&lt;br /&gt;So Obtaining the Fault and Getting Information from it is very simple.&lt;br /&gt;&lt;br /&gt;All what is required it to catch the exception object, check whether it is actually a WSFault object, and read the fault properties.&lt;br /&gt;&lt;br /&gt;For example, to obtain the Soap Fault Reason , one can use the following code sample.&lt;br /&gt;try{&lt;br /&gt;// Some WSClient related code goes here.&lt;br /&gt;}catch (Exception $e) {&lt;br /&gt;    if ($e instanceof WSFault) {&lt;br /&gt;        printf("Soap Fault: %s\n", $e-&gt;Reason);&lt;br /&gt;    } else {&lt;br /&gt;        printf("Message = %s\n",$e-&gt;getMessage());&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Read documentation from full detail.&lt;br /&gt;&lt;a href="http://wso2.org/project/wsf/php/1.2.0/docs/index.html"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-5337643974640194655?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/5337643974640194655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/obtaining-soap-fault-information-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5337643974640194655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/5337643974640194655'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/obtaining-soap-fault-information-from.html' title='Obtaining Soap Fault Information from WSFault Object'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-3392867657090074811</id><published>2008-01-30T20:48:00.000-08:00</published><updated>2008-01-30T21:08:59.783-08:00</updated><title type='text'>Article on Amazon Online Shoping</title><content type='html'>&lt;a href="http://dimuthuc.blogspot.com/"&gt;Dimuthu&lt;/a&gt; has written an article on how to utilize WSF/PHP extension to do &lt;a href="http://wso2.org/library/3077"&gt;amazon online shoping&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It has the source code too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-3392867657090074811?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/3392867657090074811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/article-on-amazon-online-shoping.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3392867657090074811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/3392867657090074811'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/article-on-amazon-online-shoping.html' title='Article on Amazon Online Shoping'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4550899427519226813</id><published>2008-01-30T03:07:00.000-08:00</published><updated>2008-01-31T08:56:05.754-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virus'/><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Implementing a Service using a PHP Class</title><content type='html'>WSF/PHP supports implementing a service using a php class. One of the advantages of implementing the service Operations with in a class is that is gives the ability to pass arguments to the constructor of the class.&lt;br /&gt;&lt;br /&gt;Following is a simple example.&lt;br /&gt;&lt;br /&gt;class Bar{&lt;br /&gt;&lt;br /&gt;private $value = "";&lt;br /&gt;function __construct($str){&lt;br /&gt;$this-&gt;value = $str;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function echoValue($inMessage){&lt;br /&gt;$responsePayloadString = &amp;lt;&amp;lt;&amp;lt;XML&lt;br /&gt;&amp;lt;ns1:echostring ns1="&amp;lt;a href="&amp;gt;http://wso2.org/projects/wsf/php&amp;lt;/a&amp;gt;"&amp;gt;&lt;br /&gt;&amp;lt;value&amp;gt;$this-&amp;gt;value&amp;lt;/value&amp;gt; &amp;lt;/ns1:echoString&amp;gt;&lt;br /&gt;XML;&lt;br /&gt;return new WSMessage($responsePayloadString);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$operations = array("echoString" =&gt; "echoValue");&lt;br /&gt;&lt;br /&gt;$service = new WSService(&lt;br /&gt;array( "classes" =&gt; array("Bar" =&gt;&lt;br /&gt;array("operations" =&gt;$operations,&lt;br /&gt;"args" =&gt; array("Hello")&lt;br /&gt;)&lt;br /&gt;)));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$service-&gt;reply();&lt;br /&gt;&lt;br /&gt;Note that Bar class is just a very simple PHP class. It's constructor takes a string argument and echo that value.&lt;br /&gt;&lt;br /&gt;Next you have to define the Operations array with is very simple.&lt;br /&gt;Next you need to tell the WSService class about your class, its defined operations and its arguements.&lt;br /&gt;&lt;br /&gt;WSService options array accepts a parameter named "classes" which is an associative array. Its key is the class name and value is another array with contains the "operations" options and "args" options. "operations" are the operations defined in the class. The "args" is an array of arguments to the constructor of the corresponding class. Since the "Bar" class has a single argument constuctor, we are providing an string.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4550899427519226813?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4550899427519226813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/implementing-service-using-php-class.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4550899427519226813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4550899427519226813'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/implementing-service-using-php-class.html' title='Implementing a Service using a PHP Class'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-2308867895144488629</id><published>2008-01-29T23:11:00.000-08:00</published><updated>2008-01-30T02:01:35.211-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Changing the Service Name</title><content type='html'>WSF/PHP uses the php file location to generate a unique service name which is used to store the service configuration information in the Underlying WSF/C Library. We used "" simple to seperate out the folder paths so that the generated string will be unique for a given file.&lt;br /&gt;This was however causing problems with the generated WSDL file as other WSDL parsers complained of this symbol.&lt;br /&gt;&lt;br /&gt;We have now fix this issue by allowing the user to specify a unique service name for a given file. In addition , if the user does not sepcify the "serviceName" option, a service name will be generated using the "_" to separate the folder paths. How ever this may not generate a unique name all the time.&lt;br /&gt;So if you are using WSF/PHP now it is possible to configue your service name.&lt;br /&gt;&lt;br /&gt;Eg&lt;br /&gt;&lt;br /&gt;WSService(array("serviceName"=&gt;"MyService"));&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-2308867895144488629?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/2308867895144488629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/fixing-service-name-problem.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2308867895144488629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/2308867895144488629'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/fixing-service-name-problem.html' title='Changing the Service Name'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1745528138334701209</id><published>2008-01-25T04:48:00.001-08:00</published><updated>2008-01-30T02:01:35.212-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Accessing Flicker REST API</title><content type='html'>Accessing Flicker rest API using php is very simple. All what is needed is to construct the arguements array with the url and invoke the query. You can use the file_get_contents function to do the invocation.&lt;br /&gt;&lt;br /&gt;For example, to invoke the flicker.photos.getRecent method , you can you the following code sample.&lt;br /&gt;&lt;br /&gt;"flickr.photos.getRecent",&lt;br /&gt;'api_key' =&gt; "your api key goes here");&lt;br /&gt;&lt;br /&gt;foreach ($params as $key =&gt; $value) {&lt;br /&gt;$query_string .= "$key=" . urlencode($value) . "&amp;amp;";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$url = "$base_string?$query_string";&lt;br /&gt;&lt;br /&gt;$output = file_get_contents($url);&lt;br /&gt;&lt;br /&gt;echo $output;&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;you can use the urlencode function to encode the array of  parameters and send then use the file_get_contents function to send the reqeust.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1745528138334701209?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1745528138334701209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/accessing-flicker-rest-api.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1745528138334701209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1745528138334701209'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/accessing-flicker-rest-api.html' title='Accessing Flicker REST API'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4897129202647135713</id><published>2008-01-24T21:18:00.000-08:00</published><updated>2008-01-30T02:01:35.213-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Getting WSF/PHP running on Debian</title><content type='html'>Dinesh has posted a very comprehensive &lt;a href="http://nethu.org/2008/01/22/wsfphp-from-the-scratch/"&gt;guide&lt;/a&gt; to getting WSF/PHP working on debian.&lt;br /&gt;It will provide all the details you will need.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4897129202647135713?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4897129202647135713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/getting-wsfphp-running-on-debian.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4897129202647135713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4897129202647135713'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/getting-wsfphp-running-on-debian.html' title='Getting WSF/PHP running on Debian'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-248971001554804450</id><published>2008-01-24T04:14:00.000-08:00</published><updated>2008-01-30T02:03:42.673-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Building WSF/PHP on Windows</title><content type='html'>Building WSF/PHP on Windows platform is quite straight forward provided that you have the necessary tools and the dependency software.&lt;br /&gt;For building WSF/PHP you will need Microsoft Visual Studio. Else you can build using Windows platform SDK and Visual Studio Express edition.&lt;br /&gt;&lt;br /&gt;I will list down the step by step process to building WSF/PHP on windows.&lt;br /&gt;&lt;br /&gt;1. Download the dependencies.&lt;br /&gt;1. &lt;a href="http://www.zlatkovic.com/pub/libxml/"&gt;Libxml2&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://www.zlatkovic.com/pub/libxml/"&gt;Iconv&lt;/a&gt;&lt;br /&gt;3. &lt;a href="http://www.slproweb.com/products/Win32OpenSSL.html"&gt;OpenSSL&lt;/a&gt; ( Download MSI installer )&lt;br /&gt;4. &lt;a href="http://www.php.net/downloads.php"&gt;PHP Source&lt;/a&gt;&lt;br /&gt;5. &lt;a href="http://www.php.net/downloads.php"&gt;PHP Binary&lt;/a&gt;&lt;br /&gt;6. &lt;a href="http://www.php.net/extra/win32build.zip"&gt;PHP Win32 Build tools&lt;/a&gt;. (Win32 build)&lt;br /&gt;7. &lt;a href="http://dist.wso2.org/products/wsf/php/wso2-wsf-php-bin-1.2.0-win32-zc.zip"&gt;WSF/PHP&lt;/a&gt; source zip&lt;br /&gt;8. &lt;a href="http://www.sqlite.org/download.html"&gt;Sqlite&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Next Install OpenSSL.&lt;br /&gt;3. Unzip all the binary dependencies.&lt;br /&gt;4. Unzip WSF/PHP source. Eg E:\wso2-wsf-php-1.2.0&lt;br /&gt;5. Go to E:\wso2-wsf-php-1.2.0 and open configure.in file.&lt;br /&gt;6. Now you will see  an option set like this.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DEBUG = 1&lt;br /&gt;CRUNTIME=/MT&lt;br /&gt;EMBED_MANIFEST=0&lt;br /&gt;LIBXML2_BIN_DIR = E:\libxml2-2.6.30.win32&lt;br /&gt;ICONV_BIN_DIR = E:\iconv-1.9.2.win32&lt;br /&gt;ENABLE_SSL = 1&lt;br /&gt;OPENSSL_BIN_DIR = E:\OpenSSL&lt;br /&gt;WITH_SQLITE = 1&lt;br /&gt;SQLITE_BIN_DIR = "E:\sqlite-3_3_81&lt;br /&gt;SQLITE_SRC_DIR = "E:\sqlite-3_3_81"&lt;br /&gt;&lt;br /&gt;PHP_SRC_DIR = E:\php\php-5.2.5&lt;br /&gt;PHP_BIN_DIR = E:\php\php-5.2.5-Win32&lt;br /&gt;WIN32BUILD_DIR = E:\php\win32build&lt;br /&gt;&lt;br /&gt;I have removed the comments in the configure.in file. All you have to do is to edit these directory locations and set your corresponding directory locations.&lt;br /&gt;If you want a debug build , set DEBUG option to 1.&lt;br /&gt;&lt;br /&gt;7. open a command line.&lt;br /&gt;Go to "C:\Program Files\Microsoft Visual Studio 8\VC\bin" directory and run the vcvars32.bat file. (Note: depending on your VC version, you might have a different location.)&lt;br /&gt;&lt;br /&gt;8. Go to your WSF/PHP extract directory and run the build.bat file.&lt;br /&gt;&lt;br /&gt;If you have set the directory paths correctly, WSF/PHP will be compiled and you will get the binary directory "wso2-wsf-php-bin-1.2.0-win32" built to the same directory.&lt;br /&gt;&lt;br /&gt;Happy Compiling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-248971001554804450?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/248971001554804450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/building-wsfphp-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/248971001554804450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/248971001554804450'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/building-wsfphp-on-windows.html' title='Building WSF/PHP on Windows'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1566437126709548152</id><published>2008-01-23T03:49:00.000-08:00</published><updated>2008-01-30T02:03:42.673-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>WSDL Generation with WSF/PHP</title><content type='html'>&lt;a href="http://wso2.org/projects/wsf/php"&gt;WSF/PHP&lt;/a&gt; supports wsdl generation for the well known serviceuri?wsdl request. In addition to that it generates ?wsdl2 as well.  &lt;br /&gt;&lt;br /&gt;So How can you get make your php service generate the wsdl?&lt;br /&gt;  Well, the steps are quite simple. Since php functions does not contain type information for the input or output parameters, WSF/PHP obtains the type infromation&lt;br /&gt;from the documentation comments. &lt;br /&gt;&lt;br /&gt;Following is an example service with annotations.&lt;br /&gt;&lt;br /&gt;/** BuyItem function&lt;br /&gt; * @param string $item_name of the item to buy&lt;br /&gt; * (maps to the xs:string XML schema type )&lt;br /&gt; * @param int $amount no of items to buy&lt;br /&gt; * (maps to the xs:nonNegativeInteger XML schema type)&lt;br /&gt; * @return float $price total price&lt;br /&gt; *(maps to the xs:double XML schema type )&lt;br /&gt; */&lt;br /&gt;function getPriceFunction($item_name ,$amount)&lt;br /&gt;{&lt;br /&gt;    global $item;&lt;br /&gt;    if ($item_name &amp;&amp; $amount){&lt;br /&gt;        if(isset($item[$item_name])){&lt;br /&gt;            return array("price" =&gt; ($item[$item_name] * $amount));&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;            return NULL;&lt;br /&gt;    }&lt;br /&gt;    return array("price" =&gt; 200043);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;As you can see the doc comments involves the following format.&lt;br /&gt;&lt;br /&gt;@param string $item_name&lt;br /&gt;(maps to the xs:string XML schema type )&lt;br /&gt;This comment says that the function parameter $item_name is of type string and is a function parameter. The second line says the corresponding XML Schema data type which is xs:string.&lt;br /&gt;&lt;br /&gt;Similarly all the parameters and return types are annotated. Once you do that, WSF/PHP is able to process this information and automatically generate the wsdl on demand.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1566437126709548152?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1566437126709548152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/wsdl-generation-with-wsfphp.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1566437126709548152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1566437126709548152'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/wsdl-generation-with-wsfphp.html' title='WSDL Generation with WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-504771695377011228</id><published>2008-01-21T03:57:00.000-08:00</published><updated>2008-01-31T08:56:19.068-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virus'/><title type='text'>Manually Removing Viruses ( Part 1)</title><content type='html'>Last month, I had my machine infected with a couple of viruses and had to delete them manually. In the process I learned quite a lot of stuff about viruses. In addition I came accross some very usefull set of tools.&lt;br /&gt;&lt;br /&gt;1. How do you know whether you system is infected by a virus. Following are the most common set of symtoms of virus infected machine.&lt;br /&gt;1. Disables Task Manager.&lt;br /&gt;2. Disables Command prompt&lt;br /&gt;3. Diables Registry editor&lt;br /&gt;4. Computer Slows down&lt;br /&gt;5. Folder options menu removed&lt;br /&gt;6. Show Hidden files option disabled.&lt;br /&gt;7. My Computer drive now open by double click.&lt;br /&gt;8. Automatic shutdown&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Most of the viruses put an autorun entry when they infect a machine so that, when the system boots up next time, the virus is automatically executed. So even if we find and delete the virus from one location, next moment , the virus will be back there because the virus process is running. Therefore you will need a tool that enables you to see the running processes and autorun entries.&lt;br /&gt;&lt;a href="http://download.sysinternals.com/Files/ProcessExplorer.zip"&gt;&lt;br /&gt;Process Expolrer&lt;/a&gt; and &lt;a href="http://download.sysinternals.com/Files/Autoruns.zip"&gt;Autoruns&lt;/a&gt; are two such very usefull tools.&lt;br /&gt;&lt;br /&gt;Since most of the viruses will have the hidden attribute set, and they disables the show hidden files option, you will need a tool that enables you to see the hidden files. One such tool is WINRAR. &lt;br /&gt;&lt;br /&gt;Before going to to detail on how get rid of viruses, It is important to know how to stay out of viruses. &lt;br /&gt;&lt;br /&gt;The most common way of virus spreading nowadays is through usb pen drives. When you have the autorun feature enabled ( this is the default ), the moment you plug in an &lt;br /&gt;infected pen drive, your machine will also get the virus.&lt;br /&gt;So the first step in preventing viruses is to disable the autorun.&lt;br /&gt;&lt;br /&gt;You can find how to disable autorun from &lt;a href="http://antivirus.about.com/od/securitytips/ht/autorun.htm"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-504771695377011228?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/504771695377011228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/manually-removing-viruses.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/504771695377011228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/504771695377011228'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/manually-removing-viruses.html' title='Manually Removing Viruses ( Part 1)'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-225826420314954480</id><published>2008-01-21T02:48:00.000-08:00</published><updated>2008-01-30T02:03:42.673-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>How to install WSF/PHP on XAMPP</title><content type='html'>There were number of people who ran in to problems in installing &lt;a href="http://wso2.org/projects/wsf/php"&gt;WSF/PHP &lt;/a&gt;. So I created a demonstration on how to do that using &lt;a href="http://www.debugmode.com/wink/"&gt;Wink&lt;/a&gt; tool.&lt;br /&gt;&lt;br /&gt;You can see this demonstration at &lt;a href="http://wso2.org/library/3076"&gt;http://wso2.org/library/3076&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;By the way, Wink is real cool software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-225826420314954480?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/225826420314954480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/how-to-install-wsfphp-on-xampp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/225826420314954480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/225826420314954480'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/how-to-install-wsfphp-on-xampp.html' title='How to install WSF/PHP on XAMPP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-1591623710736824870</id><published>2008-01-18T02:37:00.001-08:00</published><updated>2008-01-30T02:03:42.673-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Using SSL and Web Services with WSF/PHP</title><content type='html'>Sometimes , when you want to send critical information using SOAP, you need to use https protocol. &lt;a href="http://wso2.org/projects/wsf/php"&gt;WSF/PHP&lt;/a&gt; buildin support for this. All you need to do it to provide some simple options and configure the WSClient object.&lt;br /&gt;&lt;br /&gt;Following is an example on how to do that.&lt;br /&gt;&lt;br /&gt;The options used to configure ssl are&lt;br /&gt;&lt;strong&gt;CACert&lt;/strong&gt;, &lt;strong&gt;clientCert&lt;/strong&gt;, and &lt;strong&gt;passphrase&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;CACert is the Certificate authrity's certificate.&lt;br /&gt;clientCert is the client's certificate.&lt;br /&gt;passphrase is the password.&lt;br /&gt;&lt;br /&gt;You can configure the WSClient object with these options when using ssl.&lt;br /&gt;&lt;br /&gt;Eg&lt;br /&gt;&lt;br /&gt;$client = new WSClient(array( "to" =&gt; "some endpoint uri",&lt;br /&gt;"CACert" =&gt; "cacert.pem"));&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-1591623710736824870?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/1591623710736824870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/using-ssl-and-web-services-with-wsfphp.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1591623710736824870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/1591623710736824870'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/using-ssl-and-web-services-with-wsfphp.html' title='Using SSL and Web Services with WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-4493208339209146141</id><published>2008-01-18T02:02:00.000-08:00</published><updated>2008-01-30T02:03:42.674-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSF/PHP'/><title type='text'>Receiving Base64 content with in a soap message in WSF/PHP</title><content type='html'>When you receive a soap message with mtom, the receiving WSMessage object will contain the two properties using which you can extract the binary content. These two are &lt;strong&gt;attachments &lt;/strong&gt;property and &lt;strong&gt;cid2ContentType &lt;/strong&gt;property. But When if you want to receive the binary content received converted to base64, WSF/PHP can do that too.&lt;br /&gt;&lt;br /&gt;All you need to do is to set the responseXOP option in the WSClient options array to FALSE.&lt;br /&gt;&lt;br /&gt;Eg.&lt;br /&gt;&lt;br /&gt;$client = new WSClient(&lt;br /&gt;array( "to" =&gt; "some end point",&lt;br /&gt;"useMTOM" =&gt; TRUE,&lt;br /&gt;"responseXOP" =&gt; TRUE));&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-4493208339209146141?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/4493208339209146141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/receiving-base64-content-with-in-soap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4493208339209146141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/4493208339209146141'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/receiving-base64-content-with-in-soap.html' title='Receiving Base64 content with in a soap message in WSF/PHP'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702309079039458297.post-771784581566243171</id><published>2008-01-17T03:14:00.001-08:00</published><updated>2008-01-17T04:11:15.462-08:00</updated><title type='text'>Using Tcpmon tool in implementing Web Services</title><content type='html'>Tcpmon is a open source project hosted at &lt;a href="http://ws.apache.org/commons/tcpmon/"&gt;Apache&lt;/a&gt;. It is a very usefull easy to use java tool when developing Web Services. Here are some of the screen shots of tcpmon tool&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_honSoB4kSVs/R49BrXxMO0I/AAAAAAAAAAU/G8zEMAIU5J4/s1600-h/tcpmon.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5156412311733025602" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_honSoB4kSVs/R49BrXxMO0I/AAAAAAAAAAU/G8zEMAIU5J4/s320/tcpmon.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As you can see all you need to do is to set listen port and target port.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_honSoB4kSVs/R49A_XxMOzI/AAAAAAAAAAM/McL85FtekWY/s1600-h/tcpmon1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5156411555818781490" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 258px; CURSOR: hand; HEIGHT: 318px" height="359" alt="" src="http://3.bp.blogspot.com/_honSoB4kSVs/R49A_XxMOzI/AAAAAAAAAAM/McL85FtekWY/s320/tcpmon1.jpg" width="289" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Using tcpmon tool you can varify the soap messages exchanged effectively.  When you want to capture the soap messages exchanged between the client and the server, you can use tcpmon to do it very easily. &lt;br /&gt;&lt;br /&gt;Here is a sample senario.&lt;br /&gt;Say you want to capture the soap messages sent and received by a php web service client.&lt;br /&gt;Since Apache2 server runs on port 80, set the target port to 80 and Listen port to some other pot. Eg 8080.&lt;br /&gt;&lt;br /&gt;Now open the client file and set the modify the "to" endpoint as follows.&lt;br /&gt;&lt;br /&gt;I use the echo_client.php sample from &lt;a href="http://wso2.org/projects/wsf/php"&gt;WSF/PHP&lt;/a&gt; here.&lt;br /&gt;&lt;br /&gt;$client = new WSClient(array( "to" =&gt; "http://localhost:&lt;strong&gt;8080&lt;/strong&gt;/samples/echo_service.php" ));&lt;br /&gt;&lt;br /&gt;As you can see, now I am sending the client message to the listen port I set in tcpmon which is&lt;strong&gt; 8080&lt;/strong&gt;. Now when the client is run,  tcpmon will capture the message, display it and also send the message to Apache2 as well.  Above picture 2 shows the output captured .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5702309079039458297-771784581566243171?l=nandikajayawardana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nandikajayawardana.blogspot.com/feeds/771784581566243171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/using-tcpmon-tool-in-implementing-web.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/771784581566243171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702309079039458297/posts/default/771784581566243171'/><link rel='alternate' type='text/html' href='http://nandikajayawardana.blogspot.com/2008/01/using-tcpmon-tool-in-implementing-web.html' title='Using Tcpmon tool in implementing Web Services'/><author><name>nandika</name><uri>http://www.blogger.com/profile/11920576746810295004</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_honSoB4kSVs/SRkk5-AKbxI/AAAAAAAAAEY/81Hp9560gz4/S220/nandika.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_honSoB4kSVs/R49BrXxMO0I/AAAAAAAAAAU/G8zEMAIU5J4/s72-c/tcpmon.jpg' height='72' width='72'/><thr:total>3</thr:total></entry></feed>
