wiki:WikiStart

XML-RPC Delight

Using XML-RPC the easy way ...

The logo has been designed by Dominik Heim


XML-RPC Delight is meant for: All users that want to have their java components connected using a web-based protocol but don't want to waste time with defining the interfaces a second time in another language-independend description format and then generate stubs and skeletons and so on.

XML-RPC Delight is an addon to the XML-RPC specification (http://www.xmlrpc.com/spec) and builds on apache's implementation (http://ws.apache.org/xmlrpc/), version 1.1 (Download here, patched to handle UTF-8, long strings containing control characters and XML markup correctly; transfer full exception stacktrace).


Design Objectives

  • have java components interact over internet wire with a minimum of programming and configuration effort

  • preserve XML-RPC compliance

  • make EVERY type XML-RPC transportable with minimal coding effort (ideally, not a single line of extra code!)

  • do not interfere with design of remote interfaces. Within the remote calls, one should be able to use any type or interface he wants.
  • neither the client nor the server has to be forced to load configuration files or register factories programatically in order to use non XML-RPC compliant types in remote calls.

Overview

XML-RPC Delight creates remote clients to java APIs that are supposed to be used remotely. XML-RPC Delight does this at runtime, not at compile time!
In case the API uses types which are not XML-RPC compliant, java annotations and user-defined conversion methods allow for automatic transformation of types to and from a XML-RPC compliant representation. Optimally, one can use non-compliant java classes in XML-RPC calls without having to code a single line of code!!

While all the automatic conversion is done, communication with the server is still XML-RPC compliant so that remote methods can still be called by non-java languages.


How does it Work?

Examples

Getting started -- Using XML-RPC compliant types in your API

Using own concrete types in your API

Using interface or abstract types in your API

Using third party types in your API -- When you cannot annotate or modify classes you want to use remotely ...

For lazy programmers: using XmlRpcBeans -- Own types without conversion coding ...

Using the Parameter Converter Registry -- Enabling converters even without @ConverterMappings annotation ...

Ideas for Version 3

  • Current drawbacks:
    • based on plain-old xml-rpc 1.1
    • only XML-RPC supported (JSON is also nice)
    • configuration settings are static
    • no handler life-cycle supported

Author

This library was developed by Andreas Lauer. It is used in several projects of the DFKI's Knowledge Management Lab including Mymory, Nepomuk, Perspecting,Epiphany and DynaQ.
Other projects include Medical CPS http://www.dfki.de/MedicalCPS/MCPS.jpg

License

The library is published under LGPL.

Download

Latest Version 2.6.3

http://www.dfki.uni-kl.de/artifactory/libs-releases-local/dfki/km/delight/xmlrpc-delight/2.6.3/xmlrpc-delight-2.6.3-dist-all.zip

Artifact coordinate (using repository http://www.dfki.uni-kl.de/artifactory/libs-releases)

<dependency>
  <groupId>dfki.km.delight</groupId>
  <artifactId>xmlrpc-delight</artifactId>
  <version>2.6.3</version>
</dependency>

Changes

  • added enum support
  • fixed: Bugs in xml-rpc:1.1
    • strings containing only spaces were discarded in method call
    • strings containing control characters caused exceptions
    • strings containing xml markup like (<[CDATA[ ]]>) caused trouble

Version 2.5.1

Changes


Latest Version: 2.2.1 http://delight.opendfki.de/repos/trunk/XmlRpcDelight/dist/XmlRpcDelight-2.2.1_04.03.2009.zip

Changes

  • minor fixes (method typos), no new features
  • added URL c'tor to XmlRpcConnection
  • added FileConverter

Version 2.2:

Changes

  • added new feature: unknown, xml-rpc unaware types without annotations are treated as XmlRpcBeans enable with: XmlRpc.treatUnkownTypesAsBeans( true )
  • added support for types Float and float
  • support for sets added
  • new automatic null-value masking feature: XmlRpc.useAutomaticNullMasking( true ) enables the feature

values for all standard XML-RPC types (except BASE64), arrays and Convertable parameters can now be null-values. XmlRpcBeans can have null-valued properties. ParameterConverters can handle null-values separately, but also can rely on the new masking feature.

  • Note: this version is java 1.5 compliant

Version 2.0:

Changes

  • Contains annotation not needed anymore
  • Array support added (also supported: primitive type arrays)
  • Nested parameters and return types for collections, maps and arrays possible
  • 'null'-parameters can be used together with ParameterConverters
  • Better logging support

v 1.0: https://delight.opendfki.de/repos/trunk/XmlRpcDelight/dist/XmlRpcDelight-1.0_17.11.2006.zip

SVN Repository

A subversion repository is setup at https://delight.opendfki.de/repos/. Use the repository to checkout the latest version of XML-RPC Delight.

Documentation

http://delight.opendfki.de/repos/trunk/XmlRpcDelight/apidoc/index.html

Also see some slides on XML-RPC Delight (for version 1.0) available in ppt or pdf format.

Feature Requests

  • add an example how to run delight through a servlet
  • automatically find the most specific converter for a type when there is a set of converters for a type hierarchy
  • switch to newer version of apache XML-RPC (because of better XML and authentication handling)
    • make backend exchangable
    • delight should be independent of any XmlRpc implementation
  • use slf4j for logging/debugging
Last modified 16 months ago Last modified on 06/20/13 15:52:00

Attachments (1)

Download all attachments as: .zip