Ik probeer een PHP object via SOAP door te geven, en dat lukt op zich wel, maar ik krijg em niet van de juiste class, hij blijft nml. altijd stdClass. Dit was schijnbaar een bug in PHP < 5.0.3, maar hier op Windows PHP 5.0.4 wilt het nog steeds niet lukken. Ik heb het volgende volgens deze tip opgezet:
Bar.php:
client.php:
server.php:
test.wsdl:
Ik heb de WSDL zoveel mogelijk gestript totdat ie het nog net deed, maar ik blijf duv ipv een Bar object een stdClass terug krijgen. De response geeft wel een bar element terug:
maar er zou denk ik iets van een <bar type="Bar"> moeten staan...is er iemand die me de juiste richting in kan helpen? ik zal wel weer iets gemist hebben in de WSDL...
Bar.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| <? class Bar { public $id; public $name; function __construct($id, $name) { $this->id = $id; $this->name = $name; } } ?> |
client.php:
PHP:
1
2
3
4
5
6
7
8
9
| <pre><? ini_set("soap.wsdl_cache_enabled", "0"); require_once("Bar.php"); $client = new SoapClient("test.wsdl", array('trace' => 1, 'classmap' => array("Bar" => "Bar"))); $response = $client->foo(); print_r($response); print_r($client->__getLastResponse()); ?></pre> |
server.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <? ini_set("soap.wsdl_cache_enabled", "0"); require_once("Bar.php"); class FooServer { public function foo() { return new Bar(314, "melp"); } } $server = new SoapServer("test.wsdl", array('classmap' => array("Bar", "Bar")));; $server->setClass("FooServer"); $server->handle(); ?> |
test.wsdl:
code:
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
33
34
35
36
37
38
39
40
41
42
| <?xml version="1.0" ?> <wsdl:definitions xmlns:wsdl ="http://schemas.xmlsoap.org/wsdl/" xmlns:soap ="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs ="http://www.w3.org/2001/XMLSchema"> <wsdl:types> <xs:schema xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <xs:complexType name="Bar"> <xs:all> <element name="id" type="xsd:integer"/> <element name="name" type="xsd:string"/> </xs:all> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:message name="fooRequest" /> <wsdl:message name="fooResponse"> <part name="bar" type="Bar"/> </wsdl:message> <wsdl:portType name="FooPortType"> <wsdl:operation name="foo"> <wsdl:input message="fooRequest"/> <wsdl:output message="fooResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="FooBinding" type="FooPortType"> <wsdl:operation name="foo" /> </wsdl:binding> <wsdl:service name="FooService"> <wsdl:port name="FooPort" binding="FooBinding"> <soap:address location="http://amen/soaptest/server.php" /> </wsdl:port> </wsdl:service> </wsdl:definitions> |
Ik heb de WSDL zoveel mogelijk gestript totdat ie het nog net deed, maar ik blijf duv ipv een Bar object een stdClass terug krijgen. De response geeft wel een bar element terug:
code:
1
2
3
4
5
6
7
8
9
| <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <bar> <id>314</id> <name>melp</name> </bar> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
maar er zou denk ik iets van een <bar type="Bar"> moeten staan...is er iemand die me de juiste richting in kan helpen? ik zal wel weer iets gemist hebben in de WSDL...
[ Voor 19% gewijzigd door Genoil op 16-08-2005 18:49 ]