php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack (1) Themen-Optionen Thema bewerten
Alt 02.05.2006, 14:40  
Neuer Benutzer
 
Registriert seit: 25.04.2006
Beiträge: 7
123micha
Standard Über SOAP Arrays bzw. Complex Types zurückgeben

Hallo,

ich möchte einen eigenen Webservice unter php5/SOAP aufsetzen. WSDL ist erstellt und funzt soweit. Ich möchte Arrays verwenden. Hier meine Operation und ComplexType in der WSDL-Datei:


Code:
<?xml version="1.0" encoding="UTF-8"?>





<wsdl:definitions name="shopAPI" targetNamespace="http://localhost/shopapp/info"
	xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost/shopapp/info"
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema">




	<wsdl:types>
		<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://localhost/shopapp/info">
		
		



			<xsd:complexType name="AllSiteList">
				<xsd:all>
					<xsd:element name="AllSiteListElements"	type="tns:AllSiteListElementArray" />
				</xsd:all>
			</xsd:complexType>
			
					
			<xsd:complexType name="AllSiteListElementArray">
				<xsd:complexContent>
					<xsd:restriction base="soapenc:Array">
						<xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:AllSiteListElement[]" />
					</xsd:restriction>
				</xsd:complexContent>
			</xsd:complexType>
				
			
			<xsd:complexType name="AllSiteListElement">
				<xsd:all>
					<xsd:element name="idSite" type="tns:IDSite" />
					<xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
				</xsd:all>
			</xsd:complexType>
			





     <xsd:complexType name="IDSite">
       <xsd:attribute name="idSite" type="int" use="required"></xsd:attribute>
    </xsd:complexType>     

	</wsdl:types>



	


	<wsdl:message name="getAllSitesResponse">
		<wsdl:part name="getAllSitesResponse" type="tns:AllSiteList" />
	</wsdl:message>

	<wsdl:message name="getAllSitesRequest"></wsdl:message>

	

    <wsdl:message name="Dummy"></wsdl:message>
    
    
    
	


	<wsdl:portType name="shopAPI">


		<wsdl:operation name="getAllSites">
			<wsdl:input message="tns:Dummy" />
			<wsdl:output message="tns:getAllSitesResponse" />
		</wsdl:operation>



	</wsdl:portType>

	


	<wsdl:binding name="shopAPISOAP" type="tns:shopAPI">
		<soap:binding style="rpc"
			transport="http://schemas.xmlsoap.org/soap/http" />



		<wsdl:operation name="getAllSites">
			<soap:operation soapAction="shopAPI/getAllSites" />
			<wsdl:output>
				<soap:body
					encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
					namespace="shopAPI" parts=" getAllSitesResponse" use="encoded" />
			</wsdl:output>
		</wsdl:operation>
		
		
	

	</wsdl:binding>



	



	<wsdl:service name="shopAPI">
		<wsdl:port binding="tns:shopAPISOAP" name="shopAPISOAP">
			<soap:address
				location="http://localhost/ws/server.php" />
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>

Wie hieraus zu erkennen ist habe ich eine Funktion (getAllSites).

Ich benötige nun ja logischerweise eine PHP-Funktion, welche mir die Daten aus der Datenbank liest und entsprechend des Schemas der WSDL-Datei zurückgibt. Aus dieser Rückgabe und des WSDL-Schemas kann der Client - in meinem Falle JAVA - auf den Response-Code zugreifen und die entsprechenden Rückgaben verarbeiten.

Mein Problem ist, das ich es nicht schaffe einen PHP-Code zu schreiben, der ungefähr dieses Response-XML ausgibt.


Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:getAllSitesResponse>
<return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType=":AllSiteListElement[2]">
<item xsi:type=":AllSiteListElement">
<idShop xsi:type="xsd:int">79424</idShop>
<name xsi:type="xsd:int">ShopA</name>
</item>
<item xsi:type=":AllSiteListElement">
<idShop xsi:type="xsd:int">79428</idShop>
<name xsi:type="xsd:int">ShopB</name>
</item>
</return>
</ns1:getAllSitesResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Die DB-Abfrage ist natürlich nicht das Problem. Es geht darum, PHP5 mit SoapVars und Schleifen und Arrays/Objekten zu bewegen, die korrekte XML-Response zu erzeugen.

Wenn alles PHP-Intern ablaufen würde wäre alles kein Problem, da ich hier einfach ein Array zurückgeben und dieses im Client direkt weiterverarbeiten kann. Java hat sich da aber etwas eigensinniger.

