Heute habe ich eine kleine Korrektur in Nicholas Christophers XmlRpcCS-Paket vorgenommen. Der XmlRpcServer war bislang nicht in der Lage, Methoden-Fehler an den Client durchzureichen. Gut, man kann sich damit behelfen NULL zurückzuliefern, wenn ein Fehler auftritt, oder eine Exception auslösen, aber das ist clientseitig natürlich wenig aussagekräftig. Das war mir zu dünn.
Aus Sicht des Servers erschien mir am vernünftigsten, im Fehlerfall eine XmlRpcException zu werfen. Diese verfügt ja schon über die Informationen faultCode und faultString, wie sie in der XmlRpc-Spec definiert sind. Beim Ausprobieren fiel mir jedoch auf, dass das Framework die XmlRpcException an irgendeiner Stelle in eine eigene XmlRpcException kapselt, so dass beim Client nur ein 'Application Error - target method threw an exception' herauskam. Wo war mein Fehlercode? Wo mein Fehlerstring?
Nach ein wenig Sucherei im Code gelang es mir, das Verhalten so umzustellen, dass eine Unterscheidung zwischen XmlRpcException und anderen Exceptions getroffen wird. Aus Methoden geworfenen XmlRpcExceptions werden nun einfach durchgereicht (und der Client über den aufgetretenen Fehler informiert), während alle anderen Exceptions gekapselt (und nähere damit Informationen versteckt) bleiben.
Ich hoffe, Nicholas nimmt meine Modifikation in das nächste Release mit auf.