Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #4209

Re: PHP-Soap: Im WSDL 2 Funktionen gleichen Namens

Path csiph.com!aioe.org!news.mb-net.net!open-news-network.org!.POSTED.201.232.197.178.dynamic.wless.lssmb00p-cgnat.res.cust.swisscom.ch!not-for-mail
From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Newsgroups de.comp.lang.php
Subject Re: PHP-Soap: Im WSDL 2 Funktionen gleichen Namens
Date Mon, 14 Aug 2017 22:36:48 +0200
Organization PointedEars Software (PES)
Lines 141
Message-ID <7334207.T7Z3S40VBb@PointedEars.de> (permalink)
References <omrrf2$1ap$1@news.albasani.net>
Reply-To Thomas 'PointedEars' Lahn <php@PointedEars.de>
Mime-Version 1.0
Content-Type text/plain; charset="UTF-8"
Content-Transfer-Encoding 8Bit
Injection-Info gwaiyur.mb-net.net; posting-host="201.232.197.178.dynamic.wless.lssmb00p-cgnat.res.cust.swisscom.ch:178.197.232.201"; logging-data="23788"; mail-complaints-to="abuse@open-news-network.org"
User-Agent KNode/4.14.2
X-Face %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&.<b';Md8`dH6iqhT)6C^.Px|[=M@7=Ik[_w<%n1Up"LPQNu2m8|L!/3iby{-]A+#YE}Kl{Cw$\U!kD%K}\2jz"QQP6Uqr],./"?;=4v
Cancel-Lock sha1:V6y9SD8BF0MgI9KmC/9ONEJ49eA=
X-User-ID U2FsdGVkX18bjqARVb2Udd+E3574shs3VbnLX8tQHI1fMGhO1eriaQ==
Face iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEXTxa4RFk5dUWANED8PFEfy7+MGBiW+n3ZNF/QuAAACaElEQVQ4jVXUwVOcMBQG8Dc7Rc4PUntdWV2uxjDpGaGeozOp1woar4jd5t/v9wLstMwsA/ntlxdCAgUc1hjTc9/JCZfGoo3wG3HdmdAWrIJRHe7GM/TmpY5VFefuVcAkkPbLIaN8rmPmjloyZxgyR3GuJ4K0AGtJ2htz8o7yqikm759fldQXaMpbDzjKAG+8v+AugVTOPO5DOjLvGtUYQwh0CPjnVMyGd+8/GfUB5nLKJDD2aLDh5HYyMDJGDwQIo2ZmZcKbowNmAdB/AzyFhrmF2MHRb0QJJfaAnwGB6orZhoykLzJtGwF/xpYxI1dswomiUj3gTuAIqCn/4C7cULwGNBtwMTk3Y4LfKB5YUaOKBKYtpplm7u0vip8tU1NWWyI/7XdcSuIDoMt6rVHMWT0DbjHPGqDqZVSa6zleLcUTcIKLoMv3ueJluALtAo9B302zPPlrtiVScRdCjXvVh3e3JpYa/jjkuC9N+LrBMlz/eAN4eQijX2EdLo6c5tGGHwLyHFtXk89dDGHwCVhG9T0S/j55AhRZgkMCmUQXJ49TnS1wnQDvw0eAh9ICeMmEFbCnPMFzjAvsWoEWEFdYEx+S0MoUZ1gT1wId8+AF3Bl2OoEu906AUHx5VLw/gXYg/x84loOah/2UYNrgiwSwGO7RfUzVBbx/kgpckumGOi6QirtD6gkLTitbnxNol47S2jVc2vsN5kPqaAHT8uUdAJM4v/DanjYOwmUjWznGfwB7sGtAtor5BgofDuzaRj4kSQAqDakTsKORa3Q3xKi3gE1fhl71KRMqrdZ2AWNNg/YOhQyrVBnb+i+nEg4bsDA+egAAAABJRU5ErkJggg==
Xref csiph.com de.comp.lang.php:4209

Show key headers only | View raw


Gerome Muent wrote:

