PADL Software Pty Ltd

PADL Software Pty Ltd

 

About PADL

Articles

Commercial Software

Contacting PADL

Documentation

Open Source Software

Partners

Purchasing

Research and Development

Technical Support


 

XMLRPCObjC

The Objective-C language is an object-oriented language derived from C with late binding and a rich runtime. XML-RPC is a distributed object protocol similar to SOAP. PADL have developed a bridge between these two technologies, allowing Objective-C applications to transparently access XML-RPC servers, and such servers to be written in Objective-C itself.

The bridge is divided into two parts: XMLRPCObjC, which handles method translation and other runtime-agnostic tasks; and XMLRPCGlue, which is presently a thin layer between XMLRPCObjC and the xmlrpc-c library. The latter could be replaced with a library that used the XML parser and HTTP client in Foundation.

Requirements

  • A Mac OS X system. We depend on private Foundation API; other implementations of Foundation may not work
  • The xmlrpc-c library. This is available from http://xmlrpc-c.sourceforge.net/. We submitted some patches which should have been integrated into the current release.
  • The w3c-libwww library. This is available from http://www.w3c.org/Library/.

Key Benefits

  • Invoke XML-RPC methods as if they belonged to local Objective-C objects.
  • Translate between C and Objective-C primitive types and XML-RPC types.
  • Translate Objective-C objects into XML-RPC structures (dictionaries)
  • Register Objective-C objects to be vended by an XML-RPC server
  • Hook together an XML-RPC proxy server
  • Support for the xmlrpc-c type introspection registry, so that you do not need to register type information before invoking a method

API

We have tried to model the API as closely as possible on the existing Distributed Objects API.

Here is a simple client that adds two numbers:

   XMLRPCClient *client;
   id adder;
   long result;

   client = [XMLRPCClient client:[NSHost currentHost]
      port:8000];
   adder = [client proxyForTarget:@"sample"];
   result = [adder add:23 :42];
   NSLog(@"%ld", result);

This will invoke the XMLRPC method "sample.add" on the URL http://localhost:8000/RPC2. (You need to declare the add:: method somewhere so the compile will find it, but it's not necessary to register this with the XMLRPCObjC runtime if your XMLRPC server supports type introspection.)

To avoid a round trip, you might want to do:

   @protocol sample_protocol
   - (long)add:(long)x :(long)y;
   @end

   [adder setProtocolForProxy:@protocol(sample_protocol)];

Note that you could also declare the protocol to take Objective-C objects, for example:

   @protocol sample_protocol
   - (NSNumber *)add:(NSNumber *)x :(NSNumber *)y;
   @end

Availability

The software is distributed under the terms of the GNU Lesser General Public License. Please familiarize yourself with the license before downloading the software. Alternative licenses are available through our relicensing program.

The current version is available by FTP, or HTTP.

Meerkat

We put together a simple Mac OS X client for O'Reilly's Meerkat wire service in about five hours, with little prior Cocoa programming experience. Articles may be opened in the default web browser. See the screenshot below:

Meerkat OS X Client Screenshot


Home | Bugzilla

Copyright 1999-2014 PADL Software Pty Ltd ABN 16 085 895 585. All rights reserved.
PADL is a registered trademark of PADL Software Pty Ltd.