Hello,

I have application that has a variety of alarms. For now consider Alarm to be an abstract class that is extended by UpdownAlarm and JitterAlarm. Note that UpdownAlarm and JitterAlarm can have different parameters - UpDownAlarm could have parameters that describe the allowed range of motion and JitterAlarm could have parameters that describe the allowed acceleration. These alarms are created with an alarm factory.

There is an object called Monitor that contains a field Alarm which can either be UpdownAlarm or JitterAlarm. My mapping file looks like the one below.

<?xml version="1.0"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version 1.0//EN"
                        "http://castor.exolab.org/mapping.dtd";>
<mapping>
<class name="x.y.z.Alarm" auto-complete="false">
<field name="type" type="string" required="true"><bind-xml name="type" node="attribute"/></field>
</class>
<class name="x.y.z.UpdownAlarm" extends="x.y.z.Alarm" auto-complete="false">
<field name="maxRange" type="string" required="true"><bind-xml name="maxRange" node="attribute"/></field>
</class>
<class name="x.y.z.JitterAlarm" extends="x.y.z.Alarm" auto-complete="false">
<field name="maxAccel" type="string" required="true"><bind-xml name="maxAccel" node="attribute"/></field>
</class>
<class name="x.y.z.Monitor" auto-complete="false" >
<field name="name" type="String" required="true"><bind-xml name="name" node="attribute"/> </field>
        <field name="alarm" type="x.y.z.Alarm" required="true"> </field>
</class>
</mapping>

Mapping works fine and produces the following xml:

<?xml version="1.0" encoding="UTF-8"?>
<config>
   <monitor name="test">
       <alarm type="UpdownAlarm" maxRange="45"/>
   </monitor>
   <monitor name="test2">
       <alarm type="JitterAlarm" maxAccel="95"/>
   </monitor>
</config>

At this point I'm stuck. I don't know how to reliably unmarshal the alarm fields back to UpdownAlarm and JitterAlarm. Based upon the documentation, I can use a customFieldHandler to reference my Alarm factory with a valueOf() method, but what about the extra parameters like 'maxRange' and 'maxAccel'. These are not defined for the abstract Alarm so I'm sure Castor will throw a parsing
error (I haven't tried that yet).

Can anybody give me some guidance about how to proceed? I'd appreciate examples or suggestions.
Thanks!

Chuck Kring



---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   http://xircles.codehaus.org/manage_email


Reply via email to