今天被java bean折腾了一下午

上大学的时候, Joyer Huang曾非常激动的给我介绍java bean是一个多么多么令人兴奋的组件技术,呃,但是那时候,我压根儿不想去学java。
这周在用axis2架一些简单的web service,无奈文档奇缺。本来一切都写完了,今天调试的时候发现,axis在将xml反序列化成object的时候出了问题。当我使用复杂类型的时候,它并没有把对象的每个字段赋予正确的值,它们都是默认值。哦,去axis2的网站来回溜达,它反复的在讲Plain Old Java Object,当时我还没有意识到bean。
然后反复的调试,读axis2的源代码,然后跟踪到BeanUtil类。然后发现:

BeanInfo beanInfo = Introspector.getBeanInfo(beanObject.getClass());
PropertyDescriptor [] propDescs = beanInfo.getPropertyDescriptors();

它要求参数的类型是一个bean。然后根据bean工具去获取bean的所有属性。然后解析xml,每解析到一个字段,就去bean info里面找找有没有这个属性,如果有,就赋值,否则就跳过。
然后我发现我唯一的问题就是:没有把类写成bean。所幸,eclipse的编辑功能非常强大,能自动生成getters/setters。然后写段代码测试下:

@Test
public void 列出所有属性(){
    BeanInfo bi=null;
    PropAttr attr=new PropAttr();
    try{
        bi=Introspector.getBeanInfo(attr.getClass());
    }catch(IntrospectionException ex){
        logger.error(ex);
    }
    for(PropertyDescriptor d: bi.getPropertyDescriptors()){
        logger.info(d.getName());
    }
}

bingo!

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