欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Hessian 开发web服务的问题,hessian开发web服务,Hessian的介绍就不

来源: javaer 分享于  点击 44032 次 点评:216

Hessian 开发web服务的问题,hessian开发web服务,Hessian的介绍就不


Hessian的介绍就不用说了,可以看它的主页。

个人使用Hessian开发遇到以下几个情况,和大家分享。

Hessian 的接口最好不要方法重载 .

Hessian 接口方法的参数中如果使用对象,对象的构造函数如果会抛出异常,最好特殊处理。

第一中情况:interface A {   void getSomething(String str1);   void getSomething(String str1,String str2)  void getSomething(String str1, String str2, int int3)}接口实现:class AImpl  implements A {     public void getSomething(String str2){      // do something     }     public void getSomething(String str1,String str2){      // do something     }    public void getSomething(String str1,String str2,int int3){      // do something     }} 由于hessian 服务端是通过反射机制加载实现类的,所以在客户端调用这种方法重载的方式,会得到非预期的效果.这也提示我们,接口的设计应该功能区分开来,语意清晰,解决办法就是修改方法名,让他们看起来不同。第二种情况:interface A {   void getSomething(DataParam data);}public class DataParam implements Serializable{     private String name;     private String value;     public DataParam( String name, String value) throws IllegalArgumentException {        //我们这里,想对客户端传过来的参数进行正确性验证,如果不通过就抛出异常           if (name == null  || value ==null)           {               throw new IllegalArgumentException("name and value musn't be null ");           }           this.name = name;           this.value =  value;    }}接口实现:class AImpl  implements A {     public void getSomething(DataParam data){      // do something     }}客户端使用   HessianProxyFactory factory = new HessianProxyFactory();         A action = (A) factory.create( A.class, url);         DataParam data = new DataParam("xiaog","code");         A.getSomething(data);这时候,服务器端会抛出异常,为什么呢?因为还是java反射机制导致的,当客户端请求的时候,hessian服务端会通过反射去初始化对象,初始化DataParam 的时候,我们是做了参数验证,这时候name和value是为null的,所以就抛出了异常。怎么解决呢? 在 DataParam 类中添加一个默认的构造函数,同时在setName,setValue方法中去做参数的验证。//该片段来自于http://byrx.net
相关栏目:

用户点评