Hi All,
Enclosed is my class implementing "CORBA IDL Union" handling. Please feel
free to provide any suggestions.
--------------------------------------------------------------------------------------------------------------------------------
<class cst:name="MyPackage.MyUnionType">
<map-to cst:xml="my-union"/>
<field cst:name="typeOne" get-method="typeOne" set-method="typeOne"
type="int" cst:lazy="true"
handler="castor.CORBA.CastorIDLUnionHandler">
<bind-xml name="type-one" node="element"/>
</field>
<field cst:name="typeTwo" get-method="typeTwo" set-method="typeTwo"
type="MyPackage.TypeTwo" cst:lazy="true"
handler="castor.CORBA.CastorIDLUnionHandler">
<bind-xml name="type-two" node="element"/>
</field>
</class>
--------------------------------------------------------------------------------------------------------------------------------
Thanks,
Scott
package castor.CORBA;
//
// Reflection API's
//
import java.lang.reflect.Method;
public class CastorIDLUnionHandler extends AbstractFieldHandler {
/** Creates a new instance of CastorIDLUnionHandler */
public CastorIDLUnionHandler() {
}
public Object getValue(Object obj) throws IllegalStateException {
String fieldName = this.getFieldDescriptor().getFieldName();
try {
Method meth = obj.getClass().getDeclaredMethod(fieldName, new
Class[0]);
return meth.invoke(obj, new Object[0]);
//
// IDL Unions will throw RuntimeExceptions if
// you attempt to access a field that is "current"
// in the context of the descriminator. So,
// we will return null which will cause processing
// of this field to cease.
//
} catch(Exception e) {
// e.printStackTrace();
// System.err.println(e);
return null;
}
}
public Object newInstance(Object parent)
throws IllegalStateException
{
return newInstance(parent, null);
}
public Object newInstance(Object parent, Object[] args)
throws IllegalStateException
{
String fieldName = this.getFieldDescriptor().getFieldName();
try {
Method meth = parent.getClass().getDeclaredMethod(fieldName,
new Class[0]);
Class type = meth.getReturnType();
return type.newInstance();
} catch(Exception e) {
throw new IllegalStateException("newInstance(2):" + e);
}
}
public void resetValue(Object obj)
throws IllegalStateException, IllegalArgumentException
{
throw new IllegalStateException("NotSupported:resetValue(obj)");
}
public void setValue(Object obj, Object value)
throws IllegalStateException, IllegalArgumentException
{
String fieldName = this.getFieldDescriptor().getFieldName();
if(obj == null || value == null) {
throw new IllegalArgumentException("Either obj or value was
null!");
}
try {
Class [] classes = { value.getClass() };
Method meth = obj.getClass().getDeclaredMethod(fieldName,
classes);
Object [] parameters = { value };
meth.invoke(obj, parameters);
} catch(Exception e) {
throw new IllegalStateException("setValue(" + e + ")");
}
}
}
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev