Met WSO2 web services framework heb ik een een webservice opgezet. Eigenlijk maak ik nog even gebruik van de samples om eea uit te testen.
Met wsdl2php (van http://www.urdalen.no/wsdl2php/ )heb ik de wsdl specificaties omgezet in een php class. Deze is als volgt geworden (commentaar verwijdert)
Hierop heb ik een klein test script geschreven:
$ret zou een object van de classe echoStringResponse moeten zijn, echter is deze null ( is_null($ret) = true )
Ik heb bij 3th party webservices het wsdl2php script zonder problemen weten te gebruiken, maar ik kom er in deze situatie niet achter wat er nu misgaat.
Het lijkt me dat SOAP en WSDL standaarden zijn, waardoor je elke client die het spreekt kan communiceren met een server.
-edit-
Een kleine toevoeging, er vind gewoon communicatie plaats. Uit een dump blijkt het volgende (Wellicht leidt het tot meer inzicht)
Met wsdl2php (van http://www.urdalen.no/wsdl2php/ )heb ik de wsdl specificaties omgezet in een php class. Deze is als volgt geworden (commentaar verwijdert)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| <?php class echoString { public $inMessage; // anyType } class echoStringResponse { public $returnVal; // anyType } class samples_echo_service_php extends SoapClient { private static $classmap = array('echoString' => 'echoString', 'echoStringResponse' => 'echoStringResponse', ); public function samples_echo_service_php($wsdl = "http://127.0.0.1/samples/echo_service.php?wsdl", $options = array()) { foreach(self::$classmap as $key => $value) { if(!isset($options['classmap'][$key])) { $options['classmap'][$key] = $value; } } parent::__construct($wsdl, $options); } public function echoString(echoString $parameters) { return $this->__soapCall('echoString', array($parameters), array( 'uri' => 'http://www.wso2.org/php', 'soapaction' => '' ) ); } } ?> |
Hierop heb ik een klein test script geschreven:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| <?php include "samples_echo_service_php.php"; $a = new samples_echo_service_php(); $obj = new echoString(); $obj->inMessage = "Test!"; $ret = $a->echoString($obj); print_r($ret); ?> |
$ret zou een object van de classe echoStringResponse moeten zijn, echter is deze null ( is_null($ret) = true )
Ik heb bij 3th party webservices het wsdl2php script zonder problemen weten te gebruiken, maar ik kom er in deze situatie niet achter wat er nu misgaat.
Het lijkt me dat SOAP en WSDL standaarden zijn, waardoor je elke client die het spreekt kan communiceren met een server.
-edit-
Een kleine toevoeging, er vind gewoon communicatie plaats. Uit een dump blijkt het volgende (Wellicht leidt het tot meer inzicht)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| POST /samples/echo_service.php HTTP/1.1 Host: 127.0.0.1 Connection: Keep-Alive User-Agent: PHP-SOAP/5.3.2 Content-Type: text/xml; charset=utf-8 SOAPAction: "http://127.0.0.1/samples/echo_service.php/echoString" Content-Length: 278 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.wso2.org/php/xsd"><SOAP-ENV:Body><ns1:echoString><ns1:inMessage>Test!</ns1:inMessage></ns1:echoString></SOAP-ENV:Body></SOAP-ENV:Envelope> HTTP/1.1 200 OK Date: Thu, 22 Jul 2010 08:08:46 GMT Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8o DAV/2 mod_fastcgi/2.4.6 X-Powered-By: PHP/5.3.2 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/xml;charset=utf-8 e9 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:echoString xmlns:ns1="http://www.wso2.org/php/xsd"><ns1:inMessage>Test!</ns1:inMessage></ns1:echoString></soapenv:Body></soapenv:Envelope> 0 |
[ Voor 25% gewijzigd door Keiichi op 22-07-2010 10:57 ]
Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/