JBoss / Spring-WS超时处理非常大的SOAP响应

时间:2014-09-05 09:01:11

标签: xml web-services soap spring-ws jboss6.x

我们有一个在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响应的问题(即实时):

  1. SOAP响应的长度是否有限制 由应用层(尤其是JBoss EAP 6.0)处理 我们的案例

  2. 任何机会,Spring-WS都会强制执行任何限制 可以处理的响应大小?

1 个答案:

答案 0 :(得分:1)

我恐怕无法回答问题#1,但我可以尝试回答#2:Spring-WS不对XML邮件大小强制执行任何限制。但是,在内存中加载非常大的SOAP消息可能会有问题,这是使用SaajSoapMessageFactory(默认值)时发生的情况。而是切换到AxiomSoapMessageFactory,并关闭该页面上描述的有效负载缓存。这样,整个SOAP消息就不会加载到内存中。

那就是说,看起来你正在遭受读取超时而不是内存错误。您可能希望增加超时。最简单的方法是切换到HttpComponentsMessageSender并在其上配置readTimeout属性。