Spring Webservicetemplate连接重置错误

时间:2015-07-09 10:50:16

标签: java soap spring-ws axiom


   我们正在使用Spring 4 WebServiceTemplateWCF网络服务联系。我们发送到此Web服务的项目之一是图像(JPEG格式)。对于某些情况,当图像稍大(约22KB)时,我们会收到以下错误:

<pre><code>org.springframework.ws.client.WebServiceIOException: I/O error: Connection reset; nested exception is java.net.SocketException: Connection reset</pre></code>

如果我们根本不发送图像,则不会发生此错误。因此,它似乎与有效载荷大小有关,因为对于较小尺寸的图像或没有图像,没有问题。在其他调用期间,此22KB大小约为图像大小的两倍。

我们已尝试按照建议hereSaajSoapMessageFactory切换到AxiomSoapMessageFactory,但效果相同。

class <className> extends WebServiceGatewaySupport {
      <className>() {
          super(new AxiomSoapMessageFactory());
          AxiomSoapMessageFactory messageFactory =
            (AxiomSoapMessageFactory) getMessageFactory();
          messageFactory.setPayloadCaching(false);
          ...
      }
      ...
}

有人如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

真正的问题不在于SaajSoapMessageFactory或AxiomSoapMessageFactory。该应用程序试图在调用Web服务时发送Base64编码的图像字符串,在少数情况下,这个编码的字符串太长(虽然整个邮件大小不够大,不足以保证AxiomSoapMessageFactory)。

当我们在Web服务配置(WCF)中将“Text”绑定替换为“Mtom”并在客户端代码中添加marshaller.setMtomEnabled(true)时,问题得以解决。