Greetings! I am using Digester to consume an XML stream that I intend to be a hierarchy of Commons DynaBeans. For the sake of flexibility, I am using the XML Rules mechanism in conjunction with object factories. I can create the whole hierarchy of beans without a problem. I can even register the child beans with their parent. I, however, had to make each parent bean extend BasicDynaBean in order to add special "set" methods (i.e. setChild1(Child1 child)) to allow the set-next-rule to properly function. Each of these special methods simple calls the DynaBean.set() method with the appropriate property.
I'd love to eliminate these special parent DynaBeans and just use BaseDynaBean. Is there anyway to use set-next-rule / SetNextRule with DynaBeans directly (i.e. pass more than one argument, namely the property name as well)? If not, is there another way with the common rules that I can eliminate these custom DynaBeans? Or must I write my own rule extension to SetNextRule? At this point, my thought is that I must extend the SetNextRule to achieve my desired functionality. Does this mean that I need to extend another class to handle the set-next-rule XML rule? I have included abbreviate versions of the core files in question. Please let me know if more code / information is needed... Thanks. This component is fantastic. It has REALLY made my life easier! Jon Brule ----- Supporting files (stripped down for brevity): weather.xml: <digester-rules> <pattern value="weather"> <factory-create-rule classname="jrb.service.schedule.sensor.weather.WeatherBeanFactory"/> <bean-property-setter-rule pattern="cc/lsup" propertyname="lastUpdate"/> <bean-property-setter-rule pattern="cc/tmp" propertyname="temperature"/> <pattern value="head"> <factory-create-rule classname="jrb.service.schedule.sensor.weather.UnitsBeanFactory"/> <bean-property-setter-rule pattern="ud" propertyname="distance"/> <set-next-rule methodname="setUnits"/> </pattern> <digester-rules> WeatherBean: public class WeatherBean extends BasicDynaBean { public WeatherBean(DynaClass dynaClass) { super(dynaClass); } public void setUnits(DynaBean units) { this.set(WeatherBeanFactory.PROP_UNITS, units); } } WeatherBeanfactory: public class WeatherBeanFactory extends AbstractObjectCreationFactory { static final String BEAN_WEATHER = "Weather"; static final String PROP_LAST_UPDATE = "lastUpdate"; static final String PROP_TEMPERATURE = "temperature"; static final String PROP_UNITS = "units"; public Object createObject(Attributes attributes) throws Exception { DynaClass beanClass = new BasicDynaClass( BEAN_WEATHER, WeatherBean.class, new DynaProperty[] { new DynaProperty(PROP_LAST_UPDATE, Date.class), new DynaProperty(PROP_TEMPERATURE, Integer.class), new DynaProperty(PROP_UNITS, DynaBean.class) } ); DynaBean dynabean = beanClass.newInstance(); return dynabean; } } UnitsBeanFactory: public class UnitsBeanFactory extends AbstractObjectCreationFactory { private static final String BEAN_UNITS = "Units"; private static final String PROP_DISTANCE = "distance"; public Object createObject(Attributes attributes) throws Exception { DynaClass beanClass = new BasicDynaClass( BEAN_UNITS, null, new DynaProperty[] { new DynaProperty(PROP_DISTANCE, String.class) } ); DynaBean dynabean = beanClass.newInstance(); return dynabean; } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]