On 8/18/05, Dennis Sosnoski <[EMAIL PROTECTED]> wrote: > I've been having some off-list email exchanges on the issues of better > tools for going between Java and XML. This is relevant to both > start-from-Java approaches to web services, and handling schema > versioning. Since these issues are important for Axis2 I'll get this > thread going here, assuming nobody objects to us using the Axis2 list > for this purpose. I'm copying the jibx-devs list on my own emails on > this topic just so that people monitoring that list are also aware of > the discussion. > > While we have a number of tools for generating Java object models to > (more or less) match a schema, most of these tools either cannot work > with pre-existing Java classes or can only work with existing classes > using their own built-in correspondences. This limitation makes it very > difficult for users to take a start-from-Java approach to developing web > services, since the users then have little or no control over the > schemas used by the web service (as seen with the JAX-RPC 1.0-style > doc/lit mapping). It also makes it very difficult for users to work with > evolving schemas, since their data model will need to be regenerated > every time the schema changes. Because of this, users often end up > writing a translation layer into their applications to take the data > from the schema-centric model and convert it into structures actually > used by their main application code. > > There are some libraries which provide more flexible conversions between > Java and XML, including Betwixt as well as my own JiBX framework. JAXB > 2.0 is also taking steps in this direction. The subject of the email > exchanges has been the desirability of better GUI tools for working with > frameworks which support such flexible conversions. > > Betwixt seems to offer very good support for starting from basics and > refining the mapping as you go. It basically offers defaults for > everything, then lets you override the defaults. JiBX takes almost the > opposite approach, requiring the user to specify everything (though > there is a tool which will generate a default binding automatically, > with a variety of overrides). I can certainly see the benefits to > providing a tool that allows an interactive approach to building a JiBX > binding, basically starting with Betwixt-like defaults and allowing > overrides at every step of the way down to a detailed JiBX binding. The > way I envision it this should show sample XML output (or the current > schema, for those developers able to understand schemas) at every step > of the way - when you change the binding, you immediately get the change > reflected in the schema/sample XML. Ideally you should even be able to > go the other way - modify the schema, and have the binding automatically > reflect the change (or replace the schema with a new version, and have > the binding adjust as best it can and then flag the mismatches). I've > been adding hooks to JiBX for some time with the intent of moving it in > this direction. > > Much of the off-list discussion has revolved around the possibility of > building a generic tool of this type, one able to work with different > frameworks. On thinking it over, it seems to me that at least the > general framework of the tool should be reusable - say the IDE > integration and XML/schema display and manipulation. That would leave > the need to write plugins for each binding framework to handle XML > instance and schema generation from a binding and set of classes, and to > handle editing the actual binding definition (in whatever form that > takes - an XML file for Betwixt and JiBX, annotations for JAXB, etc.).
+1 a tool makes sense and would be useful relatively quickly (even when not fully featured). probably going to need to think about managing IDE integration. this is something that i know nothing about. do we start with one target and then try to add support? > What do people think of this? Anyone want to jump right in and start > putting this together? ;-) on the basis that it's easier to argue about bad code than no code, i'll put together a very basic protoype using betwixt (which will do most of the stuff required already) just using basic swing. i'm very interested in dan's ideas and have a list of additional features that IMO are needed to make it useful but a least it'd be a start. - robert
