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