SOAP Web Service Tutorials - Herong's Tutorial Examples - v5.13, by Herong Yang
HelloServerWsdl.php - SOAP 1.2 Server in WSDL Mode
This section describes a tutorial example of a complete SOAP application with both server and client programs using SOAP 1.2 in WSDL mode.
Now let's move forward one step further: creating a SOAP 1.2 server application in WSDL mode. Here is the same hello server modified to work in WSDL mode, HelloServerWdsl.php:
<?php # HelloServerWsdl.php # Copyright (c) 2009 HerongYang.com. All Rights Reserved. # function hello($someone) { return "Hello " . $someone . "! - With WSDL"; } ini_set("soap.wsdl_cache_enabled", "0"); $server = new SoapServer("http://localhost/Hello.wsdl", array('soap_version' => SOAP_1_2)); $server->addFunction("hello"); $server->handle(); ?>
Nothing special in the program. The server object is now created with the location of the WSDL document.
Here is the WSDL document, Hello.wsdl
<?xml version="1.0"?> <!-- Hello.wsdl - Copyright (c) 2009 HerongYang.com. All Rights Reserved. --> <definitions name="MyDefinition" targetNamespace="urn:myTargetNamespace" xmlns:tns="urn:myTns" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <message name="myRequest"> <part name="reqParam" type="xsd:string"/> </message> <message name="myResponse"> <part name="resParam" type="xsd:string"/> </message> <portType name="MyPortType"> <operation name="hello"> <input message="tns:myRequest"/> <output message="tns:myResponse"/> </operation> </portType> <binding name="MyBinding" type="tns:MyPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="hello"> <soap:operation soapAction=""/> <input> <soap:body use="encoded" namespace="urn:myInputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:myOutputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="MyService"> <documentation>Returns a greeting string. </documentation> <port name="MyPort" binding="tns:MyBinding"> <soap:address location="http://localhost/HelloServerWsdl.php"/> </port> </service> </definitions>
The WSDL document looks complicated. But it actually very simple to understand, as long as you remember the following points:
To install HelloServerWsdl.php to my Apache server, copy these two files to the Apache document directory:
herong> copy HelloServerWsdl.php \local\apache\htdocs herong> copy Hello.wsdl \local\apache\htdocs
Of course, we need to modify our hello client program as, HelloClientWsdl.php:
<?php # HelloClientWsdl.php # Copyright (c) 2009 HerongYang.com. All Rights Reserved. # $client = new SoapClient("http://localhost/Hello.wsdl", array('soap_version' => SOAP_1_2,'trace' => 1 )); echo("\nDumping client object functions:\n"); var_dump($client->__getFunctions()); $return = $client->__soapCall("hello",array("world")); echo("\nReturning value of __soapCall() call: ".$return); # $return = $client->hello("world"); # echo("\nReturning value: ".$return); echo("\nDumping request headers:\n" .$client->__getLastRequestHeaders()); echo("\nDumping request:\n".$client->__getLastRequest()); echo("\nDumping response headers:\n" .$client->__getLastResponseHeaders()); echo("\nDumping response:\n".$client->__getLastResponse()); ?>
When you are ready to test, run HelloClientWsdl.php. You will get:
herong> php HelloClientWsdl.php Dumping client object functions: array(1) { [0]=> string(30) "string hello(string $reqParam)" } Returning value of __soapCall() call: Hello world! - With WSDL Dumping request headers: POST /HelloServerWsdl.php HTTP/1.1 Host: localhost Connection: Keep-Alive User-Agent: PHP-SOAP/7.0.2 Content-Type: application/soap+xml; charset=utf-8; action="" Content-Length: 457 Dumping request: <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="urn:myInputNamespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"> <env:Body> <ns1:hello env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <reqParam xsi:type="xsd:string">world</reqParam> </ns1:hello> </env:Body> </env:Envelope> Dumping response headers: HTTP/1.1 200 OK Date: Sun, 02 Sep 2018 18:50:59 GMT Server: Apache/2.4.12 (Win32) PHP/7.0.2 X-Powered-By: PHP/7.0.2 Content-Length: 573 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: application/soap+xml; charset=utf-8 Dumping response: <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="urn:myOutputNamespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"> <env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"> <ns1:helloResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <rpc:result>resParam</rpc:result> <resParam xsi:type="xsd:string">Hello world! - With WSDL</resParam> </ns1:helloResponse> </env:Body> </env:Envelope>
Anything interesting here? Yes. Some names defined in the WSDL document did show up in the SOAP request message and response message, like: "urn:myInputNamespace", "reqParam", "urn:myOutputNamespace", etc.
Table of Contents
Introduction to SOAP (Simple Object Access Protocol)
SOAP Message Transmission and Processing
SOAP MEP (Message Exchange Patterns)
PHP SOAP Extension Client Programs
►PHP SOAP Extension Server Programs
PHP SOAP Extension Functions for Server Programs
HelloServer.php - First SOAP Server Application
HelloServer12.php - SOAP 1.2 Server Application
►HelloServerWsdl.php - SOAP 1.2 Server in WSDL Mode
HelloServerWsdl2.php - SOAP 1.1/1.2 Server in WSDL Mode
PHP SOAP Web Service Example - getTemp
Perl SOAP::Lite - SOAP Server-Client Communication Module
Perl Socket Test Program for HTTP and SOAP
Perl SOAP::Lite for NumberToWords SOAP 1.1 Web Service
Perl SOAP::Lite for SOAP 1.2 Web Services
Java Socket and HttpURLConnection for SOAP
SAAJ - SOAP with Attachments API for Java
SoapUI - SOAP Web Service Testing Tool
WS-Security - SOAP Message Security Extension
WS-Security X.509 Certificate Token
Perl SOAP::Lite for GetSpeech SOAP 1.1 Web Service
Perl SOAP::Lite 0.710 for SOAP 1.2 Web Services
Perl SOAP::Lite 0.710 for WSDL