php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.02.2007, 09:23  
Neuer Benutzer
 
Registriert seit: 14.02.2007
Beiträge: 1
kuschky
Standard Zugriff auf complexType Rückgabe Objekt von SOAP Aufruf?

Hallo, ich habe mir einen kleinen einfachen PHP SOAP Server geschrieben dem ich einen einen beliebigen Wert als Funktionsargument übergebe und einen complexType als Rückgabewert erwarte. Das Ganze funktioniert auch soweit als dass mir getLastResponse() in der Ausgabe anzeigt, dass die Werte in der SOAP Response zu finden sind. Wie kann ich nun auf die einzelnen Elemente des zurückgegebenen SoapVar Objekts zugreifen? $o2->MyProperty2 liefert kein Ergebnis zurück. Was muss ich tun um auf die Rückgabewerte zugreifen zu können?

Anbei noch mein Source

WSDL:
Code:
<?xml version ='1.0' encoding ='UTF-8' ?>
<definitions name='StockQuote'
  targetNamespace='http://example.org/StockQuote'
  xmlns:tns=' http://example.org/StockQuote '
  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/'>
  
<types>
  <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ExampleAPI">

     <complexType name="MyWSDLStructure">
 		<sequence>
   			<element name="MyProperty1" type="xsd:integer"/>
   			<element name="MyProperty2" type="xsd:string"/>
 		</sequence>
 	 </complexType>

  </xsd:schema>
</types>

<message name='getQuoteRequest'>
  <part name='symbol' type='xsd:string'/>
</message>
<message name='getQuoteResponse'>
  <part name='Result' type='tns:MyWSDLStructure'/>
</message>

<portType name='StockQuotePortType'>
  <operation name='getQuote'>
    <input message='tns:getQuoteRequest'/>
    <output message='tns:getQuoteResponse'/>
  </operation>
</portType>

<binding name='StockQuoteBinding' type='tns:StockQuotePortType'>
  <soap:binding style='rpc'
    transport='http://schemas.xmlsoap.org/soap/http'/>
  <operation name='getQuote'>
    <soap:operation soapAction='urn:xmethods-delayed-quotes#getQuote'/>
    <input>
      <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
      <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
</binding>

<service name='StockQuoteService'>
  <port name='StockQuotePort' binding='StockQuoteBinding'>
    <soap:address location='http://www.elbe-net.de/test/server2.php'/>
  </port>
</service>
</definitions>
SERVER:
PHP-Code:
<?php

class MyComplexDataType {
     public 
$MyProperty1;
     public 
$MyProperty2;
}

class 
QuoteService {
  private 
$quotes = array("ibm" => 98.42);  

  function 
getQuote($symbol) {
    
    
$result = new MyComplexDataType();
    
$result->MyProperty1 42;
    
$result->MyProperty2 "Der Sinn des Lebens";
 
    return 
$result;
    
  }
}

$classmap = array('MyWSDLStructure' => 'MyComplexDataType');
$server = new SoapServer("stockquote2.wsdl", array('classmap' => $classmap));
$server->setClass("QuoteService");
$server->handle();
?>
CLIENT:
PHP-Code:
<?php
  
class MyComplexDataType {
     public 
$MyProperty1;
     public 
$MyProperty2;
  }
  
  
//$o2=new MyComplexDataType();
  
  
$classmap = array('MyWSDLStructure' => 'MyComplexDataType');
  
  
$client = new SoapClient("stockquote2.wsdl",array("classmap" => $classmap,
                                                    
"trace"      => 1,
                                                    
"exceptions" => 1) );
    
  
  
$o2=$client->getQuote("ibm");
  print 
"<pre>\n";
  print 
"Property1  : $o2->MyProperty1
"
;  // LIEFERT KEINE AUSGABE!
  
print "Property2  : $o2->MyProperty2
"
;  // LIEFERT KEINE AUSGABE!
  
print "Request :\n".htmlspecialchars($client->__getLastRequest()) ."\n";
  print 
"Response:\n".htmlspecialchars($client->__getLastResponse())."\n";
  print 
"</pre>";
?>
kuschky ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 20.03.2007, 17:09  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo kuschky,

ich bin auf dem SOAP-Gebiet nicht fit, aber ich würde auf Client-Seite erwarten, dass ich mir das aktuelle Response-Objekt holen muss und dort per

$oResponse->MyProperty1

auf die Inhalte des Objekts zugreifen kann. Korrigiere mich, wenn ich irre...
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 24.06.2010, 10:17  
Neuer Benutzer
 
Registriert seit: 22.06.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
Brati befindet sich auf einem aufstrebenden Ast
Standard

Ich poste mal meine Ausgabe ^^ vielleicht Hilft sie dir
PHP-Code:
<?php

$name
$_GET['name1'];//irrelaewant für das hier 
$adr $_GET['wert'];// url 
$text $_GET['text'];//irrelaewant für das hier 
$array2 unserialize($_GET['array']);// das sind die namen der parameter
$arraylen=count($array2);
$param = new stdClass(); // parameter als Object erschaffen da wenn nur ein Parameter übergeben wird muss es als Object geschehen sonst als Array


for($i=0;$arraylen>$i;$i++){

$temp=$array2[$i];
$strlen=strlen($temp);
$strpos strpos($temp,' ',0);
$temp substr($temp,$strpos+1,$strlen);
$ar $_GET["$temp"];
$param->$temp "$ar"
}
if(
$arraylen 1){

$param = array($param); // object zum array machen
  
}



//---------------------------------------------------------------------------------------
    
    
if(isset($adr)){
        try {
      
    
$soapy = new SoapClient($adr, array( 
      
"trace" => 1,
      ));
     
$result $soapy->__call("$name", array("parameters" => $param)); 
    print 
"<pre>";
    
print_r($result);
    print 
"</pre>";
    
//echo "REQUEST:\n" . htmlentities($client->__getLastRequest()) . "\n";
          

    catch (
SoapFault $e) {
      
$result $soapy->__getLastRequest(); 
      echo 
str_replace("&gt;&lt;""&gt;<br>&lt;"htmlentities($result)); 
     
      echo 
"<font color=\"red\"><br />Soapfault:<br />"
      echo 
"<pre>"var_dump($e) , "</pre>"
                         }}
?>
<form action="soap1.php">
<input type="submit" value="zurück">
<input name="url" type="hidden" size="100" value='<?php echo "$adr";?>' />
</form>
bei Fragen frag einfach ^^

Geändert von Brati (24.06.2010 um 10:32 Uhr).
Brati ist offline   Mit Zitat antworten
Alt 24.06.2010, 12:35  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
bei Fragen frag einfach ^^
Hallo? Wer stellt hier die Fragen und will Antworten? Sicher nicht ich.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. 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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Zugriff auf verschachteltes Objekt aus Funktion FloMX PHP-Fortgeschrittene 10 28.03.2006 17:01
[Erledigt] PHP5 OOP Zugriff aus einem Objekt auf ein externes Objekt PHP Tipps 2006 5 28.01.2006 16:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
zend soap classmap, php soap classmap, zend soap client classmap, soap aufruf, soap classmap, php soap complextype, soap objekte, http://www.php.de/php-fortgeschrittene/43440-zugriff-auf-complextype-rueckgabe-objekt-von-soap-aufruf.html, php soapserver complextype, php complextype, soapclient classmap, php soapclient classmap, complextype, zend_soap_client classmap, zend soap complextype, php soap objekte, soap object, php soap response object, php soap objekt, zend complextype sequence

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:26 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.