Leider ist dieses Thema IMHO absolut unterdokumentiert und man findet kaum etwas im Netz außer den obligatorischen Klassendefinitionen.

Ich hoffe mir kann hier jemand weiterhelfen.

Viele Grüße
Micha
123micha ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.05.2006, 20:47  
Gast
 
Beiträge: n/a
Standard

Stehe die wsdl Datei irgendwo vollständig zur Verfügung?
  Mit Zitat antworten
Alt 03.05.2006, 06:46  
Neuer Benutzer
 
Registriert seit: 25.04.2006
Beiträge: 7
123micha
Standard

Hallo,

Zitat:
Zitat von Bruchpilot
Stehe die wsdl Datei irgendwo vollständig zur Verfügung?
Hab das Posting oben nochmal um die komplette WSDL-Datei ergänzt.

Micha
123micha ist offline   Mit Zitat antworten
Alt 03.05.2006, 13:27  
Gast
 
Beiträge: n/a
Standard

Da fehlt noch ein </xsd:schema>, damit es gültiges xml ist.
Aber auch dann geht es durch keinen wsdl Validator, den ich gefunden habe, vollständig fehlerfrei/problemlos durch.
php/soap liefert mit
Code:
<?php
// $server = new SoapServer("test.wsdl.xml");
$client = new SoapClient("test.wsdl");
var_dump($client->__getTypes());
var_dump($client->__getFunctions());
?>
den Typ UNKNOWN, kommt also mit der Parameterdefinition nicht klar. Wer oder was hat diese Definition erstellt?


Die Methode soll ein Feld mit Einträgen (id,name) zurückliefern?
Dann versuch es mal mit.
Code:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions
	xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:s="http://www.w3.org/2001/XMLSchema"
	xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
	xmlns:tns="http://localhost/shopapp/info"
	xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
	targetNamespace="http://localhost/shopapp/info"
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://localhost/shopapp/info">
      <s:element name="getAllSites">
        <s:complexType />
      </s:element>
      <s:element name="getAllSitesResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="getAllSitesResult" type="tns:ArrayOfAllSiteListElement" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="ArrayOfAllSiteListElement">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="AllSiteListElement" type="tns:AllSiteListElement" />
        </s:sequence>
      </s:complexType>
      <s:complexType name="AllSiteListElement">
        <s:sequence>
          <s:element minOccurs="1" maxOccurs="1" name="idSite" type="s:int" />
          <s:element minOccurs="0" maxOccurs="1" name="name" type="s:string" />
        </s:sequence>
      </s:complexType>
    </s:schema>
  </wsdl:types>
  <wsdl:message name="getAllSitesSoapIn">
	<wsdl:part name="parameters" element="tns:getAllSites" />
  </wsdl:message>
  <wsdl:message name="getAllSitesSoapOut">
    <wsdl:part name="parameters" element="tns:getAllSitesResponse" />
  </wsdl:message>
  <wsdl:portType name="Service1Soap">
    <wsdl:operation name="getAllSites">
      <wsdl:input message="tns:getAllSitesSoapIn" />
      <wsdl:output message="tns:getAllSitesSoapOut" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="Service1Soap" type="tns:Service1Soap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
    <wsdl:operation name="getAllSites">
      <soap:operation soapAction="http://localhost/shopapp/infogetAllSites" style="document" />
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="Service1">
    <documentation xmlns="http://schemas.xmlsoap.org/wsdl/" />
    <wsdl:port name="Service1Soap" binding="tns:Service1Soap">
      <soap:address location="http://localhost/ws/server.php" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
  Mit Zitat antworten
Alt 04.05.2006, 15:12  
Neuer Benutzer
 
Registriert seit: 25.04.2006
Beiträge: 7
123micha
Standard

Hi Bruchpilot,

danke für Deine Antwort. Zur WSDL. Das schliessende Schema-Element ist mir beim Kopieren wohl durchgerutscht. Wollte nicht die ellenlange Datei posten sonder nur eine exemplarische Funktion. Die Datei scheint so aber zu funktionieren. Zumindest beim PHP und auch bei JAVA Axis wird sie ohne Fehler geparsed. Habe auch Deine Datei probiert. Meine PHP-Server-Funktion gibt mir hier ebenfalls ein Ergebnis zurück. Wenn dies auch etwas anders als das, was über meine WSDL-Datei ausgegeben wird.

