如何从使用jax-ws </object>返回List <object>的服务中检索值

时间:2013-05-21 05:28:32

标签: java jaxb jax-ws

我有一个返回List的服务,这个对象因不同的场景而异。

有人可能会建议我jax-ws支持这种行为,还是我们有其他选择。

1 个答案:

答案 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,但你可以避免这样做。