gpt4 book ai didi

java - Spring WS/启动: How to set WebServiceTemplate property in client interceptor?

转载 作者:行者123 更新时间:2023-11-30 06:50:35 25 4
gpt4 key购买 nike

我的应用程序既是 SOAP 服务器又是客户端,即它充当客户端和 Web 服务提供商之间的代理服务器。因此,我收到不同的客户端请求,我将进行验证并通过设置适当的 SSL/TS 配置将它们路由到目标 SOAP 服务。我正在使用 Spring WS 进行 SOAP Web 服务调用。下面的代码工作正常:

     try {
webServiceTemplate.setMessageSender(certManager.setKeystores());
// perform the transaction
SOAPResponse = (JAXBElement<Response>) webServiceTemplate
.marshalSendAndReceive(SoapRequest);
} catch(Exception e) {
// catching a broad exception here because many things can go wrong,
//but any exception means total failure
throw new ServiceException(e);
}

但我正在尝试一种不同的方法,在客户端拦截器中设置 SSL 配置:

public class AppClientInterceptor implements ClientInterceptor{

private static final Logger LOGGER = LoggerFactory
.getLogger(AppClientInterceptor.class);
@Autowired
WebServiceTemplate webServiceTemplate;
@Autowired
CertManager certManager;

@Override
public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
// pull out the request from the current thread

try {
LOGGER.info("before setting message sender");
if(webServiceTemplate!=null)
webServiceTemplate.setMessageSender(certManager.setKeystores());
else
System.out.println("web service tempate is null");
return false;
} catch (GeneralSecurityException | IOException e) {
// TODO Auto-generated catch block
LOGGER.info("In catch block unable to set keystores");
e.printStackTrace();
}

return false;
}

当我进行 Web 服务调用时,客户端拦截器被调用,但由于 Web 服务模板为空而失败。我连接了 Web 服务模板,但无法理解为什么它为空。我使用的网络服务模板如下:

@Bean
public WebServiceTemplate webServiceTemplate() {

WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
webServiceTemplate.setMarshaller(jaxb2Marshaller());
webServiceTemplate.setUnmarshaller(jaxb2Marshaller());
ClientInterceptor[] interceptors = {new AppClientInterceptor()};
webServiceTemplate.setInterceptors(interceptors);
webServiceTemplate.setDefaultUri(
"https://destinationserver.com:10072");

return webServiceTemplate;
}

我可以通过上述方式在拦截器中设置 SSL 配置吗?这是正确的方法吗?

提前致谢

最佳答案

您在类定义之前尝试过@Configurable注释吗?

@Configurable
public class AppClientInterceptor implements ClientInterceptor{
...
}

关于java - Spring WS/启动: How to set WebServiceTemplate property in client interceptor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42869237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com