<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>WSO2 Oxygen Tank</title>
  <subtitle>Oxygen for SOA &amp; Web Services Developers</subtitle>
  <link rel="alternate" type="text/html" href="http://wso2.org"/>
  <link rel="self" type="application/atom+xml" href="http://wso2.org/atom/feed"/>
  <id>http://wso2.org/atom/feed</id>
  <updated>2008-05-09T07:51:42+00:00</updated>
  <entry>
    <title>Mocking Web Services</title>
    <link rel="alternate" type="text/html" href="http://wso2.org/library/3587" />
    <id>http://wso2.org/library/3587</id>
    <published>2008-05-13T09:24:04+00:00</published>
    <updated>2008-05-13T09:24:04+00:00</updated>
    <author>
      <name>ayanthi</name>
    </author>
    <category term="News" />
    <category term="Apache Synapse" />
    <category term="best practises" />
    <category term="mocks" />
    <category term="Synapse" />
    <category term="testing" />
    <category term="Web services mocks" />
    <category term="WS" />
    <summary type="html"><![CDATA[<p>The ability to mimic service behavior even before they are implemented - mocking - enables service consumer developers and testers to parallelize their efforts without having to wait for service implementation to complete. Service simulation also provides a light-weight alternative to building expensive reference environments.    ]]></summary>
    <content type="html"><![CDATA[<p>The ability to mimic service behavior even before they are implemented - mocking - enables service consumer developers and testers to parallelize their efforts without having to wait for service implementation to complete. Service simulation also provides a light-weight alternative to building expensive reference environments.<!--break--></p>
<p>Story: <a href="http://www.infoq.com/news/2008/05/WSMock">http://www.infoq.com/news/2008/05/WSMock</a></p>    ]]></content>
  </entry>
  <entry>
    <title>Mock Web Services with Apache Synapse to Develop and Test Web Services</title>
    <link rel="alternate" type="text/html" href="http://wso2.org/library/3586" />
    <id>http://wso2.org/library/3586</id>
    <published>2008-05-13T09:16:16+00:00</published>
    <updated>2008-05-13T09:16:16+00:00</updated>
    <author>
      <name>ayanthi</name>
    </author>
    <category term="Tutorials" />
    <category term="Intermediate" />
    <category term="Apache Synapse" />
    <category term="best practises" />
    <category term="Mock Web services" />
    <category term="mocks" />
    <category term="Synapse" />
    <category term="testing" />
    <category term="WS" />
    <summary type="html"><![CDATA[<p>A new tutorial by <b>Upul Godage</b> describes how to use Apache Synapse to mock Web services for the purpose of development and testing.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>A new tutorial by <b>Upul Godage</b> describes how to use Apache Synapse to mock Web services for the purpose of development and testing.</p>
<!--break-->
<p>Story: <a href="http://www.ibm.com/developerworks/edu/ws-dw-ws-synapse.html?ca=drs-">http://www.ibm.com/developerworks/edu/ws-dw-ws-synapse.html?ca=drs-</a></p>
<p>&nbsp;</p>    ]]></content>
  </entry>
  <entry>
    <title>Writing Simple phpt Test Scripts For PHP Web Services</title>
    <link rel="alternate" type="text/html" href="http://wso2.org/library/3579" />
    <id>http://wso2.org/library/3579</id>
    <published>2008-05-12T06:28:09+00:00</published>
    <updated>2008-05-13T04:34:44+00:00</updated>
    <author>
      <name>dushshantha</name>
    </author>
    <category term="Tutorials" />
    <category term="Intermediate" />
    <category term="PHP" />
    <category term="Testing" />
    <category term="testing" />
    <category term="Tooling" />
    <category term="Web Services" />
    <category term="WSO2 WSF/PHP" />
    <summary type="html"><![CDATA[<p>In this article,<b> Dushshantha Chandradasa</b> explains automated testing of a WSO2 WSF/PHP Web service using phpt.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>In this article,<b> Dushshantha Chandradasa</b> explains automated testing of a WSO2 WSF/PHP Web service using phpt.</p>
<!--break-->
<h2>&nbsp;</h2>
<h2>Introduction</h2>
<p><a href="http://wso2.org/projects/wsf/php">WSO2 Web services Framework for PHP</a> is the richest Web services platform in the PHP world. When you are developing industry standard&nbsp; Web services using WSO2 WSF/PHP, it is really important to test it thoroughly to ensure that it works. Developing large systems always leads us to maintain a huge number of&nbsp; test cases.&nbsp; These test cases should be organized in a way that they are easy to manage.&nbsp; <a href="http://phpt.info/">PHPT</a>&nbsp; brings with it the perfect solution to this concern.</p>
<p>&nbsp;</p>
<h4>Applies To&nbsp;</h4>
<table style="width: 245px; height: 73px;" border="1" cellpadding="1" cellspacing="1">
    <tbody>
        <tr>
            <td><a href="http://wso2.org/projects/wsf/php">WSO2 WSF/PHP</a></td>
            <td>1.3.0</td>
        </tr>
        <tr>
            <td>Environment</td>
            <td>Windows and Linux</td>
        </tr>
    </tbody>
</table>
<h2>&nbsp;</h2>
<h2>Table of Contents</h2>
<ol>
    <li><a href="#problem">The Problem</a></li>
    <li><a href="#solution">The Solution</a></li>
    <li><a href="#implementation">Web service Implementation</a></li>
    <li><a href="#tough">Testing, The Tough Bit</a></li>
    <li><a href="#summary">Summary</a></li>
</ol>
<p>&nbsp;</p>
<h2><a name="problem"></a>The Problem</h2>
<p>When you do serious business online with <a href="http://wso2.org/projects/wsf/php">WSO2 WSF/PHP</a> Web services, its really important to test your Web service thoroughly to make sure that it does exactly what you expect it to do - and does only that! You always need to test all the success cases as well as the failures too. When you make an improvement to your Web service, you always have to make sure that the existing functionality is not broken by with the new changes introduced. The best way to achieve this goal is to maintain a set of carefully designed test cases that are organized in a way that you can very easily run them and see their results. Also you need to be able to add new test cases very easily. But what if you can run the entire set of test cases from a single command? And what if you can, obtain a short and sweet log file with details of passed and failed test cases?&nbsp;</p>
<h2>&nbsp;</h2>
<h2><a name="solution"></a>The Solution</h2>
<p>To achieve these objectives, the best option is an automated test framework where you can define a test suite with all different test cases you want to test your system with. Almost all the test frameworks you can find out there are designed in a way that the user can maintain his/her test cases in a very organized manner. User can add new test cases very easily. At the end of the test run, the framework generates a very easy to understand report, which has the details of passed test cases as well as the failed test cases. <br>
PHP's <a href="http://phpt.info/">phpt</a> is such a test framework that you can use to test WSF/PHP Web service. It has all the capabilities that you can use to solve your Web services testing concerns. <br>
Throughout the following sections of this article, I'll guide you on how to build a very effective test suite to test your WSO2 WSF/PHP Web service. Stay tuned...</p>
<p>&nbsp;</p>
<h2><a name="implementation"></a>Web Service Implementation</h2>
<p>Consider the following simple Web service. It takes two integers from user as input parameters and returns the division of the two values. Imagine that the original requirement specification of the Web service states that the service should return an error message as &quot;division by 0&quot; if the second input parameter is zero (0), but that the developer forgot to implement it.&nbsp;&nbsp;</p>
<pre>
&lt;?php

/*
&nbsp;* div_service.php
&nbsp;* Simple WSF/PHP web service
&nbsp;* Gets 2 integers
&nbsp;* Divide the first by second and return the result.
&nbsp;* If the division by 0, send a fault saying &quot;A division by 0&quot;. This is NOT implemented yet
&nbsp;*/

function divFunction($inMessage) {

&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; $simplexml = new SimpleXMLElement($inMessage-&gt;str);
&nbsp;&nbsp;&nbsp; $value1 = $simplexml-&gt;param1[0];
&nbsp;&nbsp;&nbsp; $value2 = $simplexml-&gt;param2[0];
&nbsp;&nbsp;&nbsp; $Result = $value1 / $value2;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; $resPayload = &lt;&lt;&lt;XML
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ns1:result xmlns:ns1=&quot;http://ws.axis2.org/axis2/php/math&quot;&gt;$Result&lt;/ns1:result&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XML;
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; $returnMessage = new WSMessage($resPayload);
&nbsp;&nbsp;&nbsp; return $returnMessage;
}

$operations = array(&quot;div&quot; =&gt; &quot;divFunction&quot;);
$svr = new WSService(array(&quot;operations&quot; =&gt; $operations));
$svr-&gt;reply($reqPayloadString);

?&gt; 
</pre>
<p>Save the above php script in a file called div_service.php and deploy it with WSF/PHP. Read <a href="http://wso2.org/library/3032">this article</a> for more information on WSO2 WSF/PHP Web services.</p>
<p>&nbsp;</p>
<h2><a name="tough"></a>Testing, The Tough Bit</h2>
<p>Now, you have a Web service deployed. Its time to start testing it. Here, I'll discuss two simple test cases. Our first test case will send two integer values (10 and 5) to the Web service and expect an integer ( 5 ) as the result. Our second test case will test the division by zero case. When you design test cases there are so many factors that you need to consider in order to decide which test data are used. But that piece of theory is out of the scope of this article. The values I've used here are just to demonstrate our main subject.</p>
<p>Let's look at the basic structure of a phpt test case.</p>
<pre>
--TEST--
&nbsp;&nbsp; Description of the test case goes here
--FILE--
&lt;?php 
&nbsp;&nbsp; Your test client written in php
?&gt;
--EXPECT--
Expected output of the above php script
</pre>
<p><br>
This is the basic structure of a simple phpt test case. As the description, the test file name and a simple discription of the test case are given. Under the '--FILE--' section, the php test script is placed. phpt test framework will execute this script and obtain the result and compare it with expected results specified in the --EXPECT-- section of the test case. If the actual result are identical to the expected value, the framework will log the test result as PASSED, FAILED otherwise. <br>
So, Lets start writing our first test case according to this structure. This test case will pass two non-zero integers 10 and 5 to the service and expects it to return 2.<br>
We'll give the name of the test file and a simple description of the test case in the --TEST-- section.</p>
<pre>
--TEST--
Testcase1.phpt - Parses two non-zero values
</pre>
<p>In the --FILE-- section, we will write a simple web service client which passes 10 and 5 to the web service and display the result.</p>
<pre>
--FILE--
&lt;?php
$reqPayloadString = &lt;&lt;&lt;XML
&lt;ns1:div xmlns:ns1=&quot;http://ws.apache.org/axis2/php/math&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param1&gt;10&lt;/param1&gt;
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param2&gt;5&lt;/param2&gt;
&lt;/ns1:div&gt;
XML;

&nbsp;&nbsp;&nbsp;&nbsp; try
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $client = new WSClient(array(
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;to&quot;=&gt;&quot;http://localhost/samples/div_service.php&quot;));
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $response = $client-&gt;request($reqPayloadString);

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($response)
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $simplexml = new SimpleXMLElement($response-&gt;str);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $value1 = $simplexml;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;Response = %s \n&quot;, $value1);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; } 
&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception $e)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($e instanceof WSFault)
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Soap Fault: %s\n&quot;, $e-&gt;Reason);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
   &nbsp;&nbsp;&nbsp; &nbsp;else
 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Message = %s\n&quot;,$e-&gt;getMessage());
 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;  }

