Hessian 开发web服务的问题,hessian开发web服务,Hessian的介绍就不
分享于 点击 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
用户点评