Mi sembra di imbattersi in un piccolo problema quando si utilizza @Autowired in un intercettore personalizzato cxf. Il mio caso d'uso è che voglio registrare i messaggi soap e inviarli usando AMQP su un altro sistema. Questo processo funziona per servizi normali, ecc. Ma qualunque cosa faccia, le proprietà necessarie non vengono autorizzate e rimangono nulle.Come utilizzare Spring Autowired in un intercettore cxf personalizzato?
Ho controllato il registro DI priming e il contesto è scansionato e prelevato, quindi cosa mi manca?
Ciò è possibile anche negli intercettori CXF?
@Component
public class LogInInterceptor extends AbstractSoapInterceptor {
private @Value("#{rabbitMQProperties['rabbitmq.binding.log.soap']}")
String binding;
@Autowired
AmqpTemplate amqpTemplate;
public LogInInterceptor() {
super(Phase.RECEIVE);
}
@Override
public void handleMessage(SoapMessage soapMessage) throws Fault {
logIt(soapMessage);
}
private void logIt(SoapMessage message) throws Fault {
// rest of the code omitted...!!!
amqpTemplate.convertAndSend(binding, buffer.toString());
}
}
Con "raccolto" vuoi dire che il vostro LogInInterceptor è stato trovato ed è ammissibile per iniezione dal contenitore Spring? Ha segnalato altri problemi con l'iniezione (come il fallimento del parametro @Value)? –
Potete condividere anche la configurazione per questo intercettore con CXF. La ragione di questo problema potrebbe essere che l'intercettore potrebbe essere stato istanziato da CXF e un'istanza autowired separata potrebbe essere stata creata da Spring. –
Ho implementato l'intercettore come sopra e l'ho aggiunto al mio webservice tramite @ org.apache.cxf.interceptor.InInterceptors (interceptors = {"org.apache.cxf.interceptor.LoggingInInceptceptor", "mypackagenames.ws.interceptor.LogInInceptceptor "}) Non ho eseguito alcuna configurazione aggiuntiva. – Marco