「Java」OGNL使ってみた

ちょっと気になったので、OGNL 使ってみた。その時のメモ。

[ 環境情報 ]
Windows 7 SP1
Java SE 7 Update 45
ognl 3.0.8
javassist 3.18.0-GA ( 依存関係のあるライブラリみたいです )

※ ライブラリは以下からダウンロードしました。

Maven Repository: ognl ≫ ognl
http://mvnrepository.com/artifact/ognl/ognl
Javassist
http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/


■ OgnlTest.java

import ognl.ObjectMethodAccessor;
import ognl.ObjectPropertyAccessor;
import ognl.Ognl;
import ognl.OgnlContext;

public class OgnlTest {
	public static void main(String[] args) throws Exception {
		Hello hello = new Hello();
		OgnlContext ctx = new OgnlContext();

		Object expression = Ognl.parseExpression("name");
		Ognl.setValue(expression, ctx, hello, "hoge");
		Object value1 = Ognl.getValue(expression, ctx, hello);
		System.out.println(value1);

		ObjectPropertyAccessor opa = new ObjectPropertyAccessor();
		opa.setProperty(ctx, hello, "name", "uga");
		Object value2 = opa.getProperty(ctx, hello, "name");
		System.out.println(value2);

		ObjectMethodAccessor oma = new ObjectMethodAccessor();
		Object method1 = oma.callStaticMethod(ctx, hello.getClass(), "helloMethod1", new Object[0]);
		System.out.println(method1);
		
		Object[] o = {"oro"};
		Object method2 = oma.callStaticMethod(ctx, hello.getClass(), "helloMethod2", o);
		System.out.println(method2);
	}
}

■ Hello.java

public class Hello {
	private String name;
	public String getName() { return name; }
	public void setName(String name) { this.name = name; }

	public static String hogeMethod1() { return "hogeMethod !!"; }
	public static String helloMethod2(String s) { return s + " helloMethod2 !!"; }
}

■ 実行結果

hoge
uga
helloMethod1 !!
oro helloMethod2 !!

あんまりよくわからないですが、ひとまず「プロパティへの設定/取得」、「メソッドの呼び出し」できてる感じですね。

上記のサンプルは、以下あたりの情報を参考にしてます。

・OGNL - Apache Commons OGNL - Developer Guide
http://commons.apache.org/proper/commons-ognl/developer-guide.html
・OGNL Hello World in Java - Stack Overflow
http://stackoverflow.com/questions/785887/ognl-hello-world-in-java
・ObjectPropertyAccessor (Apache Commons OGNL - Object Graph Navigation Library 4.0-SNAPSHOT API)
http://commons.apache.org/proper/commons-ognl/apidocs/org/apache/commons/ognl/ObjectPropertyAccessor.html
・ObjectPropertyAccessor (Apache Commons OGNL - Object Graph Navigation Library 4.0-SNAPSHOT API)
http://commons.apache.org/proper/commons-ognl/apidocs/org/apache/commons/ognl/ObjectPropertyAccessor.html


以上です。