由于 JAX-WS 使用 JAXB 来序列化对象,因此 JAXB 需要知道编组或解组的类型名称。在一个独立的环境中可以处理这种事情。但是,在处理对象列表时,这变得更加复杂。
此外,必须在 WSDL 中定义每种数据类型。服务客户端必须能够将响应 XML 转换为所需的数据类型。
如果您希望返回不同类型的不同列表,最简单的方法是对响应使用包装器。例如
public class ResponseWrapper {
private List<Audio> audios;
private List<Video> videos;
// setters and getters
}
@WebService
public class MediaStore {
@Inject
AudioService audioService;
@Inject
VideoService videoService;
@WebMethod
public ResponseWrapper getCollections(String artistId) {
ResponseWrapper response = new ResponseWrapper();
response.setAudios(audioService.getAudios(artistId));
response.setAudios(videoService.getVideos(artistId));
return response;
}
}
另一种方法是直接使用SOAP 消息,但您可以避免这样做。