Hi Ashish, Ashish<deXter> chougule wrote:
> My problem is that there are domain objects used across multiple projects > . > > There are few projects which require to convert these domain objects to > XMLs. Each project needs to have its own format. > > I am a beginner with xstream and after going through the tutorials I think > we can't do this using annotations.(please correct me if I am wrong) > > So I looked at the api provided by Xstream class (.alias(....)). > I could manage to get different XML outputs from same object. > But soon I landed on another problem which was what if someone in my team > innocently changed the field name (the alias methods take a string ) that > will break my XML generation. Can I put some kind of constrain so that > the compiler could tell me if some thing is changed.(I know this is out of > the scope of xstream but.. Would be great if someone could help me > out..also I know setter getters would Change but again that will not > guaranty that the string in the alias method would change ) > > So please help me with this problem.. > How can I cleanly get this "multiple XML outputs from same class " Well, you're asking different questions. Answering about the different XML output first: As usual, the solution depends on your case: 1/ If you want to produce different XML from the same object graph, you should use different XStream instances that are configured differently. 2/ If you want to produce different XML for object of the same type in one object graph, you can work with different local converters for the individual instances. The other question is, how can you ensure that the generated XML format of persisted objects is stable over several revisions of your code? XStream is very convenient in persisting arbitrary objects in XML, but large parts of it are based on reflection and the internals of your implementation will be reflected therefore in the generated XML. This is brittle concerning multiple software releases - as you already found out! XStream is in this regard no way better than Java serialization. If you want to keep the XML over revisions, you should definitely use custom converters for the persisted objects that do not use reflection - at least for those types that contain user data, their structure might change over time with changing requirements. A custom converter can be often easily adjusted to read old and XML format styles of an object at once. Personally I always add a constant revision number to the root object that is read at unmarshalling time and stored in the context so that any custom converter might access it to react accordingly. Since a custom converter uses typically no reflection to access the handled object, you will get normally compilation errors if someone changes that class in an incompatible way. However, you should really use proper unit tests that are executed as part of the build process. Create small XML snippets that contain the different aspects of your object graph and let it parse by the XStream instance. Use the generated object to create XML again and compare the resulting XML. You will normally be warned then if something significantly has changed. - Jörg --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email