|
Posted by cfendt on 10/04/36 11:08
Selon Richard Lynch <ceo@l-i-e.com>:
> Charles FENDT wrote:
> > <?php
> > $server = new SoapServer(null, array('uri' => "http://test-uri/"));
> > $server->handle("");
> > echo "\nAlive!!!!\n";
> > ?>
> >
> > here is the result
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <SOAP-ENV:Envelope
> > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
> > <SOAP-ENV:Body>
> > <SOAP-ENV:Fault>
> > <faultcode>SOAP-ENV:Server</faultcode>
> > <faultstring>Bad Request</faultstring>
> > </SOAP-ENV:Fault>
> > </SOAP-ENV:Body>
> > </SOAP-ENV:Envelope>
> >
> > this didn't output "Alive!!!!" on stdout...
> > the script ends with the SoapServer::handle() call.
>
> What I know about SOAP could be carved on a bar of soap with room left
> over for all the angels in heaven...
>
> But it looks to me like you didn't set up your SOAP server to respond to a
> request for "", so your SOAP server generated a "Bad Request" error, and
> then it killed your PHP script.
>
> WILD GUESS:
> Change your 'null' when you create the thing to '' and maybe SOAP will
> respond to '' with the uri you provided.
>
> There may also be some kind of wild-card system you can use in place of
> null, or a SOAP function to tell it what to *DO* when an invalid request
> is made, rather than the default "Bad Request" and die() behaviour it
> seems to be doing...
>
> A quick check of the manual indicates that there is some way to do this:
> http://us3.php.net/manual/en/function.is-soap-fault.php
> I dunno how you create a SoapClient with exceptions set to FALSE, but
> that's what you're gonna have to do.
>
> --
> Like Music?
> http://l-i-e.com/artists.htm
>
>
Hello,
In fact, I use a WSDL mode...
here is an other exemple:
<?php
class web_service {
function sayHello($input) {
return "Hello, ".$input."...";
}
}
$soap_query =
"<soapenv:Envelope
xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>"
. " <soapenv:Body>"
. " <m:sayHello xmlns:m='http://localhost/test.php'>"
. " <m:login>toto</m:login>"
. " </m:sayHello>"
. " </soapenv:Body>"
. "</soapenv:Envelope>";
$server = new SoapServer("./test.wsdl");
$server->setclass("web_service");
$server->handle($soap_query);
echo "\r\nAlive!!!!\r\n";
$server->handle("");
echo "\r\nAlive!!!!\r\n";
?>
<?xml version="1.0"?>
<wsdl:definitions
xmlns:tns="urn:TEST"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:typens="urn:TEST"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="urn:TEST"
name="TEST">
<message name="sayHelloInputMessage">
<part name="login" type="xsd:string"/>
</message>
<message name="sayHelloOutputMessage">
<part name="hello" type="xsd:string"/>
</message>
<portType name="TESTPorts">
<operation name="sayHello">
<input message="typens:sayHelloInputMessage"/>
<output message="typens:sayHelloOutputMessage"/>
</operation>
</portType>
<binding name="TESTBinding" type="typens:TESTPorts">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sayHello">
<soap:operation soapAction="http://localhost/test.php"/>
<input ><soap:body use="literal"/></input >
<output><soap:body use="literal"/></output>
</operation>
</binding>
<service name="TESTWebService">
<documentation>TEST WebService</documentation>
<port name="TESTPorts" binding="typens:TESTBinding">
<soap:address location="http://localhost/test.php"/>
</port>
</service>
</wsdl:definitions>
here is the result:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:sayHelloResponse>
<hello>Hello, toto...</hello>
</SOAP-ENV:sayHelloResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Alive!!!!
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>Bad Request</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
I 've to do a command line daemon which provide a soap interface...
I just catch the client request, I call handle(), I send the result, and I
contune with the next query...
But if there is a fault, my daemon is killed...
I don't understand why the handle methode kill the process when the answer is
"soapFault"...
I didn't find any reference to a "SoapServer" fault handler...
It was just for client... Your exemple (with client :-( ) could be translated
like this :
$server->handle(...);
if ($server->isSoapFault()) ...
But the test won't be done... the script is already killed!!!
:-(
regards,
FENDT Charles
[Back to original message]
|