Почему CFX Interceptor не работает при весенней загрузке? - PullRequest
2 голосов
/ 27 января 2020

Что я хочу сделать

Мне нужно что-то написать в базе данных, используя CFX InInterceptor в приложении Spring-boot.

Я использую:

name: 'org.springframework.boot' version '2.1.6.RELEASE'

name: 'cxf-spring-boot-starter-jaxrs', версия: '3.3 .5 '

здесь CfxConfig. java

package com.test.config;


import ....;


@Configuration
public class CfxConfig {

    HeaderInterceptor headerInterceptor;

    @Autowired
    public CfxConfig(HeaderInterceptor headerInterceptor){
        this.headerInterceptor = headerInterceptor;
    }

    @Bean
    public ServletRegistrationBean<CXFServlet> dispatcherServlet() {
        return new ServletRegistrationBean<CXFServlet>(new CXFServlet(), "/es-services/ws/*");
    }

    @Bean
    @Primary
    public DispatcherServletPath dispatcherServletPathProvider() {
        return () -> "";
    }


    @Bean
    public Endpoint endpoint(Bus bus, CentralSystemServiceEndpoint ocppCentralService) {
        EndpointImpl endpoint = new EndpointImpl(bus, ocppCentralService, SOAPBinding.SOAP12HTTP_BINDING);
        endpoint.publish("/service1");
        endpoint.getBus().getInInterceptors().add(this.headerInterceptor);
        return endpoint;
    }

}

здесь HeaderInterceptor. java

package com.test.ws.interceptor;

import ....;

@Slf4j
@Service
public class HeaderInterceptor extends AbstractPhaseInterceptor<Message> {

    private InboundXmlPayloadDao inboundXmlPayloadDao;

    @Autowired
    public HeaderInterceptor(InboundXmlPayloadDao inboundXmlPayloadDao) {
        super(Phase.PRE_PROTOCOL);
        this.inboundXmlPayloadDao = inboundXmlPayloadDao;
    }

    @Transactional
    @Override
    public void handleMessage(Message message) throws Fault {
        String ip = CentralSystemServiceImpl.getRemoteIP();
        String uuid = CentralSystemServiceImpl.getUuid();
        String soapXmlPayload = CentralSystemServiceImpl.getPayload();

        log.info(String.format("IP: %s Message: %s", ip, soapXmlPayload));
        inboundXmlPayloadDao.save(new InboundXmlPayload(uuid, soapXmlPayload, ip));
    }

}

Все работает, SOAP сервер работает, все ответы прекрасно работают, но это более новый перехватчик вызовов.

при проверке В выражении оценки

Что интересно, если я отключу все поля Autowired в «HeaderInterceptor. java» и добавлю перехватчик, например, так:

endpoint.getBus().getInInterceptors().add(new HeaderInterceptor());

все работает, и перехватчик работает как положено. Единственная проблема взаимодействия с базой данных :(


Есть идеи об этом странном поведении?

...