> I have the CLDC code, but didn't find the interface.  Is it hidden in
> CVS or elsewhere?  Also I modified the XmlRpcClientLite, my
> recollection is that there are plans for this that will modify it
> significantly.

Ryan and I are sharing code via private email at the moment.

> This is the gist of the modifications.  I removed the superclass
> (XmlRpcClient) and copied a couple of methods across and removed the
> superclass of LiteWorker (Worker) and copied some methods.  I think
> that I also trashed the Async code. There are minor changes to
> XmlRpc.java (removing "properties"), other than that, you need
> Base64.java, ServerInputStream.java and XmlRpcException.java which
> compile unchanged.  I think that there also some supporting classes
> that we had already created (StringTokenizer?), maybe others.
> References to URL and associated exceptions have been removed, if we
> need these to match a new interface (likely) we will need to create
> substitutes.
>
> If anyone else has an immediate interest in this code, let me know.
> I'll be testing over this week, the goal is to get it on the
> iPaq/Jeode.

I wouldn't mind seeing a copy (either a unidiff against HEAD or a
..jar of .java files). I can tell you fairly quickly how easy it would
be to integrate this.

I've not done any CLDC programming myself. What are the constraints we
are looking at? How important is code size, and the number of classes?
are there particular classes that we are using that aren't available
under CLDC?

>>> I only vaguely remember the discussion of adding an interface for
>>> the client.  Can someone provide a quick synopsis and the status?

Well, the idea is to split the XML-RPC and HTTP processing. The
XML-RPC processing on the client side will be done in a similar
manner to the server side code in HEAD. There are three new classes:
XmlRpcClientRequestProcessor, XmlRpcClientResponseProcessor and
XmlRpcClientWorker. These contain the request/response/worker
code that was common to XmlRpcClient and XmlRpcClientLite. Look how
this is done on the server for an idea.

The HTTP processing is handled by having XmlRpcClient make a call
to an XmlRpcTransport instance:

  public InputStream sendXmlRpc(byte [] request)
  throws IOException, XmlRpcClientException;

Creation of these instances is via a factory method in XmlRpcClient:

  protected XmlRpcTransport createTransport()

The default is to create a new transport (== new connection) for
each XML-RPC. It is possible to set things up to do XML-RPC on
a persistent connection.

>>> It just became relevent to me because I have a need for a CLDC
>>> client.  kxmlrpc assumes MIDP (HttpConnection).  Since MinML is
>>> (just about) CLDC compliant, if I can easily convert the
>>> XmlRpcClient to CLDC I may have a good solution. If I'm going to do
>>> this, I might as well make it compliant with the forthcoming
>>> interface.

The solution may be to create an org.apache.xmlrpc.cldc.CLDCXmlRpcClient
class that depends on the MinML package, and a subset of the core
org.apache.xmlrpc package:

XmlRpc
XmlRpcException
XmlRpcClientRequestProcessor  (see above)
XmlRpcClientResponseProcessor (see above)
HttpClient (I've factored this out of XmlRpcClientLite).
Base64
ServerInputStream

This would have no main(), no asynchronous handling, no workers or
worker stack, etc. But, it would be _very_ small.

Andrew.


Reply via email to