技术开发 频道

WebService开发常见问题

  问题二:我的数据被修改了?

  先来看WebService接口:

1 @WebService
2     public interface IHello {
3     
4         @WebMethod
5         public String sayHello(IPerson person);
6     
7     }
8     
9     public interface IPerson {
10         ...
11     }
12     
13     public class Person implements IPerson{
14         ...
15     }

  这里需要注意的是WebService的方法sayHello()的参数是一个接口,而不是一个具体类(例如Aegis绑定就允许直接发布这样的WebService)。在客户端调用sayHello()的时候传递一个Person对象,它实现了IPerson接口。经过中间一系列的XML和对象之间的转换过程,服务器端得到的只是一个实现了IPerson接口的实例,它不一定就是一个Person对象,如果要强制将其转换为Person,就有可能抛出异常。

  问题的根源在于Aegis将XML转换为Java对象是通过Proxy或CGlib这类的工具生成一个“代理类”实现IPerson接口,然后创建这个代理类的一个实例,那它肯定不是一个Person了。

2
相关文章