Что я хочу сделать
Мне нужно что-то написать в базе данных, используя 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());
все работает, и перехватчик работает как положено. Единственная проблема взаимодействия с базой данных :(
Есть идеи об этом странном поведении?