我们有一个在JBoss EAP 6.0上运行的J2EE应用程序,它使用来自第三方应用程序的SOAP Web服务。我们使用Spring-WS发送请求并收到我们的回复。
对于普通和大尺寸响应,应用程序完全正常。但是,在调用特定Web服务(用于报告目的)时,第三方Web服务发送了大约250 MB的响应,并且java应用程序无法处理它。事务超时并引发超时错误< / p>
以下例外情况:
org.springframework.ws.client.WebServiceIOException: I/O error: Read timed out; nested exception is java.net.SocketTimeoutException: Read timed out
org.springframework.ws.client.WebServiceIOException: I/O error: Read timed out; nested exception is java.net.SocketTimeoutException: Read timed out
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:502)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:343)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:337)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:329)
但是,当在离线模式下访问响应XML时,应用程序能够在一两分钟内处理该文件。
所以,这是我同步处理SOAP响应的问题(即实时):
SOAP响应的长度是否有限制 由应用层(尤其是JBoss EAP 6.0)处理 我们的案例
任何机会,Spring-WS都会强制执行任何限制 可以处理的响应大小?
答案 0 :(得分:1)
我恐怕无法回答问题#1,但我可以尝试回答#2:Spring-WS不对XML邮件大小强制执行任何限制。但是,在内存中加载非常大的SOAP消息可能会有问题,这是使用SaajSoapMessageFactory
(默认值)时发生的情况。而是切换到AxiomSoapMessageFactory,并关闭该页面上描述的有效负载缓存。这样,整个SOAP消息就不会加载到内存中。
那就是说,看起来你正在遭受读取超时而不是内存错误。您可能希望增加超时。最简单的方法是切换到HttpComponentsMessageSender
并在其上配置readTimeout
属性。