方法参数的继承不起作用

时间:2010-09-13 19:29:47

标签: java web-services jax-ws axis2

我有一个测试网络服务,其中包含以下方法&类,

方法

public String addPerson(Person p) {
if(p instanceof Employee) {
return "Employee"; 
}
return "Person";
}

注意:方法使用@WebMethod,@ WebParam注释进行注释,使用@WebService的Web服务也是如此。

Class Person {
public String name;
}

Class Employee extends Person{
public int employeeNo;
}

观察

  1. 尽管客户端发送了序列化的Employee对象,但Web服务始终将其作为Person对象。我用firebug工具检查了客户端上的soap数据包,员工编号出现在有效负载中。我还检查服务器上的肥皂MESSAGE&他们我没有看到员工编号属性。
  2. 问题

    1. 这是预期的行为吗?我希望不是。
    2. 有没有办法在没有编写自定义SOAP解码器的情况下完成这项工作?

2 个答案:

答案 0 :(得分:0)

我认为这应该是这样的。因为在发送数据时,继承信息会丢失,并且只会将数据解码回您在Web对象中声明的类型为Person对象。

答案 1 :(得分:0)

深挖后,我们发现问题出在客户端 生成的SOAP数据包在这种情况下不起作用。客户应该是 将派生对象(Employee)类型的名称放在相应的元素中 对于操作,但我们正在使用的客户端不是这样做的 “javax.xml.bind.UnmarshalException:无法创建...的实例” 报道。