Toon posts:

[PHP] SOAP document/literal

Pagina: 1
Acties:

Onderwerpen


  • delenn
  • Registratie: mei 2000
  • Laatst online: 07-09 00:44
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]


  • NMe
  • Registratie: februari 2004
  • Laatst online: 24-09 13:16

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.


  • delenn
  • Registratie: mei 2000
  • Laatst online: 07-09 00:44
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.

  • delenn
  • Registratie: mei 2000
  • Laatst online: 07-09 00:44
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.


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee