我有一个Jibx bean,用作web服务的输入和输出。这个bean非常大而复杂,具有深层的父子关系。 Web服务不返回请求对象,但返回一个填充了一些属性的新bean。我想合并我的请求和响应。我尝试使用Dozer(它只是将我的请求对象替换为响应,即原始请求属性丢失!同样为BeanUtils.copyProperties)。对象图太大而且太深,无法对所有属性进行isNull检查。
我考虑过将bean转换为XML并使用EL4J XML Merge合并它们 任何其他建议。
答案 0 :(得分:2)
“太大而且太深,无法进行”检查“我假设您不想对这些检查进行硬编码。你也不应该。
然而,关于bean的美妙之处在于它们可以被检查,你可以编写一个自动检查来处理对象图,检查null,如果没有则更新。
是的,这是CPU密集型的。但肯定没有比生成XML并尝试合并它更多的CPU密集。
答案 1 :(得分:0)
由于对象是bean,为什么不将bean与请求关联,何时回复使用请求bean?我并不是主张将可能只是接口对象的对象推送到系统深处,而是保持请求bean并使其成为响应bean。
我也不确定我对深度论证的理解,但如果输入布局意味着填充响应的逻辑很复杂,您可能需要在计算属性之前建立响应填充代码:作为系统确定要计算哪些属性还可以构建将这些属性放回响应bean的策略。这可能与策略模式一样简单,在更复杂的情况下,您可能会考虑使用字节码修改库。
另一种方法是简化你的界面,使XML中的属性相似,并删除“深度”:使所有属性相似,然后允许通过一个简单的循环来管理属性检查和填充。
转换为XML会首先使用框架使对象失败。也许,如果XML更容易,Jibx不是最容易解决问题的方法。你能在规范中改变什么?