我在下面给出了方案和问题,寻找有人提供解决方案/建议。
场景:有不同类型的业务bean对象,这些业务bean没有共同的属性,不能一般化。对于不同的任务/工作,我必须处理一种类型的业务bean的集合。在这个集合中我想要另一个MyKey
类型的集合。 MyKey
构造函数是:
MyKey(String buzUnit, String id, String subId)
对应于不同的business-bean,MyKey的构造函数(buzUnit
,id
和subId
)需要的值将是business-bean的不同属性,这又取决于执行任务/工作。
我喜欢根据任务/作业进行配置,并在数据库中维护配置。
问题: 我正在尝试使用任何EL(OGNL,Unified EL,MVEL,SpEL)来实现集合转换。我尝试使用OGNL,但无法获得理想的结果。
OGNL上的POC:
List<Point> points = new ArrayList<Point>();
points.add(new Point(2,3));
points.add(new Point(3,4));
points.add(new Point(4,5));
Map<String, Object> nameCtx = new HashMap<String, Object>();
nameCtx.put("buzBeanCollection", points);
Object retCollection = Ognl.getValue("buzBeanCollection.{new org.my.MyKey('job12', #this.x, #this.y) }", nameCtx);
在上面的代码中#this
正在解析为根HashMap
答案 0 :(得分:1)
使用MVEL工作。
List<Point> points = new ArrayList<Point>();
points.add(new Point(2,3));
points.add(new Point(3,4));
points.add(new Point(4,5));
Map<String, Object> nameCtx = new HashMap<String, Object>();
nameCtx.put("buzBeanCollection", points);
Object result = MVEL.eval("((new org.my.MyKey('job12', $.x * 2, $.y * 2)) in buzBeanCollection)", nameCtx);
System.out.println(result);
基于MVEL功能的其他结论;我发现OGNL的AST是使用ANTLR创建的,但MVEL有自己的集成Lexer-Parser,包括Subparsers。
OGNL无法进行相似的投影是否存在OGNL问题或ANTLR问题?