This is an implementation of the XML-RPC specification, for Java(TM). Credit should go to Hannes Wallnoefer who maintains another XML-RPC library for Java(TM) from which several ideas have been borrowed when implementing this software.

Download the current version (1.3 from August 5, 2002) which contains a compiled version of the library, the source code, and the documentation. The documentation contained in the download is also available separately for downloading or on-line browsing with a PDF viewer.

Those of you who still need to support Java 1.x may download the previous version (1.2.1). Unless we see a demand for keeping Java 1.x support, we will not branch from 1.2.1. From now on (v1.3), the Marquée XML-RPC Library requires J2SE.

1.3 Change log

  • Switched to Java 2 Collections throughout the whole library. This means that the library uses the Java 2 collection classes and that the API uses the corresponding collection interfaces. If this is unacceptable for pure 1.1 users we'll consider making a branch from 1.2.1 with the Java 1.1 collections.
  • The reflective invocation handler has been updated with a new algorithm for matching target handler methods. Up until now, the arguments used in calling handler methods had to exactly match the formal parameters of the methods (as a limitation in the Java Reflection API). Now, the arguments need only be assignment compatible with the parameters which helps a lot!
  • The LogBackEnd interface has received a new method accepting a Throwable. Thanks to Will Sargent
  • The serializer now registers a MapSerializer, a CollectionSerializer, and an ObjectArraySerializer by default. This means that applications and handlers may send and return collections, maps, and object arrays (incl. String[], et.c.) without having to register these custom serializers themselves. Now that the library requires Java 2 we felt that this was a good idea.
  • Added support for asynchronous invocations. The XmlRpcClient has a new invokeAsynchronously() method accepting an XmlRpcCallback object that will receive results, faults, or exceptions. Currently, the method spawns a new thread for every invocation. In an upcoming release we will give the threading code an overhaul allowing application defined thread factories to be plugged in at both the server and the client, making the server more job based so that applications and the library may share the same thread pool.
  • Removed final modifier on flags in the Trace class. From now on, various levels of logging may be set at runtime. Just set the corresponding flag (for instance Trace.Messages = false) at any time. By default, errors, warnings and messages are logged. The final modifier was previously used so that all logging code could be completely removed from the resulting byte code in situations where memory is extremely low (like with the TINI platform).

1.2.1 Change log

Various bugfixes. Please report any errors you encounter in the tracking system at Source Forge so that we may make the library more stable. Thanks!

  • Compilation error in XmlRpcClient removed. Thanks everyone for pointing that out.
  • XmlRpcServer is now sending HTTP 400 when running out of connections.
  • Handler names may now contain punctuation marks. Thanks to Jamie Warner for pointing that out for the Helma Library.
  • XmlRpcProxy is now properly extracting handler names from interfaces where a handler name is omitted. Previously, only non-nested interfaces in anonymous packages was (unvoluntarily) supported.
  • A bug in XmlRpcConnection was removed, increasing connectioCount twice for every connection created. Thanks to Alan Littleford for helping us find it.
  • The invoke() methods in XmlRpcClient are now synchronized. Thanks Micah Spears.

1.2 Change log

  • XmlRpcClients now connect to servers using XmlRpcClientConnectionFactories. The factory creates XmlRpcClientConnections that supply the logic required by the XmlRpcClient. Two implementations of the factory interface are supplied; SocketConnectionFactory and URLConnectionFactory. The SocketConnectionFactory handles the HTTP essentials itself and may be somewhat more resource friendly, whereas the URLConnectionFactory utilizes the URLConnection class in the java.net package and may be better in applet scenarios. This is all thanks to Toby Allsopp and Peace Software International Ltd.
  • Ant build script supplied, also thanks to Toby Allsopp and Peace Software.
  • Support for GZIP content encoding, thanks to Micah Spears.
  • A new invocation processor example is supplied. The SessionInvocationProcessor makes it easy for handlers to store client state between invocations.
  • The documentation has received a new paragraph on invocation processors. As a matter of fact, the only copy of the document I had got corrupted so the whole document is rewritten from the PDF file. Sigh, guess I never learn. It will be checked into CVS from now on.
  • The default XML parser has been changed from JAXP to MinML from The Wilson Partnership. Thanks a lot!

1.1 Change log

The library has been updated in several areas and there has also been an interface change in XmlRpcInvocationProcessor. The following list describes the major changes.

  • An optional extension to the library by Rainer Bischof has been included which make the library work similar to RMI in that complete object graphs may be serialized and transferred over the wire. See last chapter in the documentation.
  • New documentation in PDF format, and updated JavaDoc comments and switched to GNU Lesser General Public License.
  • New examples; a filtering invocation processor, a servlet, and a client using dynamic proxies.
  • Overall improved exception handling. XmlRpcException now has a method, isRemote(), that indicates the origin of the exception.
  • The built-in serializer now also serializes characters, bytes, longs and shorts.
  • The interfaces used with the XmlRpcProxy are required to handle XmlRpcExceptions.
  • The preProcess() method in XmlRpcInvocationProcessors may now abort the invocation through the new boolean return value. postProcess() amy also alter the return value before sending it back to the caller. All methods now also receive the IP address of the caller.
  • Reflective invocation handlers may be assigned a list of names of methods that should be published. Good for restricting which methods are exposed in legacy code. Thanks to N. Christopher.
  • XML messages are encoded using ISO-8859-1. In the next release, you will be able to alter this.
  • Plus lots of small internal improvements and corrections. Note that the server by default only traces errors and warnings.

Enjoy!

This project is kindly hosted by Source Forge, and you may subscribe to the mailing lists as a user or a developer.

Copyright © 2001, 2002 Marquée AB. All rights reserved. $Revision: 1.11 $