Hi,

as a workaround, you can still override the
TunnelService#createInboundFilter(Context) method in order to return an
instance your own subclass of TunnelFilter. especially, you can override
the "beforeHandle" method:

    @Override
    public int beforeHandle(Request request, Response response)
        if (getTunnelService().isExtensionsTunnel()) {
            processExtensions(request);
        }

        return super.beforeHandle(request, response) ;
    }

where processExtensions could be as follow:
Method method = request.getMethod();
        if (tunnelService.isPreferencesTunnel()) {
            final Reference resourceRef = request.getResourceRef();

            if (resourceRef.hasExtensions()) {
                final ClientInfo clientInfo = request.getClientInfo();
                boolean encodingFound = false;
                boolean characterSetFound = false;
                boolean mediaTypeFound = false;
                boolean languageFound = false;
                String extensions = resourceRef.getExtensions();

                // Discover extensions from right to left and stop at the
first
                // unknown extension. Only one extension per type of
metadata is
                // also allowed: i.e. one language, one media type, one
                // encoding, one character set.
                while (true) {
                    final int lastIndexOfPoint =
extensions.lastIndexOf('.');
                    final String extension = extensions
                            .substring(lastIndexOfPoint + 1);
                    final Metadata metadata = getMetadata(extension);

                    if (!mediaTypeFound && (metadata instanceof MediaType))
{
                        updateMetadata(clientInfo, metadata);
                        mediaTypeFound = true;
                    } else if (!languageFound && (metadata instanceof
Language)) {
                        updateMetadata(clientInfo, metadata);
                        languageFound = true;
                    } else if (!characterSetFound
                            && (metadata instanceof CharacterSet)) {
                        updateMetadata(clientInfo, metadata);
                        characterSetFound = true;
                    } else if (!encodingFound && (metadata instanceof
Encoding)) {
                        updateMetadata(clientInfo, metadata);
                        encodingFound = true;
                    } else {
                        // extension do not match -> break loop
                        break;
                    }
                    if (lastIndexOfPoint > 0) {
                        extensions = extensions.substring(0,
lastIndexOfPoint);
                    } else {
                        // no more extensions -> break loop
                        extensions = "";
                        break;
                    }
                }

                // Update the extensions if necessary
                if (encodingFound || characterSetFound || mediaTypeFound
                        || languageFound) {
                    resourceRef.setExtensions(extensions);
                    extensionsModified = true;
                }
            }


Best regards,
Thierry Boileau

Hello Lee,
>
> Sorry I misunderstood your question. You're right, the current
> implementation filter the extensions only for GET and HEAD requests... That
> sounds quite restrictive as content negotiation happens also for the other
> kind of requests.
> I've opened an issue for that :
> https://github.com/restlet/restlet-framework-java/issues/582
>
> Best regards,
> Thierry Boileau
>
>
>
> Thanks for the response.  I have no trouble getting the right format by
>> setting the Accept header appropriately.
>>
>> Instead, I'm asking about setExtensionsTunnel.  If I enable this, I don't
>> have to set the Accept header, I can just set a file extension at the end
>> of the URL path.  Works great with @Get, but not with @Post.
>>
>> ------------------------------------------------------
>>
>> http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2958714
>>
>
>

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

Reply via email to