Welcome to my world

Fixing XML-RPC's in KDE4

After posting that Bilbo worked out of the box, I was bound to run into a world of trouble - and so I did...

You see, when I was trying out KBlogger, I ran into the "Invalid request payload xmlrpc element STRING cannot be child of DATA" error you find in some KBlogger related posts. After playing around a little I realised that the error prevented me from posting anything and I ditched KBlogger as being buggy as hell (which it actually still is).

But when I installed Bilbo, I ran into the same problem! Only this time I knew that it should work as I posted before using Bilbo. After investigating a bit I found the culprit: KBlog. This backend library handles the communication with the server over the XML-RPC protocol. The error is produced on the server side and to be exact it is PHP XML-RPC that generates the error.

Because the XML-RPC library on the server is very strict (and probably error free), I turned to see what Bilbo actually sent to the server. The problem appears to be in the category structure that is generated. In my first posting, I did not select a category to post to. But when you select one or more categories, a QStringList object is populated with the category names. This is converted into XML somewhere in KDE (I haven't figured out where yet).

After talking to the Bilbo devs for a bit they pointed me to the Wordpress API in KBlog. For some reason, that one generates a string holding the XML for the server. And in that class, the metaWeblog.newPost function is called using a properly constructed category array.

Alas, switching to the Wordpress API did not help: "STRUCT cannot be child of PARAM" and whether I used categories or not, the error remained. A quick inspection showed where that error comes from: the 'struct' element should not be directly put inside a 'param' element. The XML-RPC specifications state that the 'struct' should be placed in a 'value' element first. After fixing this and recompiling Bilbo, everything is working now!

Well, not everything as the metaWeblog API is still broken. I have filed a bug report with KDE upstream so they can add my fixes to the Wordpress API and hopefully someone with more KDE programming experience can fix the metaWeblog API. Or rather, fix the conversion from a QStringList to proper XML-RPC compatible XML.

On a side note: while debugging the XML-RPC protocol I discovered that the Joomler XML-RPC plugin for Joomla! did not apply the categories that are sent along. I've modified my (already heavely patched) version of Joomler and once I've tested it a bit more, I'll send the patches to the Joomler devs. Hooray for open source I guess ^^.