Jersey: 1.12 mùa xuân: 3.11 JDK: 1.6.0_35 Tomcat: 6..0.33Jersey ;: Đăng ký Tiêm Instances ExceptionMapper qua SpringServlet
Tôi cố gắng để đăng ký trường ExceptionMapper cho một servlet Jersey được khởi tạo bởi một thùng chứa Spring IoC trong ngữ cảnh của một SpringServlet, và đang chạy vào olde cũ "Phạm vi của lớp thành phần X phải là một ngoại lệ" singleton trong quá trình khởi tạo servlet Jersey. Tôi không ở vị trí để đăng mã thực tế vào thời điểm này, vì vậy tôi sẽ cung cấp cho các yếu tố cần thiết để thực hiện để xem có điều gì đó rõ ràng nhảy vào một ai đó hay không hoặc tôi có thể chỉ ra một số tài liệu mà tôi có bỏ lỡ.
Các ExceptionMapper dụ về cơ bản là như sau:
// ... package definitions omitted ...
@Provider
@Singleton
public class MyExceptionMapper
implements ExceptionMapper<MyException>
{
// ... injected attributes omitted ...
@Override
public Response toResponse(MyException exception)
{
// ... specific handling logic omitted ...
return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build();
}
}
Định nghĩa bean trong applicationContext.xml là như sau, mặc định là Singleton phạm vi (và thêm một phạm vi specifier rõ ràng dường như không thay đổi hành vi):
<bean id="myExceptionMapper" class="my.package.MyExceptionMapper" />
các mùa xuân bối cảnh loader nghe và cấu hình SpringServlet trong web.xml cơ bản soạn sẵn, và servlet sẽ được tải, khởi tạo và hoạt động đúng với bơm các thuộc tính khác khi đậu defin ition cho MyExceptionMapper được nhận xét trong tệp applicationContext.xml. Nhưng khi định nghĩa bean có mặt trong applicationContext.xml, tôi nhận đăng tin nhắn đến ảnh hưởng của:
SpringProviderFactory - Registering Spring bean, myExpectionMapper, of type my.package.MyExceptionMapper as a provider class
SpringProviderFactory - Registering Spring bean, myServiceController, of type my.package.MyServiceController as a root resource class
... other root resource classes loading ...
SpringServlet - Exception occurred when initialization
java.lang.RuntimeException: The scope of the component class my.package.MyExceptionMapper must be a singleton
at som.sun.jersey.core.spi.component.ioc.IoCProviderFactory.wrap(...)
Tôi đã thử đặt MyExceptionMapper trong hệ thống phân cấp gói quét để được chọn của các SpringServlet trong quá trình khởi, và trong một phân cấp gói riêng biệt và kết quả không thay đổi.
Bất kỳ hỗ trợ hoặc hướng dẫn nào về điều này sẽ được đánh giá cao.
Bạn đã kiểm tra lại rằng bạn đang sử dụng javax. inject.Singleton và javax.inject chú thích được kích hoạt trong mùa xuân? –