Hi folks, There have been plans in place to change the JSON network "protocol" for OpenSRF for almost a year now. With the recent creation of the 0.9 branch of OpenSRF, the proposed changes have solidifed into a development branch with the new JSON code. What originated as a new way of parsing/serializing class information for objects quickly turned into a re-write of the JSON library. The source code lives in the new-json2 OpenSRF branch at http://svn.open-ils.org/trac/OpenSRF/browser/branches/new-json2. The C files are in src/libopensrf/osrf_json*
What's been accomplished by this change? 1. The new JSON protocol is fully JSON compliant and requires only a small post-processing phase for parsing. The previous protocol required variant parsers, which limited the ability to easily create OpenSRF libs in other languages. We currently have Python and Java libraries in the repository, but we've made little fuss over them since they only work with the new JSON protocol. Now that the new protocol will be soon merged into trunk, hopefully people can make use of those libraries. 2. A new C JSON parser which supports the same API as objson, the legacy JSON library, with (I think) cleaner, easier to read code. 3. The option to compile a compatibility layer which mimics libobjson.so and associated headers so that existing code that links to libopensrf/libobjson will not be required to change. 4. The C parser can be built as a standalone library (libosrf_json.so), statically linked into libopensrf.so, or built with the compatibility layer (libobjson.so) based on a config option. 5. The new C parser can act as a SAX-style push parser with event callbacks. We're not currently making use of this in the code, but I'd think it was really cool if someone had a need for such a thing. :) 6. The JSON HTTP gateway supports new-style and legacy JSON input and output for backwards compatibility. As we push for the OpenSRF 1.0 release, we will be merging this new JSON code into the OpenSRF trunk. If all goes well, no one will ever know this happened. ;) It is a pretty large change to the OpenSRF core, though, so I wanted to make sure everyone was aware it was coming and open the dialog for any thoughts or concerns. Thanks as always! -bill
