Java 方法参数上的继承无效

Java 方法参数上的继承无效,java,web-services,jax-ws,axis2,Java,Web Services,Jax Ws,Axis2,我有一个带有以下方法和类的测试web服务 方法 注意:方法用@WebMethod、@WebParam注释注释,web服务也用@WebService注释 班级 观察 尽管客户端发送序列化的Employee对象,web服务始终将其作为Person对象。我已经用firebug工具检查了客户端上的soap数据包,有效负载中有员工编号。我还检查服务器上的soap消息&它们的“我看不到员工编号”属性 问题 这是预期的行为吗?我希望不是这样 我有没有办法不用编写定制的SOAP解码器就可以完成这项工作 我想应该

我有一个带有以下方法和类的测试web服务

方法 注意:方法用@WebMethod、@WebParam注释注释,web服务也用@WebService注释

班级 观察
  • 尽管客户端发送序列化的Employee对象,web服务始终将其作为Person对象。我已经用firebug工具检查了客户端上的soap数据包,有效负载中有员工编号。我还检查服务器上的soap消息&它们的“我看不到员工编号”属性
  • 问题
  • 这是预期的行为吗?我希望不是这样
  • 我有没有办法不用编写定制的SOAP解码器就可以完成这项工作
    我想应该是这样的。因为当数据被发送时,继承信息丢失,它只会将数据解码回在您的案例中webservice方法中声明的类型到Person对象。

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

    谢谢费萨尔。如果这是真的,那么如何让类型继承与web服务一起工作呢?我已经检查了另一个系统的wsdl(不幸的是,它不是开源的)。它实现了我们希望实现的目标。
    public String addPerson(Person p) {
    if(p instanceof Employee) {
    return "Employee"; 
    }
    return "Person";
    }
    
    Class Person {
    public String name;
    }
    
    Class Employee extends Person{
    public int employeeNo;
    }