我一直在使用Apache CXF,特别是它支持的各种数据绑定:JAXB(默认),MTOM,Aegis和XMLBeans.由于所有这些都得到了支持,我认为每个都有它的优点.我想出了这些:
wsdl2java工具,所以它不太适合"契约优先"开发,即从WSDL开始并从中生成Java代码.我发现这个问题并列JAXB和XMLBeans,但它没有提供全面的概述:
除了这些天真的,先验的考虑之外,你是否有任何血腥经验可以支持使用除JAXB之外的任何其他绑定?我是从CXF的角度问的,但如果想到任何其他选择(例如Castor),请不要犹豫,详细说明.
在反序列化各种JSON消息时,我想为某种类型的属性提供默认值.它通常建议简单地指定的类值,但是如果你要在许多类做到这一点,这是容易出错.您可能会忘记一个并最终得到null而不是默认值.我的目的是设置每个属性Optional<T>为Optional.absent.由于null正是Optional试图消除的,因此将它们与杰克逊一起使用已被证明是令人沮丧的.
Jackson允许您自定义反序列化过程的大多数功能都集中在作为输入的JSON上,而不是围绕实例化您要反序列化的Object的过程.我似乎最接近一般解决方案是建立自己的解决方案ValueInstantiator,但我还有两个问题:
Optional为absent,但不与实例化过程的其余部分干扰?ObjectMapper?更新:我想澄清我正在寻找一个不涉及修改包含的每个类的解决方案Optional.我反对违反DRY原则.每次我们添加Optional新的或现有的课程时,我或我的同事都不应该考虑做额外的事情.我希望能够说,"让每个Class中的每个可选字段反序列化,预填充Absent",只需一次,并完成它.
这意味着以下内容: