Hi Tom,
Thomas Fuller wrote:
> Hi,
>
> I use XStream to unmarshall XML into an instance of a data model. Each
> class in the data model extends from DefaultObject and the DefaultObject
> has a setPropertyChangeSupport method.
>
> I'd like to configure XStream to set an instance of PropertyChangeSupport
> on every class in the data model that it creates.
>
> Would you have any suggestions regarding how to approach this?
>
> I have looked at implementing a converter however as I'm not converting
> anything I do wonder if this makes sense and thought I'd ask for a second
> opinion on the matter.
I would use an own MarshallingStrategy, just derive from the one, you're
using by default:
==================== %< ==============
class PropertyChangesSupportStrategy
extends ReferenceByXPathMarshallingStrategy { // what ever you use
public PropertyChangesSupportStrategy() {
super(RELATIVE);
}
@Override
protected TreeUnmarshaller createUnmarshallingContext(Object root,
HierarchicalStreamReader reader, ConverterLookup converterLookup, Mapper
mapper) {
return new ReferenceByXPathUnmarshaller(root, reader, converterLookup,
mapper) {
@Override
protected Object convert(Object parent, Class type, Converter
converter) {
Object result = super.convert(parent, type, converter);
if (result instanceof DefaultObject) {
DefaultObject do = DefaultObject.class.cast(result);
do.setPropertyChangeSupport(...);
}
return result;
}
}
}
}
==================== %< ==============
Have a look at MultipleObjectsInOneStreamTest in XStream's acceptance tests,
it uses also a custom MarshallingStrategy for different purpose:
https://fisheye.codehaus.org/browse/xstream/trunk/xstream/src/test/com/thoughtworks/acceptance/MultipleObjectsInOneStreamTest.java
Cheers,
Jörg
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email