This has been fixed, the problem is instead of using SpringComponent, just use
org.restlet.Application directly and changing property correspondly.
> I am using restlet 2.1RC3 and using spring to manage beans. so my spring
> restful config looks like this:
>
> <bean id="xxxComponent" class="org.restlet.ext.spring.SpringComponent">
> <property name="name" value="xxx" />
> <property name="description" value="xxx" />
> <property name="owner" value="xxx" />
> <property name="author" value="xxx" />
> <property name="defaultTarget" ref="xxx" />
> <property name="statusService" ref="xxxStatusService" />
> </bean>
> <bean name="drs-restfulRouter"
> class="org.restlet.ext.spring.SpringBeanRouter" />
> <bean name="/xxx" class="ABCServerResource"
> scope="prototype" autowire="byName" />
>
> // this is the status bean injected in xxxComponent
> public class xxxStatusService extends StatusService {
>
> @Override
> public Status getStatus(Throwable throwable, Request request, Response
> response) {
> log.warn("===============================get status");
> return Status.CLIENT_ERROR_UNAUTHORIZED;
> }
>
> @Override
> public Representation getRepresentation(Status status, Request request,
> Response response) {
> log.warn("============================get presentation");
> return super.getRepresentation(status, request, response);
> }
> }
>
> // This is the server resource
>
> public interface ABCResource {
>
> @Get
> String doGet();
> }
>
> public class ABCServerResource implements ABCResource {
> /**
> * {@inheritDoc}
> */
> @Override
> public String doGet() {
> throw new RuntimeException("ah");
> }
> }
>
> It seems that when exception is thrown, only getRepresentation is invoked,
> but not getStatus.
>
> I dig into the source code, found that two statusService bean have been
> created.
>
> In ServerResource line 248, Status status =
> getStatusService().getStatus(throwable, this); this getStatusService() return
> a instance which is of class StatusService.
> in the getStatusService() mehtod:
> StatusService result = null;
>
> result = getApplication().getStatusService();
>
> if (result == null) {
> result = new StatusService();
> }
>
> return result;
> it get statusService from application. but I am using component, so it
> doesn't invoke my overrided getStatus();
>
> BUT in StatusFilter line 252, Representation result =
> getStatusService().getRepresentation(status, request, response);
> getStatusService() return my subclass of StatusService, that's why
> getRepresentation is invoked.
>
>
> Is this a bug in the framework? if not, how can I get my method invoked?
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2941749