Я работаю над проектом, у которого есть весна mvc 2.5. *. Я интегрировал RESTeasy для создания конечных точек отдыха. Я определил класс контроллера с помощью @Controler. У меня есть bean-компонент, который должен быть введен в этот контроллер, но кажется, что он не внедряется, поэтому он генерирует исключение нулевого указателя, когда переменная bean-компонента используется в методах отдыха контроллера.
Я добавил их в Интернет. xml
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.package.controller.MyApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Пользовательский класс I расширен от класса resteasy для определения пути приложения:
@ApplicationPath("/rest")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<>();
// register root resource
classes.add(EmployeeController.class);
return classes;
}
}
У меня есть сервлет. xml, который определил mvc Контроллер EJB работает нормально: например:
<bean name="/testDetail.html" class="com.test.package.controller.TestDetailController" parent="baseController">
<property name="testService" ref="testService"/>
</bean>
Мой класс Controller выглядит следующим образом:
@Controller
@Path("/employee")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class EmployeeController {
private static final Log LOG = LogFactory.getLog(EmployeeController.class);
private EmployeeService employeeService; // This doesn't get initiated.
@PUT
@Path("/update/{empId}")
public Response updateEmp(@PathParam("empId") Long empId, EmpRequest request) {
Response response = null;
employeeService.update(request); // NULL POINTER THROWN HERE, employeeService is null
return response;
}
public EmployeeService getEmployeeService () {
return employeeService ;
}
public void serEmployeeService (EmployeeService employeeService ) {
this.employeeService = employeeService ;
}
}
Здесь я добавил еще один компонент в сервлет. xml as,
<bean id="employeeController " class="com.test.package.controller.EmployeeController">
<property name="employeeService " ref="employeeService "/>
</bean>
В отдельном компоненте xml employeeService определен. Просто это не отразится на компоненте employeeController. Я не уверен, создан ли даже компонент employeeController или нет. Но я могу успешно позвонить на конечную точку. инициализация компонента работает нормально, если поместить компонент employeeService в контроллер MVC. Например:
<bean name="/testDetail.html" class="com.test.package.controller.TestDetailController" parent="baseController">
<property name="employeeService " ref="employeeService "/>
</bean>
Но не в RestController. Любая идея об этом поведении. Я скучаю по любой конфигурации здесь.