Hallo,
Ik probeer mijn PHP webservice code om te schrijven van RPC/Encoded naar document/literal,
maar ik heb een probleempje om PHP het een en ander te doen snappen,
met name het retour krijgen van de response.
Ik test het tegen SoapUI 3.5 (en .Net4)
De voor mij (en zeker voor de client) onbegrijpelijke response is steeds:
Een halve middag googlen levert me niks op, ik snap nog niet eens hoe PHP er bij komt een <ns1:unlockReponse> element te genereren, die staat nergens in mijn WSDL spec.
Dit is (een deel van) mijn WSDL spec:
En dit de php code..
Ik probeer mijn PHP webservice code om te schrijven van RPC/Encoded naar document/literal,
maar ik heb een probleempje om PHP het een en ander te doen snappen,
met name het retour krijgen van de response.
Ik test het tegen SoapUI 3.5 (en .Net4)
De voor mij (en zeker voor de client) onbegrijpelijke response is steeds:
XML:
1
2
3
4
5
6
7
| <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://wfhdesign.nl/qlix/soap/lock"> <SOAP-ENV:Body> <ns1:unlockResponse> <responseMessage/> </ns1:unlockResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
Een halve middag googlen levert me niks op, ik snap nog niet eens hoe PHP er bij komt een <ns1:unlockReponse> element te genereren, die staat nergens in mijn WSDL spec.
Dit is (een deel van) mijn WSDL spec:
XML:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| <?xml version="1.0" encoding="UTF-8"?> <definitions name="LockService" targetNamespace="http://wfhdesign.nl/qlix/soap/lock" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://wfhdesign.nl/qlix/soap/lock" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <types> <xsd:schema targetNamespace="http://wfhdesign.nl/qlix/soap/lock" xmlns="http://www.w3.org/2001/XMLSchema"> <element name="lockResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="success" type="xsd:boolean" minOccurs="1"/> <xsd:element name="username" type="xsd:string" minOccurs="1"/> </xsd:sequence> </xsd:complexType> </element> .... <element name="unlock"> <xsd:complexType> <xsd:sequence> <xsd:element name="unlockRequest" type="xsd:int" minOccurs="1" /> </xsd:sequence> </xsd:complexType> </element> </xsd:schema> </types> <!-- Messages --> .... <message name="unlockRequest"> <part name="lidnummer" element="tns:unlock"/> </message> <message name="checkLockResponse"> <part name="responseMessage" element="tns:lockResponse"/> </message> <!-- End messages --> <portType name="LDB_Lock"> ... <operation name="unlock"> <input message="tns:unlockRequest"/> <output message="tns:checkLockResponse"/> </operation> </portType> <binding name="LDB_Lock_Binding_Doc" type="tns:LDB_Lock"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> ... <operation name="unlock"> <soap:operation soapAction="unlock"/> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="literal"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="literal"/> </output> </operation> </binding> <service name="LDB_Lock_Soap"> ... </service> </definitions> |
En dit de php code..
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
| <?php require_once('conf.php'); require_once('db.php'); require_once('debug.php'); ini_set("soap.wsdl_cache_enabled", "0" ); class Lock { ... private static function _unlock($lidnummer) { $uid=Lock::get_gebruikers_id("wouter"); if(isset($uid)) { $sql="DELETE FROM lidnummer_lock WHERE `lidnummer`=$lidnummer AND `gebruikers_id`=$uid" ; global $db; $result=$db->exec($sql); $responsemsg=stdClass(); if(!PEAR::isError($result)) { $responsemsg->checkLockResponse->success=true; $responsemsg->checkLockResponse->user="wouter"; } else { $responsemsg->checkLockResponse->success=true; $responsemsg->checkLockResponse->user="wouter"; } $responsemsg=new SoapVar($responsemsg,SOAP_ENC_OBJECT,"responseMessage","http://wfhdesign.nl/qlix/soap/lock"); return $responsemsg; } else { return new SoapFault("Server", "Uid not found"); } } private static function get_gebruikers_id($username) { global $db; $sql = "SELECT gebruikers_id FROM gebruikers WHERE `gebruikersnaam`='$username' LIMIT 1"; $result=$db->query($sql); if(!PEAR::isError($result)) { $row=$result->fetchRow(MDB2_FETCHMODE_ASSOC); return $row['gebruikers_id']; } } ... public function unlock($lidnummer) { return Lock::_unlock($lidnummer); } } $server = new SoapServer("http://localhost/qlix/soap/lock_document.wsdl", array('soap_version' => SOAP_1_1)); $server->setClass("Lock"); $server->handle(); ?> |
[ Voor 3% gewijzigd door delenn op 10-10-2010 14:58 ]