我正在构建一个 SOAP 网络服务。我正在使用 JAX-WS 创建此服务并将其部署在 Glassfish 3.1.2 服务器上。
让这个服务返回一个带有我想要的 XML 表示的字符串构建没有问题。我也可以让它返回一个特定的对象。我遇到的问题是流式传输此资源。
这是我到目前为止所拥有的:
接口:
@MTOM
@WebService
@XmlRootElement(name="root.element.class.location")
@SOAPBinding(style = Style.RPC, use=Use.LITERAL)
public interface ResultsServer {
@WebMethod
@XmlMimeType("text/xml")
public Test getResultDataAsXML(@WebParam(name="Id") Integer id) throws Exception;
}
实施:
- - 编辑 - -
这是我想流式传输我的资源的地方。假设我需要我的results
对象变得非常大,我不想持有这是内存并且想在不持有它的情况下开始发送它。(在代码中对此进行了注释)
@WebService(endpointInterface = "my.endpoint.class")
@StreamingAttachment(parseEagerly=true, memoryThreshold=4000000L)
public class ResultsServerImpl implements ResultsServer {
@Override
public Test getResultDataAsXML(Integer id) throws Exception {
Test results = new Test();
for(int i=0; i<[very large number]; i++) {
results.getResults().add("here : " + i);
/**at one point, this is too large to hold in memory
I would like to be able to start returning the object here
so it is not taking up all available memory */
}
return results; //or close the stream
}
}
---- 结束编辑 ----
我的Test
课程是一个简单的课程,如下所示:
public class Test {
private ArrayList<String> results;
public Test() {
results = new ArrayList<String>();
}
public ArrayList<String> getResults() {
return results;
}
public void setResults(ArrayList<String> results) {
this.results = results;
}
}
让我们假设这个Test
对象变得非常大(并且更复杂)。我需要能够流式传输此对象。我将如何继续进行流式传输。
理想情况下,我想保留这个对象的结构。
从我目前所读的内容来看,我需要以某种方式转换这个对象DataHandler
并返回这个对象。
欢迎任何帮助!谢谢你。