我使用spring WebServiceTemplate
(WebServiceGatewaySupport.getWebServiceTemplate()
)在https服务器上调用Soap Web服务。有一个用户名和密码验证。因此,我创建了一个HttpComponentsMessageSender
的实例,并用UsernamePasswordCredentials
进行了填充。没有其他额外设置,所有设置均为默认设置。
当我致电WebServiceTemplate.marshalSendAndReceive
时,我会得到正确的结果,因此可以正常工作。
但是,当我看到应用程序日志时,我会在那里找到两个https调用(在单个marshalSendAndReceive调用内部)。第一个没有用户名和密码,结果为“ HTTP / 1.1 401未经授权”。框架从此错误中恢复,并使用用户名和密码发送第二个请求,结果为200 OK。
所以我的应用程序的运行情况几乎不错,它只是发送了一个额外的无用的无效https请求。
是否有一种方法可以强制Spring在第一个(也是唯一的)调用中包括用户名和密码? WebServiceTemplate
或HttpComponentsMessageSender
或其他任何配置?
更新:
该行为是由apache-httpclient库中的“ while(!done)”循环中的DefaultRequestDirector.execute
引起的。该库的代码似乎很复杂。