【发布时间】:2010-02-17 03:59:00
【问题描述】:
考虑以下类(请假设私有字段的公共 getter 和 setter 方法)。
// contains a bunch of properties
public abstract class Person { private String name; }
// adds some properties specific to teachers
public class Teacher extends Person { private int salary; }
// adds some properties specific to students
public class Student extends Person { private String course; }
// adds some properties that apply to an entire group of people
public class Result<T extends Person> {
private List<T> group;
private String city;
// ...
}
我们可能有如下注释的 Web 服务实现:
@WebService
public class PersonService {
@WebMethod
public Result<Teacher> getTeachers() { ... }
@WebMethod
public Result<Student> getStudents() { ... }
}
问题在于 JAXB 似乎将 Result 对象编组为 Result<Person> 而不是具体类型。所以 getTeachers() 返回的 Result 被序列化为包含 List<Person> 而不是 List<Teacher>,getStudents() 也一样,比照了。
这是预期的行为吗?我需要在 Person 上使用 @XmlSeeAlso 吗?
谢谢!
LES
【问题讨论】:
-
你能给出一个生成的 XML 吗?
-
我实际上使用的是返回 JSON 数据的 JAX-WS JSON 插件。 getTeachers 示例是: {city:"Memphis",group:[{name:"Johnny"}]} 。也就是说,“工资”不会出现。 getStudents 也是如此——它与前面的示例完全一样(当然不会出现)。我现在不在我的开发箱上,这就是为什么我不能发布一个真实的 WSDL 示例或生成的模式或 XML,通过使用 SoapUI 通过 SOAP 访问服务。
标签: java generics jaxb jax-ws web-services