「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
以上です。