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
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