?&gt;

</pre>
<p>Our expected result is:<br>
Response = 2<br>
We'll put this in the --EXPECT-- section as follows.</p>
<pre>
--EXPECT--
Response = 2
</pre>
<p>Now, lets save our new test case in a file called Testcase1.phpt. Please note that when you develop real test cases, you need to make sure to give them meaningful names. Your test case should look like the following:</p>
<pre>
--TEST--
Testcase1.phpt - Parses two non-zero values
--FILE--
&lt;?php
$reqPayloadString = &lt;&lt;&lt;XML
&lt;ns1:div xmlns:ns1=&quot;http://ws.apache.org/axis2/php/math&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param1&gt;10&lt;/param1&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param2&gt;5&lt;/param2&gt;
&lt;/ns1:div&gt;
XML;
&nbsp;&nbsp;&nbsp;&nbsp; try
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $client = new WSClient(array(
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;to&quot;=&gt;&quot;http://localhost/samples/div_service.php&quot;));
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $response = $client-&gt;request($reqPayloadString);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($response)
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $simplexml = new SimpleXMLElement($response-&gt;str);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $value1 = $simplexml;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;Response = %s \n&quot;, $value1);

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; } 
&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception $e)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($e instanceof WSFault)
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {
  &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Soap Fault: %s\n&quot;, $e-&gt;Reason);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
   &nbsp;&nbsp;&nbsp; &nbsp;else
 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; {
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Message = %s\n&quot;,$e-&gt;getMessage());
&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; }
?&gt;
--EXPECT--
Response = 2</pre>
<p>Now, Lets try to run and see this test case. To run the test cases we use a utility tool called 'pear' that comes with the php distribution. Please refer php documentation for additional information on pear.  To run your test case, go to the folder in which you saved your Testcase1.phpt file from the command prompt. Now, run the following command.</p>
<pre>
pear run-tests
</pre>
<p><br>
you can now see the test results in the command prompt:</p>
<pre>
Running 1 tests
PASS Testcase1.phpt - Parses two non-zero values[Testcase1.phpt]
TOTAL TIME: 00:05
1 PASSED TESTS
0 SKIPPED TESTS

