我有一个包含数千个XML节点的大型xml结果。
当JAXB / AXIOM处理数据BEAN来构造SOAP响应时,我得到了一个内存峰值(+500Mb)。当我使用eclipse MAT分析JVM内存转储时,我注意到有很多AXIOM OMNamespaceImpl实例。
当我查看AXIOM StAXSOAPModelBuilder时,我看到了有趣的setter (namespaceURIInterning),它允许插入字符串以减少内存消耗。
对在Jaxb2Marshaller.marshal()中定制JAXB / AXIOM性能有什么建议吗?
致敬,JF.Desmarais
axiom 1.2.14 spring-ws 2.1.4 JDK 1.7
Spring-ws代码摘录以构建当前的SOAP响应:
public final void invoke(MessageContext messageContext) throws Exception {
WebServiceMessage request = messageContext.getRequest();
Object requestObject = unmarshalRequest(request);
if (onUnmarshalRequest(messageContext, requestObject)) {
Object responseObject = invokeInternal(requestObject);
if (responseObject != null) {
WebServiceMessage response = messageContext.getResponse();
marshalResponse(responseObject, response);
onMarshalResponse(messageContext, requestObject, responseObject);
}
}
}
public WebServiceMessage getResponse() {
if (response == null) {
response = messageFactory.createWebServiceMessage();
}
return response;
}
public AxiomSoapMessage createWebServiceMessage() {
return new AxiomSoapMessage(soapFactory, payloadCaching, langAttributeOnSoap11FaultString);
}发布于 2015-01-26 07:45:27
您正在使用已弃用的AbstractMarshallingPayloadEndpoint类。切换到基于注释的端点将启用一些优化(支持StreamingWebServiceMessage),从而避免您所描述的问题。
https://stackoverflow.com/questions/28047352
复制相似问题