Das Problem ist aber eigentlich nicht die WSDL-Datei, sondern die Funktion die die SOAP-XML-Response erzeugt.

Ich habe jetzt einen Weg gefunden um die Response entsprechend der Schema-Definition zu erzeugen. Man muss Klassen und die entspr. Objekte erzeugen und diese dann entsprechend der WSDL-Struktur ineinander verschachteln. Die einzelnen Objekte werden dann zusätlich in SoapVars gepackt und mit deren Hilfe die XML-Elemente modifiziert.

Hier die WSDL-Type Definition für meine Beispielfunktion:

Code:
			<xsd:complexType name="AllSiteList">
				<xsd:all>
					<xsd:element name="AllSiteListElements"	type="tns:AllSiteListElementArray" />
				</xsd:all>
			</xsd:complexType>
			
					
			<xsd:complexType name="AllSiteListElementArray">
				<xsd:complexContent>
					<xsd:restriction base="soapenc:Array">
						<xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:AllSiteListElement[]" />
					</xsd:restriction>
				</xsd:complexContent>
			</xsd:complexType>
				
			
			<xsd:complexType name="AllSiteListElement">
				<xsd:all>
					<xsd:element name="idSite" type="tns:idSite" />
					<xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
				</xsd:all>
			</xsd:complexType>
			


		     <xsd:complexType name="idSite">
		       <xsd:attribute name="oid" type="int" use="required"></xsd:attribute>
		    </xsd:complexType>
Hier die php Funktion die die WSDL-Konforme Response zurückgibt:

Code:
<?php

 class AllSiteListElement {
     public $name;
     public $idSite;
 }

class AllSiteList{
	public $AllSiteListElements;
}

class idSite{
	public $oid;
}


##################################################################################
function getAllSites() {
##################################################################################		
				
		$sql = "SELECT idSite, name FROM site ORDER BY idSite";
		$result_db = get_mysql_result($sql);
		if (!$result_db) {
			return new SoapFault('SERVER', mysql_error(), 'getAllShopSites', '');
		}
		
		if(mysql_num_rows($result_db) == 0) {
			return new SoapFault('Client', 'empty resultset', 'getAllSites', '');
		} 
		else {

		    $AllSiteList = new AllSiteList();
		    
		    while($row = mysql_fetch_assoc($result_db)){
					
				$element = new AllSiteListElement(); 
				$OidSite = new idSite();
				
				$OidSite->oid = new SoapVar($row[idSite], XSD_INT, '','','idSite');
				
				$element->idSite = new SoapVar($OidSite, SOAP_ENC_OBJECT, 'oid','','idSite');
				$element->name = new SoapVar($row[name], XSD_STRING, '','','name');
				
				$AllSiteList->AllSiteListElements[] = new SoapVar($element, SOAP_ENC_OBJECT, 'AllSiteListElement','','AllSiteListElement');
				
	
		   	}
	    	mysql_close();
		  	
	    	return new SoapVar($AllSiteList, SOAP_ENC_OBJECT,'AllSiteList');
	    	
		}
	}

Das erzeugte Response-XML ist zumindest von php5 sowie Java (Apache Axis) verwertbar.

Ich hoffe das hilft vielleicht dem Einen oder Anderen weiter und erspart einiges an Kopfzerbrechen und Rätselraten.

Viele Grüße
Micha
123micha ist offline   Mit Zitat antworten
Alt 04.05.2006, 16:06  
Gast
 
Beiträge: n/a
Standard

Ja, und wenn Du das mapping explizit angibst, meckert php sogar, wenn es ein bestimmtes property nicht gibt.
PHP-Code:
<?php
error_reporting
(E_ALL);
ini_set('display_errors'true);
ini_set('soap.wsdl_cache_enabled'false);
ini_set('soap.wsdl_cache_dir''d:/');
ini_set('soap.wsdl_cache_ttl'0);

class 
AllSiteListElement {
    public 
$idSite,$name;
  
  public function 
__construct($id$name) {
      
$this->idSite $id;
      
$this->name $name;
  }
}

class 
ArrayOfAllSiteListElement {
    public 
$AllSiteListElement = array();
}

class 
getAllSitesResponse {
    public 
$getAllSitesResult;
    
    public function 
__construct() {
        
$this->getAllSitesResult = new ArrayOfAllSiteListElement;
    }
}

