我正在开发一个系统,用于将接收到的结构化消息动态映射到 Java 对象。目前我正在通过 XML 模式执行此操作,该模式具有以下典型格式:
<mapping>
<domainObject>company.app.MyObject</domainObject>
<attribute>
<domainAttribute>myAttr</domainAttribute>
<messageAttribute>root/config/component/param1</messageAttribute>
</attribute>
</mapping>
所以接收到的消息有一个层次结构,它映射到特定的域对象属性。因此,对于上述内容,我将消息元素映射root/config/component/param1
到域属性MyObject.myAttr
我已经开发了代码来做到这一点,但是在阅读了关于 Struts2 及其对 OGNL 的使用之后,它似乎在做同样的事情。我的问题是,OGNL 可以动态构造必要的对象,然后填充所有必要的属性吗?如果是这样,那是怎么做的?通过阅读 API 文档,您似乎必须自己构建对象。例如,如果我使用这样的 OGNL 表达式
rootObj.childObj.param1
理想情况下,我希望 OGNL 服务构造 object rootObj
,childObj
然后是 set attribute param1
。这正是 Struts 将 Http 请求参数传递给域对象所做的事情,因此动态对象的创建必须在某处进行。然而,在对 OGNL 表达式进行了一些试验之后,没有发生对象创建,并且我得到了空对象异常。