> ich habe ein WSDL einer API (Across Language Server).
> Daran kann ich nichts ändern.
> 
> Im WSDL gibt es 2 Funktionen gleichen Namens, aber mit unterschiedlichen
> Parametern:
> <message name="ObjectManager.GetTaskState">
>    <part name="ST" type="xsd:string"/>
>    <part name="DocumentGuid" type="xsd:string"/>
>    <part name="SourceLanguageLcid" type="xsd:int"/>
>    <part name="TargetLanguageLcid" type="xsd:int"/>
>    <part name="TaskTemplateGuid" type="xsd:string"/>
> </message>
> 
> <message name="TaskManager.GetTaskState">
>    <part name="ST" type="xsd:string"/>
>    <part name="TaskGuid" type="xsd:string"/>
> </message>
> 
> Ich möchte nun explizit die 2. aufrufen aus dem Kontext "TaskManager".
> 
> Ein Aufruf von
> $crossAPI->getTaskState($ST, $taskGUID);
> zeigt im Logfile aber, daß die erste aufgerufen wird und die nicht
> akzeptiert wird, weil eben zu wenig Parameter übergeben werden.
> 
> Ich habe dann mal sowas probiert:
> $crossAPI->__call("TaskManager.getTaskState", array($ST, $taskGUID);
> oder
> $crossAPI->__callSoap("TaskManager.getTaskState", array($ST, $taskGUID);
> 
> endet beides in:
> Function ("ObjectManager.GetTaskState") is not a valid method for
> this service
> 
> Ein Auruf von $crossClient->getFunctions() liefert:
> zuerst:
> [90] => IResult GetTaskState(string $ST, string $DocumentGuid, int
> $SourceLanguageLcid, int $TargetLanguageLcid, string $TaskTemplateGuid)
> dann
> [550] => IResult GetTaskState(string $ST, string $TaskGuid)
> 
> 
> => Wie komme ich an die 2. Funktion heran?

Ich kenne mich mit SOAP/WSDL kaum aus⁰.  Wenn ich jedoch das Beispieldokument
aus der WSDL-1.1-Spezifikation¹ mit PHP 5.6.30-0+deb8u1 (cli) verwende², dann
fällt mir auf, dass getFunctions() anscheinend nicht die Namen der Messages
im Dokument, sondern die Signaturen der an einen “port” “gebundenen”
*Operationen* liefert.

Dem Beispiel entnehme ich, dass die Messages anders heissen (müssen?) als 
die Operationen:

|     <message name="GetLastTradePriceInput">
                     ^^^^^^^^^^^^^^^^^^^^^^
|         <part name="body" element="xsd1:TradePriceRequest"/>
|     </message>
| 
|     <message name="GetLastTradePriceOutput">
                     ^^^^^^^^^^^^^^^^^^^^^^^
|         <part name="body" element="xsd1:TradePrice"/>
|     </message>
| 
|     <portType name="StockQuotePortType">
                      ^^^^^^^^^^^^^^^^^^
|         <operation name="GetLastTradePrice">
                           ^^^^^^^^^^^^^^^^^
|            <input message="tns:GetLastTradePriceInput"/>
                                 ^^^^^^^^^^^^^^^^^^^^^^
|            <output message="tns:GetLastTradePriceOutput"/>
                                  ^^^^^^^^^^^^^^^^^^^^^^^
|         </operation>
|     </portType>
| 
|     <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
                     ^^^^^^^^^^^^^^^^^^^^^            ^^^^^^^^^^^^^^^^^^
|         <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|         <operation name="GetLastTradePrice">
                           ^^^^^^^^^^^^^^^^^
|            <soap:operation soapAction="http://example.com/GetLastTradePrice"/>
|            <input>
|                <soap:body use="literal"/>
|            </input>
|            <output>
|                <soap:body use="literal"/>
|            </output>
|         </operation>
|     </binding>
| 
|     <service name="StockQuoteService">
|         <documentation>My first service</documentation>
|         <port name="StockQuotePort" binding="tns:StockQuoteSoapBinding">
                                                   ^^^^^^^^^^^^^^^^^^^^^
|            <soap:address location="http://example.com/stockquote"/>
|         </port>
|     </service>

Wenn ich das operation-Element im binding-Element auskommentiere, ist 
mit

  php -d soap.wsdl_cache_ttl=0 -r 'var_dump((new SoapClient("test.wsdl"))->__getFunctions());' 

der Rückgabewert von __getFunctions() ein leeres Array; ansonsten:

| array(1) {
|   [0] =>
|   string(40) "UNKNOWN GetLastTradePrice(UNKNOWN $body)"
| }

Siehe auch <https://en.wikipedia.org/wiki/WSDL>.

PHPs SOAP-Implementierung unterstützt gemäss Handbuch nur ein *Subset*
von WSDL 1.1.  Vielleicht ist das in diesem Fall das Problem:

<http://php.net/manual/en/intro.soap.php>

Beachte auch, dass WSDL-Dokumente von PHP *sitzungsübergreifend* gecachet 
werden.  Während der Entwicklung sollte deshalb soap.wsdl_cache_ttl=0 
gesetzt werden.  (Ich tat dies zunächst nicht, und es verwirrte mich beim
Testen: egal, was ich im Testdokument änderte, es wurde immer dieselbe
Funktionsliste zurückgegeben.)

<http://php.net/manual/en/soapclient.soapclient.php>

Ein minimales, *funktionelles* WSDL-Dokument zum Testen wäre hilfreich.

______________
⁰ für den ZCE hat mein Wissen darüber im entsprechenden Prüfungsabschnitt
  immerhin gereicht ;-b
¹ <http://www.w3.org/TR/2001/NOTE-wsdl-20010315#_wsdl>
  (Die Dokumentstruktur ist da übrigens auch kapott: referenziert wird
  “1.1 WSDL Example” und es verweist auf “1.2 WSDL Document Example”;
  jedoch existiert auch “1.2 Notational Conventions”)
² das war erst möglich, nachdem ich den Fehler, dass dort “StockQuoteBinding”
  statt korrekt “StockQuoteSoapBinding” referenziert wird, korrigiert hatte
-- 
PointedEars
Zend Certified PHP Engineer <http://www.zend.com/en/yellow-pages/ZEND024953>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

Back to de.comp.lang.php | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

PHP-Soap: Im WSDL 2 Funktionen gleichen Namens Gerome Muent <kontakt@bmservices.de> - 2017-08-14 11:44 +0200
  Re: PHP-Soap: Im WSDL 2 Funktionen gleichen Namens Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-08-14 22:36 +0200

csiph-web