function 
getAllSites() {
    
$response = new getAllSitesResponse();

    
$response->getAllSitesResult->AllSiteListElement[] = new AllSiteListElement(1'siteA');
    
$response->getAllSitesResult->AllSiteListElement[] = new AllSiteListElement(2'siteB');
    
    return 
$response;
}

$request '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://localhost/shopapp/info" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
    <SOAP-ENV:Body><tns:getAllSites xmlns:tns="http://localhost/shopapp/info"></tns:getAllSites></SOAP-ENV:Body></SOAP-ENV:Envelope>'
;
$server = new SoapServer('test.wsdl',
    array(
        
'classmap'=>array(
            
'getAllSitesResponse'=>'getAllSitesResponse',
            
'ArrayOfAllSiteListElement'=>'ArrayOfAllSiteListElement',
            
'AllSiteListElement'=>'AllSiteListElement'
        
)
    )
);
$server->addFunction('getAllSites');
$server->handle($request);
?>
  Mit Zitat antworten
Alt 22.06.2006, 16:11  
Neuer Benutzer
 
Registriert seit: 22.06.2006
Beiträge: 3
Mathe
Standard

Hallo zusammen,

endlich habe ich mal was gefunden zu dem Thema und habe mich auch gleich rangesetzt und versucht das für mich umzusetzen. Im Prinzip stellt sich genau dasselbe Problem: Wie kann ich von meinem Soap-Server (siehe unten) unter Nutzung meiner wsdl-Datei (siehe unten) die Daten korrekt formatiert an den Clienten zurückschicken, so wie es das Schema in der wsdl-Datei verlangt. Irgendwie klappt es noch nicht.

