> I haven't dug into this code, but I suspect you aren't manipulating
> References properly. I advise printing out the intermediate steps of your
> Reference computation to see where it goes wrong.
That's just it, I don't think it is even selecting my Redirector as the target
for the endpoint, b/c it is not even calling getTargetRef due to the child
endpoints. Is there something else on Redirector or in my attachment I should
be overriding so that it stops trying to match once it resolves the parent?
>
> Also, the template argument to Redirector is ignored if you override
> getTargetRef.
>
Hmm, that doesn't seem to be the case for me, since my code is almost an exact
copy the parent class.
> --tim
>
> On Sat, Apr 27, 2013 at 6:03 PM, Grant <gsingers at apache dot org> wrote:
>
> > > I don't understand what you mean by "the handling of the {rr} template".
> > > The approach I suggested, overriding getTargetRef, ignores the template
> > > argument entirely.
> > >
> >
> > In my old code, I had:
> > URI = hardcoded URI to resource
> > Redirector redir = new Redirector(router.getContext(), URI + "{rr}",
> > Redirector.MODE_SERVER_OUTBOUND);
> > router.attach("", redir, Template.MODE_STARTS_WITH);
> >
> > So, when I pass in http://foo:port/a/b/c, it redirects to URI/a/b/c
> >
> > In my new code, I pass in the target template simply as {rr} and then iin
> > the getTargetRef, I do:
> > protected Reference getTargetRef(Request request, Response response) {
> > URI serviceURI = serviceLocator.getServiceURI(service); //THIS looks
> > up the location of the service
> > // Create the template
> > Template rt = new Template(this.targetTemplate);
> > rt.setLogger(getLogger());
> >
> > // Return the formatted target URI
> > if (new Reference(this.targetTemplate).isRelative()) {
> > // Be sure to keep the resource's base reference.
> > //Reference baseRef = new Reference(serviceURI.uri);
> > if (log.isInfoEnabled()) {
> > log.info("dynRedir from {} to {}", request.getResourceRef(),
> > serviceURI.uri);
> > }
> > String format = rt.format(request,
> > response);
> > try {
> > return new Reference(new URI(serviceURI.uri.toString() + format));
> > } catch (URISyntaxException e) {
> > log.error("Exception", e);
> > throw new RuntimeException(e);
> > }
> > }
> >
> > return new Reference(rt.format(request, response));
> > }
> > ///////////////////
> >
> > I attach my DynamicRedirector at, for example, "/a". When I pass in
> > "http://foo:port/a/b/c", I want it to select my DynamicRedirector due to
> > the "/a" (I'm using STARTS_WITH mode) part and then redirect to the target
> > by passing along "b/c" (i.e. the {rr} part) such that the new URL would be
> > something like "http://dynamicHost:port/b/c", based on what my
> > serviceLocator returns. Like I said, it works great if I'm just matching
> > at "/a", but it doesn't handle the "/b/c" part. AFAICT, the handle()
> > methods in Restlet are continuing to resolve down to the last endpoint
> > (i.e. "b/c") even though it has a match at "/a".
> >
> > I will see if I can work up a standalone test example to demonstrate it.
> >
> > ------------------------------------------------------
> >
> > http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3054458
> >
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3054489