Sie sind auf Seite 1von 6

Programming with NuSOAP Using WSDL

http://www.scottnichol.com/nusoapprogwsdl.htm

Programming with NuSOAP Using WSDL


NuSOAP is a group of PHP classes that allow developers to create and consume SOAP web services. It does not require any special PHP extensions. The current release version (0.6.7) of NuSOAP at the time this was written (03-November-2004), supports much of the SOAP 1.1 specification. It can generate WSDL 1.1 and also consume it for use in serialization. Both rpc/encoded and document/literal services are supported. However, it must be noted that NuSOAP does not provide coverage of the SOAP 1.1 and WSDL 1.1 that is as complete as some other implementations, such as .NET and Apache Axis. This document follows up Introduction to NuSOAP, Programming with NuSOAP, and Programming with NuSOAP Part 2 with additional samples that demonstrate how to use NuSOAP to create and consume SOAP web services using WSDL. Hello, World Redux The New Client Defining New Data Structures

Hello, World Redux


Showing no imagination whatsoever, I used the ubiquitous "Hello, World" example in Introduction to NuSOAP. In that document, I showed the SOAP request and response exchanged by the client and server. Here, I extend that sample to use WSDL. A WSDL document provides metadata for a service. NuSOAP allows a programmer to specify the WSDL to be generated for the service programmatically using additional fields and methods of the soap_server class. The service code must do a number of things in order for correct WSDL to be generated. Information about the service is specified by calling the configureWSDL method. Information about each method is specified by supplying additional parameters to the register method. Service code for using WSDL is shown in the following example.

Now for some magic. Point a Web browser at this service, which in my environment is at http://localhost /phphack/hellowsdl.php. The HTML that is returned to your browser gives you links to view the WSDL for the service or view information about each method, in this case the hello method. The screen should look something like this.

hellowsdl
View the WSDL for the service. Click on an operation name to view it's details.
hello

Displaying the details for the hello operation looks something like this.

1 sur 6

09/02/2012 09:57

Programming with NuSOAP Using WSDL

http://www.scottnichol.com/nusoapprogwsdl.htm

hellowsdl
Close

View the WSDL for the service. Click on an operation name to view it's details.
hello

Name: hello Binding: hellowsdlBinding Endpoint: http://localhost/phphack/hellowsdl.php SoapAction: urn:hellowsdl#hello Style: rpc Input: use: encoded namespace: urn:hellowsdl encodingStyle: http://schemas.xmlsoap.org /soap/encoding/ message: helloRequest parts: name: xsd:string Output: use: encoded namespace: urn:hellowsdl encodingStyle: http://schemas.xmlsoap.org /soap/encoding/ message: helloResponse parts: return: xsd:string Namespace: urn:hellowsdl Transport: http://schemas.xmlsoap.org/soap/http Documentation: Says hello to the caller

So, with just a little code added to the service, NuSOAP provides browsable documentation of the service. But, that is not all. By either clicking the WSDL link on the documentation page, or by pointing the browser at the service with a query string of ?wsdl (e.g. http://localhost/phphack/hellowsdl.php?wsdl), you get the following WSDL.

Return to top.

The New Client

2 sur 6

09/02/2012 09:57

Programming with NuSOAP Using WSDL

http://www.scottnichol.com/nusoapprogwsdl.htm

Adding a few NuSOAP WSDL calls to the service allows it to generate WSDL and other documentation. By comparison, client support for WSDL is anti-climactic, at least for this simple example. The simple client shown below is not much different than the non-WSDL client. The only difference is that the constructor for the soapclient class is provided the URL of the WSDL, rather than the service endpoint.

Here are the request and response for this WSDL implementation.

Return to top.

3 sur 6

09/02/2012 09:57

Programming with NuSOAP Using WSDL

http://www.scottnichol.com/nusoapprogwsdl.htm

Defining New Data Structures


An important aspect of WSDL is that it can encapsulate one or more XML Schema, allowing programmers to describe the data structures used by a service. To illustrate how NuSOAP supports this, I will add WSDL code to the SOAP struct example in Programming with NuSOAP Part 2. The service code gains the changes already shown in the Hello, World example, but it also has code to define the Person data structure.

Besides the additional code to support WSDL, the code for the service method itself is changed slightly. With WSDL, it is no longer necessary to use the soapval object to specify the name and data type for the return value. Similarly, the WSDL client does not need to use a soapval to specify the name and data type of the parameter, as shown in the following code.

4 sur 6

09/02/2012 09:57

Programming with NuSOAP Using WSDL

http://www.scottnichol.com/nusoapprogwsdl.htm

WSDL enables one more capability on the client. Instead of using the call method of the soapclient class, a proxy can be used. The proxy is a class that mirrors the service, in that it has the same methods with the same parameters as the service. Some programmers prefer to use proxies because the code reads as method calls on object instances, rather than invocations through the call method. A client that uses a proxy is shown below.

Regardless of whether the "regular" or proxy coding style is used, the request and response messages are the same.

5 sur 6

09/02/2012 09:57

Programming with NuSOAP Using WSDL

http://www.scottnichol.com/nusoapprogwsdl.htm

Return to top. You can download the source for these examples as well. Return to top.

Resources
Join the NuSOAP mailing list to learn more and ask questions. The home of the NuSOAP project. NuSOAP home of Dietrich Ayala, the author of NuSOAP. Return to top.
Copyright 2003-2004 Scott Nichol. 03-Nov-2004

6 sur 6

09/02/2012 09:57

Das könnte Ihnen auch gefallen