</pre>
<p>You can see that the framework shows your test case passing. <br>
Now, lets try to implement another test case. In this, we send 10 and 0 as parameters and expect the service to return a fault message as &quot;Division by 0&quot;. Our new test case should look like the following.</p>
<pre>
--TEST--
Testcase2.phpt - Parses 10 and 0 and expects a divition by 0 fault
--FILE--
&lt;?php
$reqPayloadString = &lt;&lt;&lt;XML
&lt;ns1:div xmlns:ns1=&quot;http://ws.apache.org/axis2/php/math&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param1&gt;10&lt;/param1&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param2&gt;0&lt;/param2&gt;
&lt;/ns1:div&gt;
XML;
&nbsp;&nbsp;&nbsp;&nbsp; try
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $client = new WSClient(array(
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;to&quot;=&gt;&quot;http://localhost/samples/div_service.php&quot;));
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $response = $client-&gt;request($reqPayloadString);
&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($response)
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {
&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $simplexml = new SimpleXMLElement($response-&gt;str);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $value1 = $simplexml;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;Response = %s \n&quot;, $value1);

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; } 
&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception $e)
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($e instanceof WSFault)
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Soap Fault: %s\n&quot;, $e-&gt;Reason);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
   &nbsp;&nbsp;&nbsp; &nbsp;else
 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Message = %s\n&quot;,$e-&gt;getMessage());
 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp; }
