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

问题描述 投票:0回答:1

我们有一个在JBoss EAP 6.0上运行的J2EE应用程序,它使用来自第三方应用程序的SOAP Web服务。我们使用Spring-WS发送请求并收到我们的回复。

对于正常和大尺寸响应,应用程序工作得很好。但是,在调用特定Web服务(用于报告目的)时,第三方Web服务发送了大约250 MB的响应,并且Java应用程序无法处理它。事务超时并引发超时错误

下面的例外情况:

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. 在我们的案例中,应用层(特别是JBoss EAP 6.0)可以处理的SOAP响应的长度是否有任何限制
  2. 有机会,Spring-WS是否对可以处理的响应大小强制执行任何限制?
xml web-services soap spring-ws jboss6.x
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.