[PHP] SOAP document/literal

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • delenn
  • Registratie: Mei 2000
  • Laatst online: 02-08-2024
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:
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 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

De voor mij (en zeker voor de client) onbegrijpelijke response is steeds:
Ehm...volgens mij ben je de response vergeten erin te zetten. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • delenn
  • Registratie: Mei 2000
  • Laatst online: 02-08-2024
NMe schreef op zondag 10 oktober 2010 @ 14:54:
[...]

Ehm...volgens mij ben je de response vergeten erin te zetten. ;)
Jawel, hij staat alleen een stukje verder, ga het even aanpassen.

Acties:
  • 0 Henk 'm!

  • delenn
  • Registratie: Mei 2000
  • Laatst online: 02-08-2024
delenn schreef op zondag 10 oktober 2010 @ 14:57:
[...]


Jawel, hij staat alleen een stukje verder, ga het even aanpassen.
Ik weet nu waar het probleem lag, een aantal van de <element> tags in het schema misten de xsd: prefix.