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