我有一个返回List的服务,这个对象因不同的场景而异。
有人可能会建议我jax-ws支持这种行为,还是我们有其他选择。
答案 0 :(得分:0)
由于JAX-WS使用JAXB来序列化对象,因此JAXB需要知道marshall或unmarshall的类型名称。在独立环境中deal可以使用这种东西。但是,在处理对象列表时,这会变得更加复杂。
此外,必须在WSDL中定义每种数据类型。服务客户端必须能够将响应XML转换为所需的数据类型。
如果您希望返回不同类型的不同列表,最简单的方法是使用包装器进行响应。 e.g。
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 messages,但你可以避免这样做。