例えば、次のようなクラスがあったとして、testメソッドだけを公開したいとします。
public class MyClass {
public void test(){
System.out.println("test");
}
public String getName(){
return "foo";
}
}
公開するメソッドを指定するには、JavaBeansのBeanInfoでメソッドディスクリプタを定義します。たとえば、MyClassクラスのメソッドディスクリプタを定義するには、MyClassBeanInfoクラスをjava.beans.SimpleBeanInfoクラスのサブクラスとして次のように定義します。
import java.beans.*;
public class MyClassBeanInfo extends SimpleBeanInfo {
public MethodDescriptor[] getMethodDescriptors(){
try{
return new MethodDescriptor[]{
new MethodDescriptor(MyClass.class.getMethod("test", new Class[]{}))
};
} catch (NoSuchMethodException e){
return new MethodDescriptor[]{};
}
}
}
pnuts.ext.LimitedClassesConfigurationオブジェクトに対して、registerClass()メソッドで、MyClassクラスを登録した上で、Context.setConfiguration()メソッドで設定すると、MyClassクラスのtestメソッドだけを呼び出すことができるコンテクストができます。
import pnuts.ext.LimitedClassesConfiguration; Configuration conf = new JavaBeansConfiguration(false); conf.registerClass(MyClass.class); Context c = new Context(); c.setConfiguration(conf); Pnuts.load(file, c);
pnuts.ext.LimitedClassesConfigurationオブジェクトが設定されたコンテクストでは、フィールドアクセスの式はBeanプロパティへのアクセスだと解釈されます。
myobj = MyClass() myobj.test() ===> "test" と表示 myobj.getName() ===> 例外 myobj.name ===> "foo"