Hi Kevin and Eric,
 
I've added a check in Finder to make it work even if targetClass is null. This 
is a temporary workaround that will need to be improved in order to make 
SpringFinder support the new resource API.
 
BTW, this support will be cleaner that with the Resource class because 
ServerResource has only one default constructor.
 
Best regards,
Jerome Louvel
--
Restlet ~ Founder and Lead developer ~  <http://www.restlet.org/> 
http://www.restlet.org
Noelios Technologies ~ Co-founder ~  <http://www.noelios.com/> 
http://www.noelios.com
 

  _____  

De : Kevin Conaway [mailto:kevin.cona...@gmail.com] 
Envoyé : mercredi 8 avril 2009 14:20
À : discuss@restlet.tigris.org
Objet : Re: Spring + Restlet 1.2-SNAPSHOT, NullPointerException


Hi Jerome,

There is a bug specifically with the SpringFinder class.� The parent Finder was 
refactored such that it now checks to see that the "targetClass" property is an 
instance of Handler.� Previous versions of the class did not depend on 
targetClass to be non-null.

Since the SpringFinder only deals with the createResource() method, the 
targetClass property is always null.

Eric, as a temporary workaround, you can create your own SpringFinder class 
that overrides getTargetClass() to always return Resource.class.� Or you can 
set the targetClass property on all your SpringFinder instances.

Kevin


On Tue, Apr 7, 2009 at 1:35 PM, Jerome Louvel <jerome.lou...@noelios.com> wrote:


Hi Eric,
�
Here is a sample configuration attached. You can check the source code here:
http://restlet.tigris.org/source/browse/restlet/trunk/modules/org.restlet.test/src/org/restlet/test/ext/spring/

�


Best regards,
Jerome Louvel
--
Restlet ~ Founder and Lead developer ~  <http://www.restlet.org/> 
http://www.restlet.org
Noelios Technologies ~ Co-founder�~  <http://www.noelios.com/> 
http://www.noelios.com
�

  _____  

De�: Eric Hough [mailto:k2e...@gmail.com] 
Envoy��: vendredi 3 avril 2009 21:32
��: discuss@restlet.tigris.org
Objet�: Spring + Restlet 1.2-SNAPSHOT, NullPointerException


I've been having trouble getting Spring to play nice with Restlet (I'm 
experienced with Spring, a newbie with Restlet, so please bear with me!). Using 
Spring 2.5.6 and Restlet 1.2-SNAPSHOT.

I want to define a resource called "uniq" and map /uniq to my UniqResource bean 
(extends Resource). Simple, yeah? When I browse to http://localhost:8182/uniq, 
I get the following stack trace:

Apr 3, 2009 10:54:19 AM org.restlet.engine.StatusFilter getStatus
SEVERE: Unhandled exception or error intercepted
java.lang.NullPointerException
at java.lang.Class.isAssignableFrom(Native Method)
at org.restlet.resource.Finder.handle(Finder.java:391)
at org.restlet.routing.Filter.doHandle(Filter.java:156)
at org.restlet.routing.Filter.handle(Filter.java:201)
at org.restlet.routing.Router.handle(Router.java:520)
at org.restlet.routing.Filter.doHandle(Filter.java:156)
at org.restlet.routing.Filter.handle(Filter.java:201)
at org.restlet.routing.Router.handle(Router.java:520)
at org.restlet.routing.Filter.doHandle(Filter.java:156)
at org.restlet.routing.Filter.handle(Filter.java:201)
at org.restlet.routing.Router.handle(Router.java:520)
at org.restlet.routing.Filter.doHandle(Filter.java:156)
at org.restlet.engine.StatusFilter.doHandle(StatusFilter.java:153)
at org.restlet.routing.Filter.handle(Filter.java:201)
at org.restlet.routing.Filter.doHandle(Filter.java:156)
at org.restlet.routing.Filter.handle(Filter.java:201)
at org.restlet.engine.ChainHelper.handle(ChainHelper.java:126)
at org.restlet.Component.handle(Component.java:724)
at org.restlet.Server.handle(Server.java:355)
at org.restlet.engine.ServerHelper.handle(ServerHelper.java:71)
at org.restlet.engine.http.HttpServerHelper.handle(HttpServerHelper.java:149)
at 
org.restlet.engine.http.StreamServerHelper$ConnectionHandler.run(StreamServerHelper.java:89)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Apr 3, 2009 10:54:19 AM org.restlet.engine.LogFilter afterHandle
INFO: 2009-04-03 10:54:19 127.0.0.1 - - 8182 GET /uniq - 500 365 - 39 
http://localhost:8182 Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) 
Gecko/2009032711 Ubuntu/8.10 (intrepid) Firefox/3.0.8 -


Here's my applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd";>

<bean id="springComponent" class="org.restlet.ext.spring.SpringComponent" 
init-method="start" destroy-method="stop">
<property name="server">
<bean class="org.restlet.ext.spring.SpringServer">
<constructor-arg value="http" />
<constructor-arg value="8182" />
</bean>
</property>
<property name="defaultTarget" ref="springRouter" />
</bean>

<bean id="springRouter" class="org.restlet.ext.spring.SpringBeanRouter" />

<bean name="/uniq" autowire="byName" id="uniqResource" 
class="org.example.uniq.rest.UniqResource" scope="prototype">
<property name="nextUniqDao" ref="nextUniqDao" />
</bean>

</beans>


And UniqResource.java:

package org.example.uniq.rest;

import java.io.StringReader;

import org.example.uniq.dao.NextUniqDao;

import org.restlet.data.MediaType;
import org.restlet.data.Status;
import org.restlet.representation.ReaderRepresentation;
import org.restlet.representation.Representation;
import org.restlet.representation.Variant;
import org.restlet.resource.Resource;
import org.restlet.resource.ResourceException;

public class UniqResource extends Resource {

private NextUniqDao nextUniqDao;

public final void setNextUniqDao(NextUniqDao nextUniqDao) {
this.nextUniqDao = nextUniqDao;
}

/** @see 
org.restlet.resource.Resource#represent(org.restlet.representation.Variant) */
public Representation represent(Variant variant) throws ResourceException {
Long next = this.nextUniqDao.pop();
this.getResponse().setStatus(Status.SUCCESS_OK);
return new ReaderRepresentation(new StringReader(next.toString()), 
MediaType.TEXT_PLAIN);
}

}

Clearly I'm missing something basic, but I can't figure it out. Any help would 
be greatly appreciated!

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1596815

Reply via email to