【问题标题】:Inheritance on method parameters not working方法参数的继承不起作用
【发布时间】:2010-09-13 19:29:46
【问题描述】:

我有一个包含以下方法和类的测试网络服务,

方法

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

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

Class Person {
public String name;
}

Class Employee extends Person{
public int employeeNo;
}

观察

  1. 尽管客户端发送了序列化的 Employee 对象,但 Web 服务始终将其作为 Person 对象。我已经用萤火虫工具检查了客户端上的肥皂包,有效载荷中存在员工编号。我还检查了服务器上的soap MESSAGE & 他们我没有看到员工编号属性。

问题

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

【问题讨论】:

    标签: java web-services jax-ws axis2


    【解决方案1】:

    我认为应该是这样。因为当发送数据时,继承信息会丢失,它只会将数据解码回在您的情况下的 webservice 方法中声明的类型为 Person 对象。

    【讨论】:

    • 感谢费萨尔。如果那是真的,那么如何让类型继承与 Web 服务一起使用?
    • 我检查了另一个系统的 wsdl(不幸的是不是开源的)。它实现了我们想要实现的目标。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 2015-03-04
      • 2012-06-04
      • 2013-04-24
      相关资源
      最近更新 更多