<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>webbricks &#187; WebServices</title>
	<atom:link href="http://blog.grzegorzpawlik.com/tag/webservices/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.grzegorzpawlik.com</link>
	<description>Doświadczenie, to coś, co zdobywamy tuż po chwili w której było nam potrzebne ...</description>
	<lastBuildDate>Tue, 07 Feb 2012 10:09:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>CakePHP + serwer SOAP (pierwsze kroki)</title>
		<link>http://blog.grzegorzpawlik.com/2008/02/cakephp-serwer-soap-pierwsze-kroki/</link>
		<comments>http://blog.grzegorzpawlik.com/2008/02/cakephp-serwer-soap-pierwsze-kroki/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 10:09:00 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP4]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[WebServices]]></category>

		<guid isPermaLink="false">http://meta.vipserv.org/blog.grzegorzpawlik.com/?p=14</guid>
		<description><![CDATA[Mimo tego, że cake chwali się, że jest WebServices ready tyczy się to jedynie tak zwanego routingu (np. gdy użyjesz users/index &#8211; będzie &#8220;normalnie&#8221; czyli wyrenderuje widok /vews/users/index.thtml, a gdy &#8220;xml/user/index&#8221; &#8211; /views/users/xml/index.thtml) ale nie jest to prawdziwe WebSerwice. Nie &#8230; <a href="http://blog.grzegorzpawlik.com/2008/02/cakephp-serwer-soap-pierwsze-kroki/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Mimo tego, że cake chwali się, że jest WebServices ready tyczy się to jedynie tak zwanego routingu (np. gdy użyjesz users/index &#8211; będzie &#8220;normalnie&#8221; czyli wyrenderuje widok /vews/users/index.thtml, a gdy &#8220;xml/user/index&#8221; &#8211; /views/users/xml/index.thtml) ale nie jest to prawdziwe WebSerwice. Nie wiem ile jest sposobów na zmianę CakePHP w prawdziwy serwer SOAP, ja znam jeden i Wam go pokażę.</p>
<p>1. Potrzebna nam biblioteka SOAP (jako prawdziwy programiści pozwalamy, żeby najtrudniejsze rzeczy pisali za nas inni). Ja wybrałem NuSOAP. Wrzuć pliki do /app/vendors/nusoap/*.<br />
2. Stwórz kontroler do obsługi Soap. W moim przypadku soap_controller.php</p>
<p><code lang="php"><br />
/**<br />
* Soap Serwer<br />
* @package package<br />
*/<br />
vendor('nusoap/nusoap');<br />
class SoapController extends AppController {<br />
var $name = 'Soap';<br />
var $server;<br />
var $namespace;<br />
var $layout = 'blank';<br />
var $components = array('othAuth','Conf');<br />
var $othAuthRestrictions = null;</p>
<p>/**<br />
* Inicjalizacja ustawień serwera<br />
*<br />
*/<br />
function _init() {<br />
$this->namespace = $this->Session->host;<br />
$this->server = new soap_server();<br />
$this->server->debug_flag = false;<br />
$this->server->configureWSDL('MyWsdl', $this->namespace, 'http://'.$_SERVER['HTTP_HOST'] . $this->webroot . $this->params['controller'] ); // należy nadpisać endpoint, gdyż domyślnie ustawi się na /twoja_aplikacja/app/index.php<br />
$this->server->wsdl->schemaTargetNamespace = $this->namespace;<br />
$this->_defineTypes();<br />
$this->_registerMethods();<br />
}</p>
<p>/**<br />
* Serwer endpoint handler<br />
*<br />
*/<br />
function index(){<br />
Configure::write('debug', 0);</p>
<p>$this->_init();</p>
<p>$HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';<br />
$this->server->service($HTTP_RAW_POST_DATA);<br />
exit();<br />
}</p>
<p>/**<br />
* define types required by this server<br />
* przyda się później<br />
*/<br />
function _defineTypes() {</p>
<p>}</p>
<p>function _registerMethods() {</p>
<p>$this->server->register(<br />
'SoapController.hello', // method name<br />
array('name' => 'xsd:string'), // input parameters<br />
array('return' => 'xsd:string'),<br />
$this->namespace,<br />
$this->namespace . '#hello',<br />
'document', // style<br />
'encoded' // use<br />
);</p>
<p>}</p>
<p>function hello($name){<br />
return array('return' => 'hello, '.$name);<br />
}<br />
}<br />
</code></p>
<p>3. Do tego stwórz model, który nic nie robi :)<br />
<code lang="php"><br />
class Soap extends AppModel {<br />
var $name = 'Soap';<br />
var $useTable = false;<br />
}<br />
</code></p>
<p>Teraz objaśnienia:<br />
<span style="font-style: italic;">SoapController::index()</span> &#8211; to twój endpoint serwera SOAP. <span style="font-style: italic;">SoapController::_registerMethods() </span>zajmuje się rejestrowaniem metod dostępnych przez serwer. W tym wypadku tylko jednej: SoapController::hello (notacja metod soap to Klasa.metoda).<br />
Metoda hello przyjmuje string jako parametr i zrwaca &#8216;Hello, &#8216;+ to co zostało jej przekazane.<br />
Przykładowy klient (poza cake.php):</p>
<p><code lang="php"></p>
<p>require('./nusoap/nusoap.php');</p>
<p>function pr($var) {<br />
echo "
<pre>";
var_dump($var);
echo "</pre>
<p>";<br />
}</p>
<p>/* create client */<br />
$endpoint = "http://localhost/meta/application_in_cakePHP/soap/index";</p>
<p>$mynamespace = "";<br />
$client = new soapclient($endpoint);</p>
<p>$err = $client->getError();<br />
if ($err) {<br />
// Display the error<br />
echo 'Constructor error: '. $err . ' ';<br />
// At this point, you know the call that follows will fail<br />
}</p>
<p>$response = $client->call('SoapController.hello', array('name' =>"Greg"));<br />
echo "Call SoapController.hello";<br />
if ($client->fault) {<br />
echo 'Fault: ';<br />
print_r($response);<br />
echo ' ';<br />
} else {<br />
// Check for errors<br />
$err = $client->getError();<br />
if ($err) {<br />
// Display the error<br />
echo 'Error: '. $err . '';<br />
} else {<br />
echo('response:');<br />
pr($response);<br />
}<br />
}</p>
<p></code></p>
<p>I ładny response:</p>
<pre>string(11) "hello, Greg"</pre>
<p>Dodatkowo, gdy w przeglądarce wpiszesz ścieżkę do kontrolera Soap zobaczysz ładną dokumentację Twojego serwera. A dodając do ścieżki ?wsdl &#8211; dokument wsdl.</p>
<p>żródła:<br />
<a href="http://www.scottnichol.com/nusoapprog.htm">http://www.scottnichol.com/nusoapprog.htm</a><br />
<a href="http://dietrich.ganx4.com/nusoap/faq.php">http://dietrich.ganx4.com/nusoap/faq.php</a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2008/02/cakephp-serwer-soap-pierwsze-kroki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