?&gt;
--EXPECT--
Soap Fault: A division by 
</pre>
<p>Please note the param2 of the reqPayloadString is now 0 and the expected value is also chenged to the fault string we expect to receive. Now, save this file as Testcase2.phpt, to the same location you saved Testcase1.phpt and run 'pear run-tests' on the command line. Now you can see that the framework executes both the test cases and display the results as follows.</p>
<pre>
Running 2 tests
PASS Testcase1.phpt - Parses two non-zero values[Testcase1.phpt]
FAIL Testcase2.phpt - Parses 10 and 0 and expects a divition by 0 fault[Testcase2.phpt]
wrote log to &quot;C:\KB\run-tests.log&quot;
TOTAL TIME: 00:06

1 PASSED TESTS
0 SKIPPED TESTS
1 FAILED TESTS:
C:\KB\Testcase2.phpt
</pre>
<p>You can notice that one test case is now failing. The framework lists at the bottom of the report, the test file which is failing. It is Testcase2.phpt. Now lets find the reason for this failure. You can find a log file of this test case in the folder where the test file resides. Go to your test folder and open the file Testcase2.log. The contents of this file is as follows.</p>
<pre>
---- EXPECTED OUTPUT
Soap Fault: A division by 0
---- ACTUAL OUTPUT
Message = Error , NO Response Received
---- FAILED
</pre>
<p>Here you can see that the actual output of the test case is different from the expected output, hence the test case has failed. It seems that our Web service does not bahaves as expected. That means the Web service contains a bug. So lets edit the our Web service according to the requirement. We will change the divFunction of our service in a way that it checks the second parameter, and for it to return a wsfault if it was a zero. <br>
<br>
Following is our editted divFunction:</p>
<pre>
function divFunction($inMessage) {
&nbsp;&nbsp;&nbsp; $simplexml = new SimpleXMLElement($inMessage-&gt;str);
&nbsp;&nbsp;&nbsp; $value1 = $simplexml-&gt;param1[0];
&nbsp;&nbsp;&nbsp; $value2 = $simplexml-&gt;param2[0];
&nbsp;&nbsp;&nbsp; if($value2 == 0)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new WSFault(&quot;Sender&quot;, &quot;A division by 0&quot;);
&nbsp; &nbsp; }
&nbsp;&nbsp;&nbsp; else {
&nbsp;&nbsp;&nbsp; $Result = $value1 / $value2;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; $resPayload = &lt;&lt;&lt;XML
&lt;ns1:result xmlns:ns1=&quot;http://ws.axis2.org/axis2/php/math&quot;&gt;$Result&lt;/ns1:result&gt;
XML;
&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp; $returnMessage = new WSMessage($resPayload);
&nbsp;&nbsp;&nbsp; return $returnMessage;
}

</pre>
<p>Now, deploy your modified service and run your test suite again to verify that the changes are effective. Simply run the command 'pear run-tests' on the command prompt to do:</p>
<pre>
Running 2 tests
PASS Testcase1.phpt - Parses two non-zero values[Testcase1.phpt]
PASS Testcase2.phpt - Parses 10 and 0 and expects a divition by 0 fault[Testcase2.phpt]
TOTAL TIME: 00:06
2 PASSED TESTS
0 SKIPPED TESTS
</pre>
<p>Congratulations! Your Web service is now working. You can run as many test cases as you wish to test your your Web service in this manner. It will help you build a very efficient and accurate Web service.</p>
<h2>&nbsp;</h2>
<h2><a name="summary"></a>Summary</h2>
<p>In this article we discussed how we can use PHP's regression test framework, referred to as 'phpt', to test our WSF/PHP Web service. We demonstrated a simple Web service written in php and&nbsp; two simple phpt test cases to test that service. You can download the sample scripts used in this article from the link given below:</p>
<h3>&nbsp;</h3>
<h3>Author</h3>
<p>Dushshantha Chandradasa,&nbsp; Senior Software Engineer, Quality Assurance. dushshantha at wso2 dot com</p>    ]]></content>
  </entry>
  <entry>
    <title>A Fair Comparison of REST and WS-* Using An Architectural Decision Framework: Is The Debate Over?</title>
    <link rel="alternate" type="text/html" href="http://wso2.org/library/3556" />
    <id>http://wso2.org/library/3556</id>
    <published>2008-05-07T12:59:26+00:00</published>
    <updated>2008-05-07T12:59:27+00:00</updated>
    <author>
      <name>ayanthi</name>
    </author>
    <category term="News" />
    <category term="REST" />
    <category term="WS-*" />
    <summary type="html"><![CDATA[<p>Cesare Pautasso, Olaf Zimmermann and Frank Leymann  presented a paper at the WWW 2008 conference held in Beijing, detailing a  comparison of &quot;RESTful  Web Services vs. Big Web  Services&quot;.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Cesare Pautasso, Olaf Zimmermann and Frank Leymann  presented a paper at the WWW 2008 conference held in Beijing, detailing a  comparison of &quot;RESTful  Web Services vs. Big Web  Services&quot;.</p>
<!--break-->
<p>Story: <a href="http://www.infoq.com/news/2008/05/rest-vs-ws-star">http://www.infoq.com/news/2008/05/rest-vs-ws-star</a></p>    ]]></content>
  </entry>
  <entry>
    <title>Response Team Boosts Open Source Security</title>
    <link rel="alternate" type="text/html" href="http://wso2.org/library/3552" />
    <id>http://wso2.org/library/3552</id>
    <published>2008-05-07T09:07:11+00:00</published>
    <updated>2008-05-07T09:07:11+00:00</updated>
    <author>
      <name>ayanthi</name>
    </author>
    <category term="News" />
    <category term="open source" />
    <category term="security" />
    <summary type="html"><![CDATA[<p>CERT is a volunteer workforce of security professionals from the open source community with the goal of providing security vulnerability mediation and incident response services to open source projects.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>CERT is a volunteer workforce of security professionals from the open source community with the goal of providing security vulnerability mediation and incident response services to open source projects.</p>
<!--break-->
<p>Story: <a href="http://www.thestandard.com/news/2008/05/06/response-team-boosts-open-source-security">http://www.thestandard.com/news/2008/05/06/response-team-boosts-open-source-security</a></p>    ]]></content>
  </entry>
  <entry>
    <title>Introduction to Apache Synapse: an Open Source ESB</title>
    <link rel="alternate" type="text/html" href="http://wso2.org/library/3535" />
    <id>http://wso2.org/library/3535</id>
    <published>2008-05-02T07:33:31+00:00</published>
    <updated>2008-05-02T07:35:54+00:00</updated>
    <author>
      <name>ayanthi</name>
    </author>
    <category term="News" />
    <category term="Intermediate" />
    <category term="Apache Synapse" />
    <category term="ESB" />
    <summary type="html"><![CDATA[<p><b>Paul Fremantle</b> explains the concept of an <b>Enterprise Service Bus (ESB)</b> and how to use<b> Apache Synapse</b>, an open source enterprise service bus that will help your organization work more efficiently.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p><b>Paul Fremantle</b> explains the concept of an <b>Enterprise Service Bus (ESB)</b> and how to use<b> Apache Synapse</b>, an open source enterprise service bus that will help your organization work more efficiently.</p>
<!--break-->
<p><img alt="Paul Fremantle" src="/files/paul.gif" align="right" vspace="4"><!--<strong-->Paul Fremantle co-founded WSO2 after 9 years at IBM where he created the Web Services Gateway, and led the team that developed and shipped it as part of WebSphere Application Server. Paul also co-created the Web Services Invocation Framework (WSIF), was co-lead of JSR 110: Java APIs for WSDL, which produced WSDL4J, and co-chaired the OASIS Web Services Reliable eXchange Technical Committee.</p>
<p>Story: <a href="http://www.linux-mag.com/id/5884">http://www.linux-mag.com/id/5884</a></p>    ]]></content>
  </entry>
  <entry>
    <title>Web Services are Faster – Apache Axis2/C Performance: Round 1</title>
    <link rel="alternate" type="text/html" href="http://wso2.org/library/3532" />
    <id>http://wso2.org/library/3532</id>
    <published>2008-04-30T11:19:59+00:00</published>
    <updated>2008-05-05T09:22:16+00:00</updated>
    <author>
      <name>lahiru_wso2</name>
    </author>
    <category term="Articles" />
    <category term="Advanced" />
    <category term="Axis2/C" />
    <category term="C" />
    <category term="performance" />
    <category term="Testing" />
    <category term="Web Services" />
    <summary type="html"><![CDATA[<p>This article by Lahiru Gunathilake illustrates the latest  performance results of Apache Axis2/C and compares with the performance of Axis2/C with Guththila XML parser and libxml2 XML parser.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>This article by Lahiru Gunathilake illustrates the latest  performance results of Apache Axis2/C and compares with the performance of Axis2/C with Guththila XML parser and libxml2 XML parser.</p>
<h2>&nbsp;</h2>
<h2>Table of Contents</h2>
<ol>
<li><a href="#test">The Test</a></li>
<li><a href="#summary">  Summary of Results</a>
<ul>
<li><a href="#comparison">     Comparison between Axis2/C and Axis2/Java</a></li>
<li><a href="#performance">     Performance of Axis2/C with Guththila and Libxml2 parser</a>
<ul>
<li><a href="#small">             Small Datasets</a></li>
<li><a href="#large">LargeDatasets</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#conclusions">     Conclusions</a></li>
</ol>
<p>&nbsp;</p>
<h2><a name="test"></a>The Test</h2>
<p>With this performance test, we intended to carry out the same performance testings as with Apache <font color="#000080"><a href="../../../../library/588">Axis2/Java performance testing Round #2</a></font>. Hence we decided to get the same benchmark <a href="/files/benchmark.wsdl">WSDL </a>and generated the service using Apache Axis2/C code generation tool with ADB (Axis Data Binding) and implemented the services similar to Java services. We also used the same hardware configurations Axis2/Java used with their performance test Round #2.</p>
<p>These are the operations that were tested in the Benchmark Service.</p>
<p>&nbsp;</p>
<table>
<tr valign="top">
<td width="323">
<p>echoVoid</p>
</td>
<td width="324">
<p>This simply reads a void and returns it</p>
</td>
</tr>
<tr valign="top">
<td width="323">
<p>echoInts</p>
</td>
<td width="324">
<p>Reads an incoming integer and returns the integer</p>
</td>
</tr>
<tr valign="top">
<td width="323">
<p>echoDoubles</p>
</td>
<td width="324">
<p>Reads an incoming Double and returns another Double</p>
</td>
</tr>
<tr valign="top">
<td width="323">
<p>echoStrings</p>
</td>
<td width="324">
<p>Reads an incoming String and returns another String</p>
</td>
</tr>
<tr valign="top">
<td width="323">
<p>echoMeshInterfaceObjects</p>
</td>
<td width="324">
<p>Reads an incoming Object and returns another</p>
</td>
</tr>
<tr valign="top">
<td width="323">
<p>echoSimpleEvents</p>
</td>
<td width="324">
<p>Reads Complex type Object and returns another</p>
</td>
</tr>
</table>
<p>&nbsp;</p>
<p>Test Environment</p>
<p>The server was running on Red Hat Enterprise Linux Server Release 5  on a 4-way Xeon 3.2Ghz server with 2GB RAM. The client was connected to the server via a dedicated 1Gb Ethernet switch. As the client driver we used the <a href="http://httpd.apache.org/docs/2.0/programs/ab.html">Apache Bench tool</a> shipped with the <font color="#000080"><a href="http://httpd.apache.org/">Apache HTTPD server</a></font>.</p>
<p>Axis2/C services were run using the httpd module on Apache Http Server version 2.2.6 instance built with prefork MPM(Multi-Processing Modules) which is a non-threaded preforking MPM. We used the default configurations for prefork MPM and kept all the other configurations default in Apache Http Server.</p>
<p>The client driver was running on Red Hat Enterprise Linux Server Release 5  on a 4-way Xeon 3.2Ghz server with 2GB RAM.</p>
<p>&nbsp;</p>
<p><a name="summary"></a>Summary of Results</p>
<p><a name="comparison"></a>Comparison between Axis2/C and Axis2/Java</p>
<p>Here is the comparison between the performance of Axis2/C against Axis2/Java for small and large data types. For this comparison we use Axis2/C with Guththila XML parser and Axis2/Java  with default ADB binding.</p>
<p><img alt="" src="/files/image7.gif"></p>
<p><img alt="" src="/files/image8.gif"></p>
<h2><a name="performance"></a>Performance of Axis2/C with Guththila and Libxml2 parser</h2>
<h3><a name="small"></a>Small Datasets</h3>
<p>The first chart shows the results for Ints, Doubles, Strings, SimpleEvents and MeshInterface, all at an array size of just 1 element. The Y-axis shows the number of requests per second throughput and the x-axis shows the test name. These engines are able to handle more than 10,000 reqs/sec on a quad-core system. Over the course of a day, this is more than 800 million transactions.</p>
<p>In this scenario we received very high performance levels with Guththila XML parser, that is nearly about 10000 req/sec. But with Libxml2 we can achieve up to a maximum of 8000 req/sec. And therefore, this chart implies that for a service exchanging small datasets Axis2/C results in outstanding performance with Guththila XML parser.</p>
<p><img alt="" src="/files/image10.gif"></p>
<h3><a name="large"></a>Large Datasets</h3>
<p>The next chart shows the performance at array size 100. As one would observe, this starts to stress the engines and thus brings out the core differences in processing. Message sizes in this scenario ranged from 4-6k per invocation, and therefore simulates heavy work load - especially when we look at mesh interface type scenarios.</p>
<p><img alt="" src="/files/image4.gif"></p>
<p>In these tests, still, Axis2/C built with Guththila XML performs much faster than when built with Libxml2 XML parser.</p>
<p>&nbsp;</p>
<p>Note that at these levels, there is serious network utilization going on. There were times during the test when Axis2/C was saturating the dedicated 1Gb/s Ethernet segment that the test was run on. The graph below shows network throughput (as measured by ApacheBench) for echoStrings.</p>
<p><img alt="" src="/files/image11.gif"></p>
<p>The final graph shows the results for the echoMeshInterface test at different array sizes, ranging from 1 to 5000. It clearly shows how the engine stood up to the increased load presented with complex object types. The first thing to notice is how well Axis2/C scales from 1 through 10 to 50 elements.</p>
<p><img alt="" src="/files/image6.gif"></p>
<h2><a name="conclusions"></a>Conclusions</h2>
<ol>
<li>We compared Axis2/C with Axis2/Java and observed that Axis2/C runs at an average speed of 10,000 req/sec as compared to Axis2/Java that runs at an average speed of 3000 req/sec.</li>
<li>Axis2/C with Guththila parser works well for small data sets. As the payload  increases its performance drops and is low compared to Libxml2. Hence, it is better to use Libxml2 as the XML parser when using large data sets and to use Guththila as the parser for small data sets.</li>
</ol>
<h3>&nbsp;</h3>
<h3>Author</h3>
<p>Lahiru Gunathilake is a Trainee Software Engineer at WSO2. glahiru at gmail dot com</p>
    ]]></content>
  </entry>
  <entry>
    <title>Installing WSF/PHP with PHP5 on IIS</title>
    <link rel="alternate" type="text/html" href="http://wso2.org/library/3465" />
    <id>http://wso2.org/library/3465</id>
    <published>2008-04-07T06:48:25+00:00</published>
    <updated>2008-05-09T07:51:42+00:00</updated>
    <author>
      <name>nandika</name>
    </author>
    <category term="Demonstrations" />
    <category term="Introductory" />
    <category term="IIS" />
    <category term="PHP" />
    <category term="PHP5" />
    <category term="Windows" />
    <category term="WSFPHP" />
    <summary type="html"><![CDATA[<p>This introductory screen cast tutorial by Nandika Jayawardana shows how to install WSF/PHP with php5 and IIS</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>This introductory screen cast tutorial by Nandika Jayawardana shows how to install WSF/PHP with php5 and IIS</p>
<p><a id="link0" name="link0"></a></p>
<p><map id="frame0map" name="frame0map"><br />
<area href="#link1" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame0map" src="/files/wsfphpIIS0.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link1"></a></p>
<p><map name="frame1map"><br />
<area href="http://wso2.org/library/3465#link0" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link2" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame1map" src="http://wso2.org/files/wsfphpIIS1.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link2"></a></p>
<p><map name="frame2map"><br />
<area href="http://wso2.org/library/3465#link1" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link3" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame2map" src="http://wso2.org/files/wsfphpIIS2.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link3"></a></p>
<p><map name="frame3map"><br />
<area href="http://wso2.org/library/3465#link2" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link4" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame3map" src="http://wso2.org/files/wsfphpIIS3.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link4"></a></p>
<p><map name="frame4map"><br />
<area href="http://wso2.org/library/3465#link3" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link5" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame4map" src="http://wso2.org/files/wsfphpIIS4.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link5"></a></p>
<p><map name="frame5map"><br />
<area href="http://wso2.org/library/3465#link4" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link6" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame5map" src="http://wso2.org/files/wsfphpIIS5.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link6"></a></p>
<p><map name="frame6map"><br />
<area href="http://wso2.org/library/3465#link5" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link7" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame6map" src="http://wso2.org/files/wsfphpIIS6.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link7"></a></p>
<p><map name="frame7map"><br />
<area href="http://wso2.org/library/3465#link6" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link8" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame7map" src="http://wso2.org/files/wsfphpIIS7.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link8"></a></p>
<p><map name="frame8map"><br />
<area href="http://wso2.org/library/3465#link7" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link9" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame8map" src="http://wso2.org/files/wsfphpIIS8.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link9"></a></p>
<p><map name="frame9map"><br />
<area href="http://wso2.org/library/3465#link8" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link10" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame9map" src="http://wso2.org/files/wsfphpIIS9.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link10"></a></p>
<p><map name="frame10map"><br />
<area href="http://wso2.org/library/3465#link9" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link11" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame10map" src="http://wso2.org/files/wsfphpIIS10.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link11"></a></p>
<p><map name="frame11map"><br />
<area href="http://wso2.org/library/3465#link10" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link12" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame11map" src="http://wso2.org/files/wsfphpIIS11.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link12"></a></p>
<p><map name="frame12map"><br />
<area href="http://wso2.org/library/3465#link11" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link13" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame12map" src="http://wso2.org/files/wsfphpIIS12.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link13"></a></p>
<p><map name="frame13map"><br />
<area href="http://wso2.org/library/3465#link12" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link14" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame13map" src="http://wso2.org/files/wsfphpIIS13.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link14"></a></p>
<p><map name="frame14map"><br />
<area href="http://wso2.org/library/3465#link13" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link15" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame14map" src="http://wso2.org/files/wsfphpIIS14.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link15"></a></p>
<p><map name="frame15map"><br />
<area href="http://wso2.org/library/3465#link14" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link16" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame15map" src="http://wso2.org/files/wsfphpIIS15.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link16"></a></p>
<p><map name="frame16map"><br />
<area href="http://wso2.org/library/3465#link15" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link17" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame16map" src="http://wso2.org/files/wsfphpIIS16.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link17"></a></p>
<p><map name="frame17map"><br />
<area href="http://wso2.org/library/3465#link16" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link18" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame17map" src="http://wso2.org/files/wsfphpIIS17.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link18"></a></p>
<p><map name="frame18map"><br />
<area href="http://wso2.org/library/3465#link17" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link19" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame18map" src="http://wso2.org/files/wsfphpIIS18.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link19"></a></p>
<p><map name="frame19map"><br />
<area href="http://wso2.org/library/3465#link18" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link20" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame19map" src="http://wso2.org/files/wsfphpIIS19.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link20"></a></p>
<p><map name="frame20map"><br />
<area href="http://wso2.org/library/3465#link19" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link21" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame20map" src="http://wso2.org/files/wsfphpIIS20.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link21"></a></p>
<p><map name="frame21map"><br />
<area href="http://wso2.org/library/3465#link20" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link22" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame21map" src="http://wso2.org/files/wsfphpIIS21.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link22"></a></p>
<p><map name="frame22map"><br />
<area href="http://wso2.org/library/3465#link21" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link23" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame22map" src="http://wso2.org/files/wsfphpIIS22.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link23"></a></p>
<p><map name="frame23map"><br />
<area href="http://wso2.org/library/3465#link22" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link24" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame23map" src="http://wso2.org/files/wsfphpIIS23.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link24"></a></p>
<p><map name="frame24map"><br />
<area href="http://wso2.org/library/3465#link23" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link25" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame24map" src="http://wso2.org/files/wsfphpIIS24.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link25"></a></p>
<p><map name="frame25map"><br />
<area href="http://wso2.org/library/3465#link24" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link26" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame25map" src="http://wso2.org/files/wsfphpIIS25.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link26"></a></p>
<p><map name="frame26map"><br />
<area href="http://wso2.org/library/3465#link25" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link27" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame26map" src="http://wso2.org/files/wsfphpIIS26.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link27"></a></p>
<p><map name="frame27map"><br />
<area href="http://wso2.org/library/3465#link26" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link28" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame27map" src="http://wso2.org/files/wsfphpIIS27.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link28"></a></p>
<p><map name="frame28map"><br />
<area href="http://wso2.org/library/3465#link27" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link29" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame28map" src="http://wso2.org/files/wsfphpIIS28.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link29"></a></p>
<p><map name="frame29map"><br />
<area href="http://wso2.org/library/3465#link28" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link30" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame29map" src="http://wso2.org/files/wsfphpIIS29.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link30"></a></p>
<p><map name="frame30map"><br />
<area href="http://wso2.org/library/3465#link29" coords="546,495,604,517" shape="rect"><br />
<area href="http://wso2.org/library/3465#link31" coords="614,495,672,517" shape="rect"></map><img alt="" usemap="#frame30map" src="http://wso2.org/files/wsfphpIIS30.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<p><a name="link31"></a></p>
<p><map name="frame31map"><br />
<area href="http://wso2.org/library/3465#link0" coords="612,494,670,516" shape="rect"></map><img alt="" usemap="#frame31map" src="http://wso2.org/files/wsfphpIIS31.jpg" border="0"><br><br />
<br><br />
&nbsp;</p>
<h3>References</h3>
<ol>
<li>WSF/PHP <a href="http://wso2.org/projects/wsf/php">Home page</a></li>
<li>WSF/PHP <a href="http://wso2.org/downloads/wsf/php">download page<br><br />
    </a></li>
</ol>
<h3>&nbsp;</h3>
<h3>Author</h3>
<p>Nandika Jayawardana is a Software Engineer at WSO2. nandika at wso2 dot com.</p>
    ]]></content>
  </entry>
</feed>
