No write method for property问题的解决

  使用XFire进行ws调用中,发生了No write method for property问题,看了下代码发现问题如下:

 

服务器端的接口信息如下:

 

public interface QueryFacade {
 
    public QueryResult queryById(String id);

}

 

 其中的QueryResult代码如下:


public class QueryReslt implements Serializable{

    private static final long serialVersionUID = 3688506614705500726L;

    // 状态量
    private int page; // 当前页码。(1-based)
    private int items; // 总共项数
    private int itemsPerPage; // 每页项数。


    public int getPages() {
        return (int) Math.ceil((double) items / itemsPerPage);
    }

    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page =page;
    }

    public int getItems() {
        return items;
    }
    public void setItems(int items) {
        this.items = items;
    }


    public int getItemsPerPage() {
        return itemsPerPage;
    }
    public void setItemsPerPage(int itemsPerPage) {
        this.itemsPerPage = itemsPerPage;
    }

}

 

在QueryResult对象中,有一个 getPages() 方法,但其实pages并不是该对象的属性。问题就出在这里了。

 

使用xfire的ws调用时,会将对象与xml进行捆绑。整体的大概流程是:

1、 通过传递对象的get、is方法获取需要传递的属性(属性私有)

2、 与xml捆绑并网络传输

3、 解绑参数,并调用set方法将参数设置进去。

 

因此,虽然getPages()只是一个方法,还是会被误以为是属性并与xml进行捆绑,在客户端当做属性进行解绑,并调用setPages进行设置时,发现没有该方法,就跑出了一个异常。

 

这种实现确认很容易让人中招。。

 

在不改动源代码的情况下,我们在使用xfire中就得绕过这个坑:

1、如果你需要传递某些属性,一定要同时定义它的get、set方法,否则会丢失这些信息

2、自定义的方法名不要使用get打头的方法名,否则会被识别为属性并调用set设值,这样就会抛错了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值