Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 21-12-2012, 10:17
jazzdee
 Registrierter Benutzer
Links : Onlinestatus : jazzdee ist offline
Registriert seit: Jan 2003
Beiträge: 174
jazzdee ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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?
Mit Zitat antworten