Considérons les classes suivantes (veuillez prendre en compte les méthodes getter et setter publiques pour les champs privés).Comment marshall un type paramétré avec JAX-WS/JAXB?
// 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;
// ...
}
Nous pourrions avoir la mise en œuvre de services Web suivant annotées comme suit:
@WebService
public class PersonService {
@WebMethod
public Result<Teacher> getTeachers() { ... }
@WebMethod
public Result<Student> getStudents() { ... }
}
Le problème est que JAXB semble marshall l'objet de résultat comme Result<Person>
au lieu du type de béton. Donc le résultat retourné par getTeachers() est sérialisé comme contenant un List<Person>
au lieu de List<Teacher>
, et le même pour getStudents(), mutatis mutandis.
Est-ce le comportement attendu? Dois-je utiliser @XmlSeeAlso sur Person?
Merci!
LES
pouvez-vous donner un XML résultant? – Bozho
J'utilise actuellement un plugin JAX-WS JSON qui retourne des données JSON. Un exemple d'exemple getTeachers serait: {city: "Memphis", groupe: [{name: "Johnny"}]}. Autrement dit, "salaire" n'apparaîtrait pas. La même chose pour getStudents - il aimerait exactement comme l'exemple précédent (cours ne serait pas apparaître). Je ne suis pas sur ma boîte de dev qui est pourquoi je ne peux pas poster un exemple réel du WSDL ou du schéma généré ou XML d'accéder au service via SOAP en utilisant SoapUI. – les2