Tôi đang cố gắng tiêm dịch vụ vào lớp Rest đang sử dụng Jersey.Tích hợp Jersey và spring - bean Injections là null khi chạy
Không có vấn đề gì hoặc làm thế nào tôi cố gắng để tiêm vào lớp này dường như được hiển thị như là null khi chạy. Nhìn vào các tệp log cho thấy setJsonTestService đang được gọi khi ứng dụng web được khởi tạo và nó không phải là null vào thời điểm này. Nhưng, khi truy cập nó sau đó với một yêu cầu PUT cho lớp này, nó là null.
Tôi hoàn toàn bối rối.
Lớp trông như thế này:
@Named
@Path("JsonTest")
public class JsonTest {
@Context
Request request;
@Context
UriInfo uriInfo;
protected final Logger log = Logger.getLogger(getClass());
private JsonTestService jsonTestService;
@Autowired
public void setJsonTestSerivce(JsonTestService jsonTestService) {
log.info("Setting JsonTestService.");
if (jsonTestService == null) {
log.info("JsonTestService is null at injection");
}
this.jsonTestService = jsonTestService;
}
@Inject
public ScrapIntermediate scrapIntermediate; // just a plain empty class with an is true method
@PUT
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
public void putJson(@PathParam("id") String id) {
log.info("Putting some json at " + id);
if (scrapIntermediate == null) {
log.info("scrapIntermediate is null...");
}
if (jsonTestService != null) {
jsonTestService.sendUpdate();
} else {
log.info("jsonTestService is null...");
}
}
}
Bất kỳ ý tưởng?
Cập nhật:
web.xml (Jersey)
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>EDAS</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Các yêu cầu web được ánh xạ tới lớp Jersey này như thế nào? Âm thanh như Spring khởi tạo một thể hiện của lớp này, nhưng Jersey tạo ra một thể hiện khác để sử dụng trong việc xử lý các yêu cầu. –
Tôi đã cập nhật câu hỏi để hiển thị phần Jersey của tệp web.xml của tôi. Đó là nơi duy nhất tôi đề cập đến Jersey. – zclark
Và đã được giải quyết. Vấn đề nằm với Maven và nhập khẩu Jersey của tôi khiến cả hai bối cảnh mùa xuân 2.5.6 và 3.0.5 được nhập khẩu. Điều này gây ra xung đột chú thích và dẫn đến các instantiations khác nhau của cùng một lớp. Sẽ đăng nó như là một câu trả lời một khi nó cho phép tôi ... Cảm ơn bạn cho sự hiểu biết Matt. – zclark