Spring WS/boot: как установить свойство WebServiceTemplate в клиентском перехватчике?
Мое приложение - и SOAP-сервер, и Клиент, то есть оно действует как прокси-сервер между клиентами и поставщиком веб-услуг. Таким образом, я получаю разные клиентские запросы, и я выполню проверку и направлю их в службу мыла назначения, настроив соответствующие конфигурации SSL/TS. Я использую Spring WS, чтобы сделать вызов веб-службы SOAP. Ниже код работает нормально:
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;
}
Перехватчик клиента вызывается, когда я выполняю вызов webservice, но его сбой, так как шаблон webservice равен нулю. Я подключил шаблон веб-службы, но не смог понять, почему он пуст. Шаблон веб-сервиса, который я использовал ниже:
@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 в моем перехватчике вышеуказанным способом? Это правильный подход?
заранее спасибо
1 ответ
Вы пробовали аннотацию @Configurable до определения класса?
@Configurable
public class AppClientInterceptor implements ClientInterceptor{
...
}