Сначала я объясню проект. Это интеграционная веб-служба, которая прослушивает запросы и внутренне использует другую веб-службу и обрабатывает ее ответы, чтобы получить желаемый ответ. Мне нужно добавить пользовательский заголовок для каждого запроса во «внутренний» веб-сервис. Я проверил, что при использовании следующей конфигурации обработчик является одноэлементным классом. Мне нужно, чтобы каждый новый запрос к «внутренней службе» создавал новый экземпляр. Я проверил, что иногда заголовки для запроса «A» используют значения для запроса «B». Я инициализирую значения заголовка перед первым «внутренним» запросом (мне нужно вызвать метод «внутреннего» веб-сервиса без каких-либо мыльных заголовков, а затем настроить его, используя значение, содержащееся в первом ответе ). Любые идеи, как я могу сделать эту работу?
Спасибо
//ConfigurationClass
@Bean(name = "internalService")
@Scope(scopeName="prototype")
public JaxWsPortProxyFactoryBean internalService() {
JaxWsPortProxyFactoryBean bean = new JaxWsPortProxyFactoryBean();
try {
bean.setServiceInterface(internalService.class);
bean.setWsdlDocumentUrl(new URL("https://localhost/internalService.svc?wsdl" ));
bean.setNamespaceUri( "http://schemas.internalService.com/2019/04/");
bean.setServiceName("InternalService");
bean.setPortName("InternalServicePort");
bean.setEndpointAddress("https://localhost/internalService.svc");
bean.setHandlerResolver(wsHandlerResolver());
} catch (MalformedURLException e) {
e.printStackTrace();
}
return bean;
}
@Bean(name = "wsHandlerResolver")
public WebServiceHandlerResolver wsHandlerResolver() {
WebServiceHandlerResolver wshandlerResolver = new WebServiceHandlerResolver();
List handlers = new ArrayList();
handlers.add(webServiceHandler());
wshandlerResolver.setHandlers(handlers);
return wshandlerResolver;
}
@Bean(name = "webServiceHandler")
public WebServiceHandler webServiceHandler() {
WebServiceHandler webServiceHandler = new WebServiceHandler();
return webServiceHandler;
}
//HandlerResolver class
public class WebServiceHandlerResolver implements HandlerResolver {
private List<Handler> handlers;
public List<Handler> getHandlerChain(PortInfo portInfo) {
return handlers;
}
public void setHandlers(List<Handler> handlers) {
this.handlers = handlers;
}
}
//Handler class
public class WebServiceHandler implements SOAPHandler<SOAPMessageContext> {
private String user;
private String pass;
private String source;
@Override
public boolean handleMessage(SOAPMessageContext context) {
//THIS IS WHERE I ADD THE VALUES
}
}