PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   SOAP mit XML Request. Parameter-Datentyp wird total ignoriert. (https://www.php-resource.de/forum/php-developer-forum/103635-soap-mit-xml-request-parameter-datentyp-wird-total-ignoriert.html)

jazzdee 21-12-2012 10:17

SOAP mit XML Request. Parameter-Datentyp wird total ignoriert.
 
Hallo zusammen,

ich habe eine kurze Frage:

Ich baue gerade ein winziges PHP-Script mit einem Soap-Server & -Client. Der Server hat die Funktion "delete", "edit" und "insert".

Alle 3 Funktionen haben EINEN Parameter von einem Datentyp, den ich in der WSDL-Datei selber definiere. Dies ist ein complexType, der angibt, wie ein XML Request, der an den Server gesendet wird, auszusehen hat. Sieht der XML-Baum NICHT so aus, wie von mir per complexType im WSDL definiert, so soll ein Fehler geworfen werden.

Um mal ein anderes (einfacheres) Beispiel zu zeigen:

Kurz: Der Server soll eine einfache Rechenaufgabe ausführen. Dabei werden 2 Parameter von der Funktion erwartet. Die beiden Parameter müssen laut WSDL-Datei jeweils INTEGER sein.
Jedoch ist es auch hier VÖLLIG egal, welche Datentypen ich als Parameter übergebe.

Server.php
PHP-Code:

<?php
require_once('math.php');

$server = new SoapServer("math.wsdl");
$server->setClass('mathfunctions');
$server->addFunction("add");
$server->handle();
?>

Client.php
PHP-Code:

<?php

class client {
    
    protected 
$client;
    
    function 
__construct() {
        
$this->client = new SoapClient("http://localhost/www/webservice/server.php?wsdl");
    }
    
    function 
add() {
        return 
$this->client->__soapCall('add', array(10,2));
    }

}
    
try {
    
$client = new SoapClient("http://localhost/www/webservice/Server.php?wsdl");
    echo 
$client->add(100,7) . '<hr>';
} catch(
SoapFault $e) {
    echo 
'<pre>';print_r($e);echo '</pre>';
}
?>

Math.wsdl
Code:

<?xml version ='1.0' encoding ='UTF-8' ?>
<definitions name='Math'
  targetNamespace='http://localhost/www/webservice/Math'
  xmlns:tns='http://localhost/www/webservice/Math'
  xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
  xmlns:xsd='http://www.w3.org/2001/XMLSchema'
  xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
  xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
  xmlns='http://schemas.xmlsoap.org/wsdl/'>

        <message name='addRequest'>
          <part name='a' type='xsd:int'/>
          <part name='b' type='xsd:int'/>
        </message>
        <message name='addResponse'>
          <part name='Result' type='xsd:int'/>
        </message>
       
        <portType name='addPortType'>
          <operation name='add'>
                <input message='tns:addRequest'/>
                <output message='tns:addResponse'/>
          </operation>
        </portType>
       
        <binding name='addBinding' type='tns:addPortType'>
          <soap:binding style='rpc'
                transport='http://schemas.xmlsoap.org/soap/http'/>
                  <operation name='add'>
                        <soap:operation soapAction='urn:Math#add'/>
                        <input>
                          <soap:body use='encoded' namespace='urn:Math'
                                encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
                        </input>
                        <output>
                          <soap:body use='encoded' namespace='urn:Math'
                                encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
                        </output>
                  </operation>
        </binding>

        <service name='addService'>
          <port name='addPort' binding='tns:addBinding'>
                <soap:address location='http://localhost/www/webservice/server.php'/>
          </port>
        </service>
</definitions>

Kann mir einer einen Tipp geben, was ich falsch mache?

ezkimo 21-12-2012 10:28

Wie sieht denn Dein Request aus? Wie sieht die Response aus? Lass Dir diese beiden Werte doch mal ausgeben. Eventuell siehst Du hier schon Dein Problem.

combie 21-12-2012 10:32

Wenn der Server einen Integer erwartet, dann konvertiert PHP automatisch.

Was sagen denn die Klinetfunktionen __getFunctions() und __getTypes()?

Zitat:

PHP-Code:

    function add() { 
        return 
$this->client->__soapCall('add', array(10,2)); 


Diese Methode ist überflüssig.

Ein add() Methodenaufruf sollte automatisch einen __soapCall auslösen.
(sofern dieser in der WSDL korrekt deklariert ist)

Siehe: Soap Client - PHP Forum: phpforum.de

PS:
Als Serversoftware würde ich den Zend Soap Server nutzen, denn er kann die WSDL automatisch generieren.


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:15 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG