[PHP] Soap en WSDL specificaties

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 24-09 12:24
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)

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/


Acties:
  • 0 Henk 'm!

  • rob_erwt
  • Registratie: Juni 2004
  • Laatst online: 15:10

rob_erwt

What does this button do?

Wat is precies je probleem? Want als ik naar die dump kijk, zie ik gewoon resultaat (namelijk een soap envelop met daarin een 'Test!' bericht)?

Never underestimate the power of stupid people in large groups


Acties:
  • 0 Henk 'm!

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 24-09 12:24
$ret is null (is_null($ret) = true), terwijl een object verwacht word.

-edit-

Ik heb de OP even aangepast, er stond er niet in vermeld wat nu het probleem was ;)

[ Voor 41% gewijzigd door Keiichi op 22-07-2010 10:58 ]

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 16:35

MueR

Admin Tweakers Discord

is niet lief

Je weet dat (is_null($ret) = true) altijd true gaat opleveren? Je hebt een assignment daar staan.

Daarnaast zie ik graag wat meer informatie in dit topic. Wat heb je geprobeerd om dit probleem te traceren danwel op te lossen? Wat heb je ondertussen aan debugging gedaan?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 24-09 12:24
MueR schreef op donderdag 22 juli 2010 @ 11:04:
Je weet dat (is_null($ret) = true) altijd true gaat opleveren? Je hebt een assignment daar staan.
Ik probeer zo aan te geven dat is_null($ret) true returned.
Daarnaast zie ik graag wat meer informatie in dit topic. Wat heb je geprobeerd om dit probleem te traceren danwel op te lossen? Wat heb je ondertussen aan debugging gedaan?
Om te traceren heb ik de TCP stream bekeken of er uberhaupt iets gebeurde. Ik heb de alle functies in het testscript in try-catch statements gezet, wat verder ook niets opleverde.

In de opbouw van WSDL en SOAP ben ik nog niet zo bijster in thuis, ik heb wel lopen te staren en denken over de WSDL definitie en de communcitatie heen en weer naar de webservice, maar ik word hier niet veel wijzer van.

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Keiichi schreef op donderdag 22 juli 2010 @ 11:09:
[...]


Ik probeer zo aan te geven dat is_null($ret) true returned.


[...]


Om te traceren heb ik de TCP stream bekeken of er uberhaupt iets gebeurde. Ik heb de alle functies in het testscript in try-catch statements gezet, wat verder ook niets opleverde.

In de opbouw van WSDL en SOAP ben ik nog niet zo bijster in thuis, ik heb wel lopen te staren en denken over de WSDL definitie en de communcitatie heen en weer naar de webservice, maar ik word hier niet veel wijzer van.
Ik denk je de waarden in je extended class moet testen en moet testen of soapCall wel juist wordt aangeroepen (qua PHP code dan). Waar zie jij trouwens dat _soapCall een object behoort terug te geven?

Sundown Circus


Acties:
  • 0 Henk 'm!

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 24-09 12:24
RedRose schreef op donderdag 22 juli 2010 @ 11:54:
[...]


Ik denk je de waarden in je extended class moet testen en moet testen of soapCall wel juist wordt aangeroepen (qua PHP code dan). Waar zie jij trouwens dat _soapCall een object behoort terug te geven?
Op basis van alle eerder soortgelijke constructies die ik gemaakt heb is de verwachting dat er tenminste IETS terugkomt.

Omdat de verwachte communicatie naar de webservices wel gebeurd, lijkt me ook dat de call goed word aangeroepen.

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Vandaar dat ik denk dat er iets in de code fout gaat, of dat er geen SoapFault object wordt aangemaakt oid. Probeer om een simpele test uit te voeren met het SoapClient object in een try / catch, of een SoapFault te vangen.

Zet je deze trouwens wel:

code:
1
'soapaction' => ''

Sundown Circus


Acties:
  • 0 Henk 'm!

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 24-09 12:24
Er wordt op geen enkel punt een throw gemaakt, dit heb ik al eerder geprobeerd.

Voor soapaction heb ik van alles en nog wat ingevuld, maar niets heeft enig effect.

voor $a->__getLastResponse() krijg ik deze output te zien:

code:
1
<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>


Hoe waarschijnlijk is het dat de webservice met een afwijkend antwoord tov zijn WSDL komt?

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Waarschijnlijk zet __soapCall een var die te krijgen is met __getLastResponse() dan. Ik zou gewoon die gebruiken dan. ;)

Sundown Circus


Acties:
  • 0 Henk 'm!

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 24-09 12:24
Dit lijkt op niets uit te draaien, ik heb nog wat andere voorbeelden van de webservice uitgeprobeerd en het lijkt er op dat je ook hun scripts moet gaan gebruiken om alles functioneel te hebben.
Plus dat de voorbeelde voornamelijk 'handmatig' samengestelde requests laten zien.

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/

Pagina: 1