wsdl-Datei:
  • <?xml version="1.0" encoding="utf-8" ?>
    <definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://www.bennedik.com/webservices/XfccBasic" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://www.bennedik.com/webservices/XfccBasic" xmlns="http://schemas.xmlsoap.org/wsdl/">

    <types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.bennedik.com/webservices/XfccBasic">

    <s:element name="GetMyGames">
    <s:complexType>
    <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
    </s:sequence>
    </s:complexType>
    </s:element>

    <s:element name="GetMyGamesResponse">
    <s:complexType>
    <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="GetMyGamesResult" type="s0:ArrayOfXfccGame" />
    </s:sequence>
    </s:complexType>
    </s:element>

    <s:complexType name="ArrayOfXfccGame">
    <s:sequence>
    <s:element minOccurs="0" maxOccurs="unbounded" name="XfccGame" nillable="true" type="s0:XfccGame" />
    </s:sequence>
    </s:complexType>

    <s:complexType name="XfccGame">
    <s:sequence>
    <s:element minOccurs="1" maxOccurs="1" name="id" type="s:int" />
    <s:element minOccurs="0" maxOccurs="1" name="white" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="black" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="event" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="site" type="s:string" />
    <s:element minOccurs="1" maxOccurs="1" name="myTurn" type="s:boolean" />
    <s:element minOccurs="1" maxOccurs="1" name="hasWhite" type="s:boolean" />
    <s:element minOccurs="0" maxOccurs="1" name="moves" type="s:string" />
    <s:element minOccurs="1" maxOccurs="1" name="drawOffered" type="s:boolean" />
    <s:element minOccurs="0" maxOccurs="1" name="message" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="serverInfo" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="whiteTitle" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="blackTitle" type="s:string" />
    <s:element minOccurs="1" maxOccurs="1" name="whiteElo" type="s:int" />
    <s:element minOccurs="1" maxOccurs="1" name="blackElo" type="s:int" />
    <s:element minOccurs="0" maxOccurs="1" name="whiteNA" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="blackNA" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="eventSponsor" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="section" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="stage" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="board" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="timeControl" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="setup" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="fen" type="s:string" />
    <s:element minOccurs="1" maxOccurs="1" name="result" type="s0:Result" />
    <s:element minOccurs="1" maxOccurs="1" name="daysPlayer" type="s:int" />
    <s:element minOccurs="1" maxOccurs="1" name="hoursPlayer" type="s:int" />
    <s:element minOccurs="1" maxOccurs="1" name="minutesPlayer" type="s:int" />
    <s:element minOccurs="1" maxOccurs="1" name="daysOpponent" type="s:int" />
    <s:element minOccurs="1" maxOccurs="1" name="hoursOpponent" type="s:int" />
    <s:element minOccurs="1" maxOccurs="1" name="minutesOpponent" type="s:int" />
    <s:element minOccurs="0" maxOccurs="1" name="gameLink" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="eventDate" type="s:string" />
    </s:sequence>
    </s:complexType>

    <s:simpleType name="Result">
    <s:restriction base="s:string">
    <s:enumeration value="Ongoing" />
    <s:enumeration value="WhiteWins" />
    <s:enumeration value="BlackWins" />
    <s:enumeration value="Draw" />
    <s:enumeration value="WhiteWinAdjudicated" />
    <s:enumeration value="BlackWinAdjudicated" />
    <s:enumeration value="DrawAdjudicated" />
    <s:enumeration value="WhiteDefaulted" />
    <s:enumeration value="BlackDefaulted" />
    <s:enumeration value="BothDefaulted" />
    <s:enumeration value="Cancelled" />
    <s:enumeration value="AdjudicationPending" />
    </s:restriction>
    </s:simpleType>

    <s:element name="MakeAMove">
    <s:complexType>
    <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string" />
    <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
    <s:element minOccurs="1" maxOccurs="1" name="gameId" type="s:int" />
    <s:element minOccurs="1" maxOccurs="1" name="resign" type="s:boolean" />
    <s:element minOccurs="1" maxOccurs="1" name="acceptDraw" type="s:boolean" />
    <s:element minOccurs="1" maxOccurs="1" name="movecount" type="s:int" />
    <s:element minOccurs="0" maxOccurs="1" name="myMove" type="s:string" />
    <s:element minOccurs="1" maxOccurs="1" name="offerDraw" type="s:boolean" />
    <s:element minOccurs="1" maxOccurs="1" name="claimDraw" type="s:boolean" />
    <s:element minOccurs="0" maxOccurs="1" name="myMessage" type="s:string" />
    </s:sequence>
    </s:complexType>
    </s:element>

    <s:element name="MakeAMoveResponse">
    <s:complexType>
    <s:sequence>
    <s:element minOccurs="1" maxOccurs="1" name="MakeAMoveResult" type="s0:MakeAMoveResult" />
    </s:sequence>
    </s:complexType>
    </s:element>

    <s:simpleType name="MakeAMoveResult">
    <s:restriction base="s:string">
    <s:enumeration value="Success" />
    <s:enumeration value="ServerError" />
    <s:enumeration value="AuthenticationFailed" />
    <s:enumeration value="InvalidGameID" />
    <s:enumeration value="NotYourGame" />
    <s:enumeration value="NotYourTurn" />
    <s:enumeration value="InvalidMoveNumber" />
    <s:enumeration value="InvalidMove" />
    <s:enumeration value="NoDrawWasOffered" />
    <s:enumeration value="LostOnTime" />
    <s:enumeration value="YouAreOnLeave" />
    <s:enumeration value="MoveIsAmbigous" />
    </s:restriction>
    </s:simpleType>

    </s:schema>
    </types>

    <message name="GetMyGamesSoapIn">
    <part name="parameters" element="s0:GetMyGames" />
    </message>

    <message name="GetMyGamesSoapOut">
    <part name="parameters" element="s0:GetMyGamesResponse" />
    </message>

    <message name="MakeAMoveSoapIn">
    <part name="parameters" element="s0:MakeAMove" />
    </message>

    <message name="MakeAMoveSoapOut">
    <part name="parameters" element="s0:MakeAMoveResponse" />
    </message>

    <message name="MakeAMove2SoapIn">
    <part name="parameters" element="s0:MakeAMove2" />
    </message>

    <message name="MakeAMove2SoapOut">
    <part name="parameters" element="s0:MakeAMove2Response" />
    </message>

    <portType name="XfccBasicSoap">
    <operation name="GetMyGames">
    <input message="s0:GetMyGamesSoapIn" />
    <output message="s0:GetMyGamesSoapOut" />
    </operation>
    <operation name="MakeAMove">
    <input message="s0:MakeAMoveSoapIn" />
    <output message="s0:MakeAMoveSoapOut" />
    </operation>
    </portType>

    <binding name="XfccBasicSoap" type="s0:XfccBasicSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

    <operation name="GetMyGames">
    <soapperation soapAction="http://www.bennedik.com/webservices/XfccBasic/GetMyGames" style="document" />
    <input>
    <soap:body use="literal" />
    </input>
    <output>
    <soap:body use="literal" />
    </output>
    </operation>

    <operation name="MakeAMove">
    <soapperation soapAction="http://www.bennedik.com/webservices/XfccBasic/MakeAMove" style="document" />
    <input>
    <soap:body use="literal" />
    </input>
    <output>
    <soap:body use="literal" />
    </output>
    </operation>
    </binding>

    <service name="XfccBasic">
    <port name="XfccBasicSoap" binding="s0:XfccBasicSoap">
    <soap:address location="http://127.0.0.1/xfcc/XFCCbasic.php" />
    </port>
    </service>
    </definitions>

