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).
- 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.
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?
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
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
The library is published under LGPL.
Latest Version 2.6.3
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>
- 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
- mavenized project
- added support to plugin a default Converter
- XmlRpc clients can now be classes (even abstract classes). They don't have to be instances anymore. Needs javassist
- created a Converter using XStream http://www.dfki.uni-kl.de/artifactory2/libs-releases/dfki/km/delight/xstream-converter/1.0.0/xstream-converter-1.0.0.jar
- minor fixes (method typos), no new features
- added URL c'tor to XmlRpcConnection
- added FileConverter
- 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
- 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
A subversion repository is setup at https://delight.opendfki.de/repos/. Use the repository to checkout the latest version of XML-RPC Delight.
- 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