I need a Java API (Re: XML-RPC interface)

Linas Vepstas linas@linas.org
Sun, 14 Oct 2001 15:23:50 -0500


--cNdxnHkX5QqsyA0e
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Sun, Oct 14, 2001 at 12:29:15PM -0700, Jack Greenbaum was heard to remark:
> The perl script at the bottom of the quoted email below shows driving the gnucash
> engine from Perl.. I need Java. The current SWIG development version supports
> Java.  So here's the point: I am volunteering to help develop a SWIG-derived Java
> interface to gnucash, and examples. 

Excellent!

> Is there anyone working on this today? 

I don't beleive so.

> If not then I could use a little support
> to get me going on this. From reading gnucash-devel for a couple of months it
> seems that to build on the SWIG work already done for perl etc 

I beleive the 'hard part' will be making swig work.

In particular, you'll need to do things like write the swig wrapper to 
convert glib linked lists into whatever it is that Java uses for 
sequences/lists.

> I need to be
> building from CVS. 

Only because the swig code isn't in the gnucash-1.6.4-source-tar,gz file.
I will attach the swig code to this email.

Otherwise I recomment working from the 1.6.4. source tar file, rather
than from the current CVS.   This is because the CVS code is changing
daily, and is quite unstable, and could lead to considerable unhappines
on your part.

Hmmmmm, on the other hand, the current CVS code did cleanup up &
rationalize the concept of a 'session', and so eventuallty, you'll
want to join forces there ... but other than that, little in the engine
has changed, so 98% of you work will be protable.

> My question is are all of the dependencies for gnucash in CVS?

No; none of them are.  A 'dependency' is soemthing that by definition
is not a part of gnucash, and thus, wouldn't be in the gnuash cvs.

> I'm concerned about g-wrap, for example. 

For your task, you'll need only to build the 'engine' part of the code,
and for that you won't need g-wrap.  (Although that is changing in the
1.7/CVS version).

But g-wrap is easy to build & install ...

> Is there a "Building GNC from CVS"
> How-To so I don't have to figure it all out? 

The README should cover it ...

> Thanks in advance for the help.

In order to make sure that your efforts are not 'wasted', I strongly
suggest sending in patches as you get each piece of the java bindings
working.  You don't have to get everything working perfectly before
sending in a patch.



-- 
pub  1024D/01045933 2001-02-01 Linas Vepstas (Labas!) <linas@linas.org>
PGP Key fingerprint = 8305 2521 6000 0B5E 8984  3F54 64A9 9A82 0104 5933

--cNdxnHkX5QqsyA0e
Content-Type: application/octet-stream
Content-Description: gnucash-swig-files.tar.gz
Content-Disposition: attachment; filename=s
Content-Transfer-Encoding: base64

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
UzzF8308/w8rlocBALgBAA==

--cNdxnHkX5QqsyA0e--