PHP5-Soap-Server-Skript:
PHP-Code:
<?
class ArrayOfXfccGame {
    public 
$id;
    public 
$white;
    public 
$black;
    public 
$event;
    public 
$site;
    public 
$myTurn;
    public 
$hasWhite;
    public 
$moves;
    public 
$drawOffered;
    }

class 
AllGamesList{
    public 
$ArrayOfXfccGames;
    }

class 
id{
    public 
$oid;
    }

##################################################################################
function GetMyGames($data) {
##################################################################################      
    
$username $data->username;
    
$password $data->password;

    require(
'config.inc.php4');
            
    
$sql "SELECT * FROM tabelle WHERE username = '$username' AND password = '$password' ORDER BY id ASC";
    
$result_db mysql_query($sql$conn);
    if (!
$result_db) {
        return new 
SoapFault('SERVER'mysql_error(), 'GetMyGames''');
        }

    if(
mysql_num_rows($result_db) == 0) {
        return new 
SoapFault('Client''empty resultset''GetMyGames''');
        }

    else     {
        
$AllGamesList = new AllGamesList();

        while(
$partiedaten mysql_fetch_array($result_dbMYSQL_ASSOC)) {
            
$daten array_values($partiedaten);
            
            
$element = new ArrayOfXfccGame();
            
$OidGame = new id();
            
$OidGame->oid = new SoapVar($daten[0], XSD_INT'','','id');
            
            
$element->id = new SoapVar($OidGameSOAP_ENC_OBJECT'oid','','id');
            
$element->white= new SoapVar($daten[1], XSD_STRING'','','white');
            
$element->black= new SoapVar($daten[2], XSD_STRING'','','black');
            
$element->event= new SoapVar($daten[3], XSD_STRING'','','event');
            
$element->site= new SoapVar($daten[4], XSD_STRING'','','site');
            
$element->myTurn= new SoapVar($daten[5], XSD_STRING'','','myTurn');
            
$element->hasWhite= new SoapVar($daten[6], XSD_STRING'','','hasWhite');
            
$element->moves= new SoapVar($daten[7], XSD_STRING'','','moves');
            
$element->drawOffered= new SoapVar($daten[8], XSD_STRING'','','drawOffered');

            
$AllGamesList->ArrayOfXfccGames[] = new SoapVar($elementSOAP_ENC_OBJECT'AllGamesList','','AllGamesList');
            
            }
        
mysql_close();
        return new 
SoapVar($AllGamesListSOAP_ENC_OBJECT,'AllGamesList');
        }
    }


try     {
    
$server = new SOAPServer('xfcc.wsdl');
    
$server->addFunction('GetMyGames');
    
$server->handle();
    }

catch (
SOAPFault $f) {
    print 
$f->faultstring;
    }
?>
Kann mir jemand weiterhelfen?
Vielen Dank schon mal!
Matthias
Mathe ist offline   Mit Zitat antworten
Alt 22.06.2006, 17:29  
Neuer Benutzer
 
Registriert seit: 22.06.2006
Beiträge: 3
Mathe
Standard Erfolgsmeldung!

Habs! Läuft!
Mathe ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

LinkBacks (?)
LinkBack to this Thread: http://www.php.de/php-fortgeschrittene/39609-ssoeber-soap-arrays-bzw-complex-types-zurueckgeben.html
Erstellt von For Type Datum
Metacrawler - Die Metasuchmaschine. This thread Refback 02.10.2008 22:30

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
SOAP Webdienste / Complex Types scuzzlebud PHP-Fortgeschrittene 10 20.06.2007 09:39
[Erledigt] Soap wsdl und Arrays PHP-Fortgeschrittene 1 06.01.2006 12:26

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php soap array, soap array, php soap complex types, soap php array, soap return array, wsdl complextype, soap-enc:array, php soap parameter, php soap complex type, soap arrays, php soapclient return array, php soap complextype, soap array zurückgeben, soap array php, http://www.php.de/php-fortgeschrittene/39609-ssoeber-soap-arrays-bzw-complex-types-zurueckgeben.html, php soapclient array, soap response array, php soap types, wsdl complex types, soapenc:array

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:16 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.