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{
    ...
}
Другие вопросы по тегам