Thanks Jorge for the follow-up with your solution!
I'm not sure why you get two GET calls. Can you try with a regular HTTP
client such as POSTMAN?

Jérôme



On Fri, May 30, 2014 at 9:00 AM, Jorge Gallardo <jorgeagalla...@gmail.com>
wrote:

> Thanks Jerome for the prompt reply.
>
> So after I got some rest I could address this with a clearer mind. I
> resolved it this way:
>
>
> *spring xml:*
>
> <bean id="restletComponent" class="org.restlet.ext.spring.SpringComponent"
> >
>
>  <!-- the defaultTarget for this component is our Restlet Application -->
>
>  <property name="defaultTarget" ref="restletApplication" />
>
>  <property name="clientsList">
>
>  <list>
>
>   <value>CLAP</value>
>
>   <value>FILE</value>
>
>  </list>
>
>  </property>
>
> </bean>
>
>
>  <bean id="restletApplication" class=
> "org.restlet.ext.wadl.WadlApplication"
>
>  scope="singleton">
>
>  <!-- all requests to this Application will be sent to myPath2BeanRouter
> -->
>
>  <property name="name" value="REST API" />
>
>  <!--property name="inboundRoot" ref="authenticator" / -->
>
>  <property name="inboundRoot" ref="springRouter" />
>
>  <property name="encoderService.enabled" value="true" />
>
>  </bean>
>
>
>  <!-- Reslet component's Context bean -->
>
> * <bean id="restletComponent.context"*
>
> * class="org.springframework.beans.factory.config.PropertyPathFactoryBean"
> />*
>
>
>  * <bean id="restletContext" factory-bean="restletComponent.context"*
>
> * factory-method="createChildContext" scope="prototype" />*
>
>
> * <bean name="/images" autowire="byName" scope="prototype"*
>
> * class="com.zebra.rest.directory.ImagesDirectory">*
>
> * <constructor-arg ref="restletContext" />*
>
> * </bean>*
>
>
> <!-- Singleton instance of this class -->
>
>  <bean name="springRouter" class="org.restlet.ext.spring.SpringBeanRouter"
> />
>
>
> and then I created a simple Java class extending from Directory
>
> import org.restlet.Context;
>
> import org.restlet.resource.Directory;
>
>
> public class ImagesDirectory extends Directory {
>
>
> public ImagesDirectory(Context context) {
>
>  super(context, "clap://class/images");
>
> }
>
> }
>
>
> And Voilá! it worked.
>
> The only funny thing I see is double logging:
>
> May 30, 2014 10:59:46 AM org.restlet.engine.log.LogFilter afterHandle
>
> INFO: 2014-05-30 10:59:46 0:0:0:0:0:0:0:1 - 0:0:0:0:0:0:0:1 9091 GET
> /images/zebra_logo.png - 200 - 0 15 http://localhost:9091 Mozilla/5.0
> (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko)
> Chrome/35.0.1916.114 Safari/537.36 -
>
> May 30, 2014 10:59:46 AM org.restlet.engine.log.LogFilter afterHandle
>
> INFO: 2014-05-30 10:59:46 0:0:0:0:0:0:0:1 - 0:0:0:0:0:0:0:1 9091 GET
> /images/zebra_logo.png - 200 - 0 1 http://localhost:9091 Mozilla/5.0
> (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko)
> Chrome/35.0.1916.114 Safari/537.36 -
>
> Could be related to the clap protocol? Other than that, I debugged it and
> looks it is working as expected, nothing strange under the sun.
>
>
> Thanks!
>
> -JG
>
>
>
>
> On Thu, May 29, 2014 at 4:15 PM, Jerome Louvel <jlou...@restlet.com>
> wrote:
>
>> Hi Jorge,
>>
>> Normally, you shouldn't embed a Directory inside a ServerResource but
>> directly attach it to your SpringBeanRouter.
>> To not have to use the {imageId} path variable (for your file names I
>> guess), you can set the route's matchingMode to Template.STARTS_WITH. I'm
>> not sure exactly how to do it with SpringBeanRouter, but with a regular
>> router you would do this:
>>
>>     myRouter.attach("/v1/images/",
>> myDirectory).setMatchingMode(Template.STARTS_WITH).
>>
>> Thanks,
>> Jerome
>> --
>> http://restlet.com
>> @jlouvel <http://twitter.com/#!/jlouvel>
>>
>>
>>
>>
>> On Thu, May 29, 2014 at 1:48 PM, Jorge Gallardo <jorgeagalla...@gmail.com
>> > wrote:
>>
>>> Hello all,
>>>
>>> Im trying to serve static content from the filesystem but I cant. I was
>>> able to do it with a plain and simple Reslet application but not using
>>> SpringBeanRouter.
>>> Here is the code:
>>>
>>>
>>> @Component("/v1/images/{imageId}")
>>>
>>> @Scope("prototype")
>>>
>>> public class ImagesResource extends DirectoryServerResource {
>>>
>>> private String imageId;
>>>
>>> @Override
>>>
>>> public void doInit() throws ResourceException {
>>>
>>>  Directory directory = new Directory(getContext(),
>>>
>>>  "file:///path/images");
>>>
>>>  getRequestAttributes().put("org.restlet.directory", directory);
>>>
>>>  super.doInit();
>>>
>>> }
>>>
>>> }
>>> And here the xml mapping:
>>>
>>>  <bean id="restletComponent" class=
>>> "org.restlet.ext.spring.SpringComponent">
>>>
>>>  <property name="defaultTarget" ref="restletApplication" />
>>>
>>>  <property name="clientsList">
>>>
>>>  <list>
>>>
>>>   <value>CLAP</value>
>>>
>>>   <value>FILE</value>
>>>
>>>  </list>
>>>
>>>  </property>
>>>
>>> </bean>
>>>
>>> <bean id="restletApplication" class=
>>> "org.restlet.ext.wadl.WadlApplication"
>>>
>>>  scope="singleton">
>>>
>>>  <property name="name" value="REST API" />
>>>
>>>  <property name="inboundRoot" ref="ServerHeaderFilter" />
>>>
>>>  <property name="encoderService.enabled" value="true" />
>>>
>>> </bean>
>>>
>>>  <bean name="springRouter" class="org.restlet.ext.spring.SpringBeanRouter"
>>> />
>>>
>>>
>>> Im facing two issues:
>>>
>>> 1- the URL mapping. If i use "/v1/images", SpringBeanRouter does not
>>> match it, so I went for "/v1/images/{imageId}"
>>>
>>> 2- If i dont put the Directory in the map, I get a NullPointerException.
>>> It looks odd, is there any other/better way of doing it?
>>>
>>> Thanks!
>>> --
>>> Jorge Gallardo
>>> ----------------------------------------
>>> jorgeagalla...@gmail.com
>>>
>>
>>
>
>
> --
> Jorge Gallardo
> ----------------------------------------
> jorgeagalla...@gmail.com
>

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

Reply via email to