Cocoa Release: SOAP Client 0.1

SOAP Client Icon

Announcing SOAP Client, my free Cocoa-based developer tool for Mac OS X Tiger that allows you access and debug SOAP-based Web Services from the comfort of your desktop with a beautiful, interactive Aqua interface.

SOAP Client is a universal binary.

All of my Cocoa developer tools can be found at Scandalous Software.

SOAP Client is very similar in nature to another app of mine, XML-RPC Client. Obviously, SOAP Client accesses SOAP based services rather than XML-RPC services. Also, SOAP Client offers a few SOAP-specific features not found in XML-RPC Client.

Universal Binary Logo

So what do you do with SOAP Client? Well, you specify your service’s URI, method name, method namespace, optional SOAPAction header, and finally the method parameters. Then you execute your SOAP request and watch as SOAP Client makes the request and shows you the encoded SOAP/HTTP request and response. SOAP Client also shows you a high-level psuedo-code representation of the response data.

SOAP Client’s SOAP encoding features are provided by Apple’s C-based WebServices Core framework.

SOAP Client screenshot

The coolest thing about SOAP Client (and XML-RPC Client) is that you can use JavaScript syntax to specify arbitrarily complex method parameters.For example, if you had a method that accepted a single string parameter with the name of zipcode, you would type the following in the params text area:

{ zipcode: "78215" }

One string and one boolean arg would look like this:

{ zipcode: "78215", daylightsavings: true }

Click “Execute” and view the raw HTTP request and response as well as a high-level pseudo-code object response representation.

In the params text area, JavaScript native datatypes will be converted to SOAP-ENC or XSD data types automatically. The zipcode param above will be converted to an xsd:string automatically.

If you want to specify an integer, use a JavaScript Number:

{ zipcode:78215 }

This will be converted to an xsd:int.

If you want to specify an double, use a JavaScript Number with a floating point part:

{ children: 2.3 }

This will be converted to an xsd:double.

If you want to specify a SOAP-ENC:Array, use nested JavaScript Arrays:

{ mynums: [ 1, 3 ] }

This results in the following encoding:


<mynums SOAP-ENC:arrayType="xsd:anyType[2]" xsi:type="SOAP-ENC:Array">
    <item_0 xsi:type="xsd:int">
        1
    </item_0>
    <item_1 xsi:type="xsd:int">
        3
    </item_1>
</mynums>
		

If you want to specify a SOAP-ENC:Dictionary, use nested JavaScript Objects:

{ person: { name: "Tod", age: 28 } }

This results in the following encoding:


<person xsi:type="SOAP-ENC:Dictionary">
    <name xsi:type="xsd:string">
        Tod
    </name>
    <age xsi:type="xsd:int">
        28
    </age>
</person>
		

Missing Features

  • SOAP Client supports SOAP Section 5 encoding only.
  • SOAP Client supports SOAP 1.2 only. I’m not sure of all of the differences between 1.1 and 1.2, but as far as I can tell, SOAP Client uses 1.2 encoding, and I have not enabled the ability to use 1.1. I can do that if there is demand.
  • SOAP Client only supports a subset of the datatypes included in the following two namespaces: http://www.w3.org/2001/XMLSchema and http://schemas.xmlsoap.org/soap/encoding/ (commonly prefixed as xsd and SOAP-ENC).
  • Client 0.1 does not yet support WSDL in any way. WSDL support is planned. This means that you may not yet use custom datatypes beyond the datatypes in xsd and SOAP-ENC.

The lack of support for WSDL and custom Schema-defined types is a serious missing feature in SOAP Client. I plan on spending a lot of time on these two features to make this happen before 1.0.


About this entry