I've done a simple test (with Jetty) and it works fine.

Client:

@Test
    public void testBookWithComplexEncoding() throws Exception {
        BookStore store = JAXRSClientFactory.create("http://localhost:"; +
PORT, BookStore.class);

        String complex1 = "70%2F70%5C70.v1.0";
        Book book = store.getBookComplexEncoded(complex1, 3L);
        assertEquals(3L, book.getId());
        assertEquals(complex1, book.getName());

        String complex2 = "70%2F%2F70%5C70.v1.0";
        book = store.getBookComplexEncoded(complex2, 3L);
        assertEquals(3L, book.getId());
        assertEquals(complex2, book.getName());
    }

Relevant server code:

@GET
    @Path("/books/encoded/{complex}")
    public Book getBookComplexEncoded(@Encoded @PathParam("complex") String
complex,
                                      @MatrixParam("optionId") Long id) {
        return new Book(complex, id);
    }

I'm just using @Encoded to capture the exact sequence in the original
form...

Can you please explain how to configure those two properties in Tomcat ?
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true

What would really help of you could download CXF source and put a breakpoint
in ServletController and JAXRSInInterceptor

It is possible there is a flaw somewhere exposed on Tomcat only

thanks, Sergey

On Wed, Mar 9, 2011 at 10:45 AM, Sergey Beryozkin <[email protected]>wrote:

> Hi
>
> Forwarding to the users list...
>
> I do suspect it's the ServletController's issue to do with the way the
> handles matrix parameters
>
> Do you actual request URIs having matrix params like this :
>
> /service/v1/device/70%2F%2F70%5C70.v1.0;optionId=1
>
> ?
>
> thanks, Sergey
>
>
> On Tue, Mar 8, 2011 at 6:42 PM, kh <[email protected]> wrote:
>
>> I get this message when I have two encodes /s in the path %2F%2F
>> WARNING: .No root resource matching request path
>> /service/v1/device/70%2F%2F70%5C70.v1.0 is found.
>> However:
>> /service/v1/device/70%2F70%5C70.v1.0
>> works fine.
>>  I'm using cxf 2.2.3
>>
>> I have
>>   org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
>>   org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true
>> set.
>>
>> My annotations are:
>>
>>
>> @Path("/v1/device")
>> public class Device extends com.netflix.customer.eds.Device {
>>
>>    @GET
>>    @Path("/{esn}")
>>    @Consumes("application/xml")
>>    @Produces("application/xml")
>>    /* for error cases only */
>>    @Transactional(rollbackFor = {Throwable.class})
>>    public Response get(@Context HttpServletRequest request,
>>                        @PathParam("esn") String esn,
>>                        @MatrixParam("optionId") Long optionId)
>>
>> I gt the same response weather or not I include the matrix parameter.
>>
>> Am I missing something?
>>
>>

Reply via email to