tôi dường như chạy vào một vấn đề nhỏ khi sử dụng @Autowired thành một bộ chặn đánh chặn cxf tùy chỉnh. Trường hợp sử dụng của tôi là tôi muốn ghi lại các tin nhắn xà phòng và gửi chúng bằng AMQP tới một hệ thống khác. Quá trình này hoạt động cho các dịch vụ thông thường, vv .. Nhưng bất cứ điều gì tôi làm, các thuộc tính cần thiết không nhận được autowired và ở lại null.Làm thế nào để sử dụng Spring Autowired trong bộ chặn đánh dấu cxf tùy chỉnh?
Tôi đã kiểm tra nhật ký Spring DI và bối cảnh được quét và chọn, vì vậy tôi đang thiếu gì?
Điều này có thể thực hiện được trong các thiết bị đánh chặn CXF không?
@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());
}
}
Bằng cách "nhặt" bạn có nghĩa là LogInInterceptor của bạn đang được tìm thấy và có đủ điều kiện tiêm từ thùng chứa mùa xuân? Nó đã báo cáo bất kỳ vấn đề nào khác với việc tiêm (chẳng hạn như thất bại tại tham số @Value)? –
Bạn có thể chia sẻ cấu hình cho thiết bị chặn này với CXF không. Lý do cho vấn đề này có thể là máy đánh chặn có thể đã được khởi tạo bởi CXF và một cá thể tự động riêng biệt có thể đã được tạo ra bởi Spring. –
Tôi đã triển khai trình chặn như ở trên và thêm nó vào dịch vụ web của tôi qua @ org.apache.cxf.interceptor.InInterceptors (interceptors = {"org.apache.cxf.interceptor.LoggingInInterceptor", "mypackagenames.ws.interceptor.LogInInterceptor "}) Tôi hoàn toàn không thực hiện cấu hình bổ sung nào. – Marco