You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Martin Grotzke <ma...@javakaffee.de> on 2007/06/11 23:13:50 UTC

T5 encoding issue

Hi,

I have currently an encoding issue, but am not really sure what's
the reason for this.

I have an url that contains a url encoded german umlaut (ü) in UTF-8
and looks like the following:

http://localhost:8080/app/search/%C3%BCbel (the %C3%BC represents the ü
in UTF-8, this url is created by
componentResources.createPageLink( "search", new Object[]{ _query } )
in the submit method of the search page)

Now, when I look in the onActivate(string) method, the string is not
"übel" but it's "?bel", both printed via logging as when I inspect the
variable during debugging.

AFAICS the created url from the page link is correct in terms of utf-8
encoding, but the parsed query string seems to be wrong, as it contains
only the "?"...

We have the following in our AppModule:

    public void contributeRequestHandler(
            OrderedConfiguration<RequestFilter> configuration,
            @InjectService("TimingFilter")
            final RequestFilter filter, @InjectService("Utf8Filter")
            final RequestFilter utf8Filter ) {
        configuration.add( "Timing", filter );
        configuration.add( "Utf8Filter", utf8Filter ); // handle UTF-8
    }

    public RequestFilter buildUtf8Filter(
            @InjectService("RequestGlobals")
            final RequestGlobals requestGlobals ) {
        return new RequestFilter() {
            public boolean service( Request request, Response response, RequestHandler handler ) throws IOException {
                requestGlobals.getHTTPServletRequest().setCharacterEncoding( "UTF-8" );
                return handler.service( request, response );
            }
        };
    }

    public static PageResponseRenderer decoratePageResponseRenderer(
            @InjectService("PageMarkupRenderer")
            final PageMarkupRenderer markupRenderer,
            @InjectService("MarkupWriterFactory")
            final MarkupWriterFactory markupWriterFactory, final Object delegate ) {

        return new PageResponseRenderer() {
            public void renderPageResponse( Page page, Response response )
                    throws IOException {
                MarkupWriter writer = markupWriterFactory.newMarkupWriter();
                markupRenderer.renderPageMarkup( page, writer );
                PrintWriter pw = response
                        .getPrintWriter( "text/html; charset=UTF-8" );
                writer.toMarkup( pw );
                pw.flush();
            }
        };
    }

Is there anything wrong, or what am I missing?

Thanx && cheers,
Martin



Re: T5 encoding issue

Posted by Ulrich Stärk <ul...@spielviel.de>.
I think you should re-post this issue as another topic so that people notice it. At least in my mail 
client, this topic is some way down now :)

Uli

Martin Grotzke schrieb:
> On Wed, 2007-06-20 at 22:02 +0200, Martin Grotzke wrote:
>> Hi,
>>
>> this is an urgent and important issue for us. Can anybody help
>> with this? Howard?
>>
>> As I wrote below: request.getServletPath() (or request.getPath())
>> already provides the decoded path.
>> a) Should request.getPath() provide the encoded path, or
>> b) should the additional decoding (in
>>    PageRenderDispatcher.convertActivationContext) be skipped?
> 
> An excerpt from the servlet spec 2.4 p. 243:
> 
> getServletPath()
> [...]
> Returns: a String containing the name or path of the servlet being called,
> as specified in the request URL, decoded, or an empty string if the servlet
> used to process the request is matched using the “/*” pattern.
> 
> So why is additional decoding done?
> 
> Cheers,
> Martin
> 
> 
>> Is anything else the problem? E.g. might the problem be caused
>> by commons URLCodec?
>>
>> Thanx in advance,
>> cheers,
>> Martin
>>
>>
>> On Mon, 2007-06-18 at 12:20 +0200, Martin Grotzke wrote:
>>> On Sun, 2007-06-17 at 23:24 +0200, Martin Grotzke wrote:
>>>> I just stepped through the sources to see where the URI get's
>>>> decoded to the activation context arguments, and found that the
>>>> o.a.t.internal.services.PageRenderDispatcher.dispatch invokes
>>>> convertActivationContext with the path info to convert it to
>>>> the activation context args.
>>>>
>>>> convertActivationContext uses TapestryInternalUtils.urlDecode
>>>> which invokes URLCodec.decode. It seems that this causes the
>>>> problem, but I cannot say what exactly is the reason.
>>>>
>>>> When I remove the invocation of TapestryInternalUtils.urlDecode
>>>> everything's fine...
>>> Just to provide more info:
>>> TapestryInternalUtils.urlDecode is invoked with the already decoded
>>> context parameter, e.g. "trüb" for the urlencoded string "tr%C3%BCb".
>>>
>>> This parameter is read from request.getServletPath(), which is already
>>> /search/trüb. So it tries to decode the already decoded string, which
>>> then fails.
>>>
>>> What is the problem here? Is it that request.getServletPath() provides
>>> the already decoded string, or is the problem that the decoding is done
>>> additionally by T5? Or what else?
>>>
>>> Thanx && cheers,
>>> Martin
>>>
>>>
>>>> Any help with this issue?
>>>>
>>>> Thanx && cheers,
>>>> Martin
>>>>
>>>>
>>>> On Sun, 2007-06-17 at 23:01 +0200, Martin Grotzke wrote:
>>>>> On Tue, 2007-06-12 at 10:38 +0200, Ulrich Stärk wrote:
>>>>>> In case you are using Tomcat try adding URIEncoding="UTF-8" to your
>>>>>> connector definition in server.xml.
>>>>> I just tried that, but it does not solve the problem.
>>>>>
>>>>> I have added a servlet filter that prints the requested uri to
>>>>> the std out, just to see what is the input for T5.
>>>>>
>>>>> The URIEncoding="UTF-8" does not change what's printed by the
>>>>> filter, but the argument that's passed to my page class' onActivate
>>>>> is different.
>>>>>
>>>>> Without URIEncoding="UTF-8":
>>>>>
>>>>> [INFO ] 2007-06-17 22:52:37,956 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
>>>>> - uri: /shopping24-shop/search/tr%C3%BCb
>>>>> - path: null
>>>>>
>>>>> [INFO ] 2007-06-17 22:52:51,303 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
>>>>> Got invoked args tr??b
>>>>>
>>>>> With URIEncoding="UTF-8":
>>>>>
>>>>> [INFO ] 2007-06-17 22:54:33,398 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
>>>>> uri: /shopping24-shop/search/tr%C3%BCb
>>>>>
>>>>> [INFO ] 2007-06-17 22:54:44,620 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
>>>>> Got invoked args tr?b
>>>>>
>>>>>
>>>>> Is there anything else that I could do to get the correct
>>>>> decoding of the request parameters / uri?
>>>>>
>>>>> Thanx && cheers,
>>>>> Martin
>>>>>
>>>>>
>>>>>
>>>>>> Uli
>>>>>>
>>>>>> On Mo, 11.06.2007, 23:13, Martin Grotzke sagte:
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have currently an encoding issue, but am not really sure what's
>>>>>>> the reason for this.
>>>>>>>
>>>>>>> I have an url that contains a url encoded german umlaut (ü) in UTF-8
>>>>>>> and looks like the following:
>>>>>>>
>>>>>>> http://localhost:8080/app/search/%C3%BCbel (the %C3%BC represents the ü
>>>>>>> in UTF-8, this url is created by
>>>>>>> componentResources.createPageLink( "search", new Object[]{ _query } )
>>>>>>> in the submit method of the search page)
>>>>>>>
>>>>>>> Now, when I look in the onActivate(string) method, the string is not
>>>>>>> "übel" but it's "?bel", both printed via logging as when I inspect the
>>>>>>> variable during debugging.
>>>>>>>
>>>>>>> AFAICS the created url from the page link is correct in terms of utf-8
>>>>>>> encoding, but the parsed query string seems to be wrong, as it contains
>>>>>>> only the "?"...
>>>>>>>
>>>>>>> We have the following in our AppModule:
>>>>>>>
>>>>>>>     public void contributeRequestHandler(
>>>>>>>             OrderedConfiguration<RequestFilter> configuration,
>>>>>>>             @InjectService("TimingFilter")
>>>>>>>             final RequestFilter filter, @InjectService("Utf8Filter")
>>>>>>>             final RequestFilter utf8Filter ) {
>>>>>>>         configuration.add( "Timing", filter );
>>>>>>>         configuration.add( "Utf8Filter", utf8Filter ); // handle UTF-8
>>>>>>>     }
>>>>>>>
>>>>>>>     public RequestFilter buildUtf8Filter(
>>>>>>>             @InjectService("RequestGlobals")
>>>>>>>             final RequestGlobals requestGlobals ) {
>>>>>>>         return new RequestFilter() {
>>>>>>>             public boolean service( Request request, Response response,
>>>>>>> RequestHandler handler ) throws IOException {
>>>>>>>                 requestGlobals.getHTTPServletRequest().setCharacterEncoding(
>>>>>>> "UTF-8" );
>>>>>>>                 return handler.service( request, response );
>>>>>>>             }
>>>>>>>         };
>>>>>>>     }
>>>>>>>
>>>>>>>     public static PageResponseRenderer decoratePageResponseRenderer(
>>>>>>>             @InjectService("PageMarkupRenderer")
>>>>>>>             final PageMarkupRenderer markupRenderer,
>>>>>>>             @InjectService("MarkupWriterFactory")
>>>>>>>             final MarkupWriterFactory markupWriterFactory, final Object
>>>>>>> delegate ) {
>>>>>>>
>>>>>>>         return new PageResponseRenderer() {
>>>>>>>             public void renderPageResponse( Page page, Response response )
>>>>>>>                     throws IOException {
>>>>>>>                 MarkupWriter writer =
>>>>>>> markupWriterFactory.newMarkupWriter();
>>>>>>>                 markupRenderer.renderPageMarkup( page, writer );
>>>>>>>                 PrintWriter pw = response
>>>>>>>                         .getPrintWriter( "text/html; charset=UTF-8" );
>>>>>>>                 writer.toMarkup( pw );
>>>>>>>                 pw.flush();
>>>>>>>             }
>>>>>>>         };
>>>>>>>     }
>>>>>>>
>>>>>>> Is there anything wrong, or what am I missing?
>>>>>>>
>>>>>>> Thanx && cheers,
>>>>>>> Martin
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>>>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>>>>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: T5 encoding issue

Posted by Martin Grotzke <ma...@javakaffee.de>.
On Wed, 2007-06-20 at 22:02 +0200, Martin Grotzke wrote:
> Hi,
> 
> this is an urgent and important issue for us. Can anybody help
> with this? Howard?
> 
> As I wrote below: request.getServletPath() (or request.getPath())
> already provides the decoded path.
> a) Should request.getPath() provide the encoded path, or
> b) should the additional decoding (in
>    PageRenderDispatcher.convertActivationContext) be skipped?

An excerpt from the servlet spec 2.4 p. 243:

getServletPath()
[...]
Returns: a String containing the name or path of the servlet being called,
as specified in the request URL, decoded, or an empty string if the servlet
used to process the request is matched using the “/*” pattern.

So why is additional decoding done?

Cheers,
Martin


> 
> Is anything else the problem? E.g. might the problem be caused
> by commons URLCodec?
> 
> Thanx in advance,
> cheers,
> Martin
> 
> 
> On Mon, 2007-06-18 at 12:20 +0200, Martin Grotzke wrote:
> > On Sun, 2007-06-17 at 23:24 +0200, Martin Grotzke wrote:
> > > I just stepped through the sources to see where the URI get's
> > > decoded to the activation context arguments, and found that the
> > > o.a.t.internal.services.PageRenderDispatcher.dispatch invokes
> > > convertActivationContext with the path info to convert it to
> > > the activation context args.
> > > 
> > > convertActivationContext uses TapestryInternalUtils.urlDecode
> > > which invokes URLCodec.decode. It seems that this causes the
> > > problem, but I cannot say what exactly is the reason.
> > > 
> > > When I remove the invocation of TapestryInternalUtils.urlDecode
> > > everything's fine...
> > Just to provide more info:
> > TapestryInternalUtils.urlDecode is invoked with the already decoded
> > context parameter, e.g. "trüb" for the urlencoded string "tr%C3%BCb".
> > 
> > This parameter is read from request.getServletPath(), which is already
> > /search/trüb. So it tries to decode the already decoded string, which
> > then fails.
> > 
> > What is the problem here? Is it that request.getServletPath() provides
> > the already decoded string, or is the problem that the decoding is done
> > additionally by T5? Or what else?
> > 
> > Thanx && cheers,
> > Martin
> > 
> > 
> > > 
> > > Any help with this issue?
> > > 
> > > Thanx && cheers,
> > > Martin
> > > 
> > > 
> > > On Sun, 2007-06-17 at 23:01 +0200, Martin Grotzke wrote:
> > > > On Tue, 2007-06-12 at 10:38 +0200, Ulrich Stärk wrote:
> > > > > In case you are using Tomcat try adding URIEncoding="UTF-8" to your
> > > > > connector definition in server.xml.
> > > > I just tried that, but it does not solve the problem.
> > > > 
> > > > I have added a servlet filter that prints the requested uri to
> > > > the std out, just to see what is the input for T5.
> > > > 
> > > > The URIEncoding="UTF-8" does not change what's printed by the
> > > > filter, but the argument that's passed to my page class' onActivate
> > > > is different.
> > > > 
> > > > Without URIEncoding="UTF-8":
> > > > 
> > > > [INFO ] 2007-06-17 22:52:37,956 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
> > > > - uri: /shopping24-shop/search/tr%C3%BCb
> > > > - path: null
> > > > 
> > > > [INFO ] 2007-06-17 22:52:51,303 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
> > > > Got invoked args tr??b
> > > > 
> > > > With URIEncoding="UTF-8":
> > > > 
> > > > [INFO ] 2007-06-17 22:54:33,398 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
> > > > uri: /shopping24-shop/search/tr%C3%BCb
> > > > 
> > > > [INFO ] 2007-06-17 22:54:44,620 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
> > > > Got invoked args tr?b
> > > > 
> > > > 
> > > > Is there anything else that I could do to get the correct
> > > > decoding of the request parameters / uri?
> > > > 
> > > > Thanx && cheers,
> > > > Martin
> > > > 
> > > > 
> > > > 
> > > > > 
> > > > > Uli
> > > > > 
> > > > > On Mo, 11.06.2007, 23:13, Martin Grotzke sagte:
> > > > > > Hi,
> > > > > >
> > > > > > I have currently an encoding issue, but am not really sure what's
> > > > > > the reason for this.
> > > > > >
> > > > > > I have an url that contains a url encoded german umlaut (ü) in UTF-8
> > > > > > and looks like the following:
> > > > > >
> > > > > > http://localhost:8080/app/search/%C3%BCbel (the %C3%BC represents the ü
> > > > > > in UTF-8, this url is created by
> > > > > > componentResources.createPageLink( "search", new Object[]{ _query } )
> > > > > > in the submit method of the search page)
> > > > > >
> > > > > > Now, when I look in the onActivate(string) method, the string is not
> > > > > > "übel" but it's "?bel", both printed via logging as when I inspect the
> > > > > > variable during debugging.
> > > > > >
> > > > > > AFAICS the created url from the page link is correct in terms of utf-8
> > > > > > encoding, but the parsed query string seems to be wrong, as it contains
> > > > > > only the "?"...
> > > > > >
> > > > > > We have the following in our AppModule:
> > > > > >
> > > > > >     public void contributeRequestHandler(
> > > > > >             OrderedConfiguration<RequestFilter> configuration,
> > > > > >             @InjectService("TimingFilter")
> > > > > >             final RequestFilter filter, @InjectService("Utf8Filter")
> > > > > >             final RequestFilter utf8Filter ) {
> > > > > >         configuration.add( "Timing", filter );
> > > > > >         configuration.add( "Utf8Filter", utf8Filter ); // handle UTF-8
> > > > > >     }
> > > > > >
> > > > > >     public RequestFilter buildUtf8Filter(
> > > > > >             @InjectService("RequestGlobals")
> > > > > >             final RequestGlobals requestGlobals ) {
> > > > > >         return new RequestFilter() {
> > > > > >             public boolean service( Request request, Response response,
> > > > > > RequestHandler handler ) throws IOException {
> > > > > >                 requestGlobals.getHTTPServletRequest().setCharacterEncoding(
> > > > > > "UTF-8" );
> > > > > >                 return handler.service( request, response );
> > > > > >             }
> > > > > >         };
> > > > > >     }
> > > > > >
> > > > > >     public static PageResponseRenderer decoratePageResponseRenderer(
> > > > > >             @InjectService("PageMarkupRenderer")
> > > > > >             final PageMarkupRenderer markupRenderer,
> > > > > >             @InjectService("MarkupWriterFactory")
> > > > > >             final MarkupWriterFactory markupWriterFactory, final Object
> > > > > > delegate ) {
> > > > > >
> > > > > >         return new PageResponseRenderer() {
> > > > > >             public void renderPageResponse( Page page, Response response )
> > > > > >                     throws IOException {
> > > > > >                 MarkupWriter writer =
> > > > > > markupWriterFactory.newMarkupWriter();
> > > > > >                 markupRenderer.renderPageMarkup( page, writer );
> > > > > >                 PrintWriter pw = response
> > > > > >                         .getPrintWriter( "text/html; charset=UTF-8" );
> > > > > >                 writer.toMarkup( pw );
> > > > > >                 pw.flush();
> > > > > >             }
> > > > > >         };
> > > > > >     }
> > > > > >
> > > > > > Is there anything wrong, or what am I missing?
> > > > > >
> > > > > > Thanx && cheers,
> > > > > > Martin
> > > > > >
> > > > > >
> > > > > >
> > > > > 
> > > > > 
> > > > > 
> > > > > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > > > > For additional commands, e-mail: users-help@tapestry.apache.org
> > > > > 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

Re: T5 encoding issue

Posted by Martin Grotzke <ma...@javakaffee.de>.
Hi,

this is an urgent and important issue for us. Can anybody help
with this? Howard?

As I wrote below: request.getServletPath() (or request.getPath())
already provides the decoded path.
a) Should request.getPath() provide the encoded path, or
b) should the additional decoding (in
   PageRenderDispatcher.convertActivationContext) be skipped?

Is anything else the problem? E.g. might the problem be caused
by commons URLCodec?

Thanx in advance,
cheers,
Martin


On Mon, 2007-06-18 at 12:20 +0200, Martin Grotzke wrote:
> On Sun, 2007-06-17 at 23:24 +0200, Martin Grotzke wrote:
> > I just stepped through the sources to see where the URI get's
> > decoded to the activation context arguments, and found that the
> > o.a.t.internal.services.PageRenderDispatcher.dispatch invokes
> > convertActivationContext with the path info to convert it to
> > the activation context args.
> > 
> > convertActivationContext uses TapestryInternalUtils.urlDecode
> > which invokes URLCodec.decode. It seems that this causes the
> > problem, but I cannot say what exactly is the reason.
> > 
> > When I remove the invocation of TapestryInternalUtils.urlDecode
> > everything's fine...
> Just to provide more info:
> TapestryInternalUtils.urlDecode is invoked with the already decoded
> context parameter, e.g. "trüb" for the urlencoded string "tr%C3%BCb".
> 
> This parameter is read from request.getServletPath(), which is already
> /search/trüb. So it tries to decode the already decoded string, which
> then fails.
> 
> What is the problem here? Is it that request.getServletPath() provides
> the already decoded string, or is the problem that the decoding is done
> additionally by T5? Or what else?
> 
> Thanx && cheers,
> Martin
> 
> 
> > 
> > Any help with this issue?
> > 
> > Thanx && cheers,
> > Martin
> > 
> > 
> > On Sun, 2007-06-17 at 23:01 +0200, Martin Grotzke wrote:
> > > On Tue, 2007-06-12 at 10:38 +0200, Ulrich Stärk wrote:
> > > > In case you are using Tomcat try adding URIEncoding="UTF-8" to your
> > > > connector definition in server.xml.
> > > I just tried that, but it does not solve the problem.
> > > 
> > > I have added a servlet filter that prints the requested uri to
> > > the std out, just to see what is the input for T5.
> > > 
> > > The URIEncoding="UTF-8" does not change what's printed by the
> > > filter, but the argument that's passed to my page class' onActivate
> > > is different.
> > > 
> > > Without URIEncoding="UTF-8":
> > > 
> > > [INFO ] 2007-06-17 22:52:37,956 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
> > > - uri: /shopping24-shop/search/tr%C3%BCb
> > > - path: null
> > > 
> > > [INFO ] 2007-06-17 22:52:51,303 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
> > > Got invoked args tr??b
> > > 
> > > With URIEncoding="UTF-8":
> > > 
> > > [INFO ] 2007-06-17 22:54:33,398 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
> > > uri: /shopping24-shop/search/tr%C3%BCb
> > > 
> > > [INFO ] 2007-06-17 22:54:44,620 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
> > > Got invoked args tr?b
> > > 
> > > 
> > > Is there anything else that I could do to get the correct
> > > decoding of the request parameters / uri?
> > > 
> > > Thanx && cheers,
> > > Martin
> > > 
> > > 
> > > 
> > > > 
> > > > Uli
> > > > 
> > > > On Mo, 11.06.2007, 23:13, Martin Grotzke sagte:
> > > > > Hi,
> > > > >
> > > > > I have currently an encoding issue, but am not really sure what's
> > > > > the reason for this.
> > > > >
> > > > > I have an url that contains a url encoded german umlaut (ü) in UTF-8
> > > > > and looks like the following:
> > > > >
> > > > > http://localhost:8080/app/search/%C3%BCbel (the %C3%BC represents the ü
> > > > > in UTF-8, this url is created by
> > > > > componentResources.createPageLink( "search", new Object[]{ _query } )
> > > > > in the submit method of the search page)
> > > > >
> > > > > Now, when I look in the onActivate(string) method, the string is not
> > > > > "übel" but it's "?bel", both printed via logging as when I inspect the
> > > > > variable during debugging.
> > > > >
> > > > > AFAICS the created url from the page link is correct in terms of utf-8
> > > > > encoding, but the parsed query string seems to be wrong, as it contains
> > > > > only the "?"...
> > > > >
> > > > > We have the following in our AppModule:
> > > > >
> > > > >     public void contributeRequestHandler(
> > > > >             OrderedConfiguration<RequestFilter> configuration,
> > > > >             @InjectService("TimingFilter")
> > > > >             final RequestFilter filter, @InjectService("Utf8Filter")
> > > > >             final RequestFilter utf8Filter ) {
> > > > >         configuration.add( "Timing", filter );
> > > > >         configuration.add( "Utf8Filter", utf8Filter ); // handle UTF-8
> > > > >     }
> > > > >
> > > > >     public RequestFilter buildUtf8Filter(
> > > > >             @InjectService("RequestGlobals")
> > > > >             final RequestGlobals requestGlobals ) {
> > > > >         return new RequestFilter() {
> > > > >             public boolean service( Request request, Response response,
> > > > > RequestHandler handler ) throws IOException {
> > > > >                 requestGlobals.getHTTPServletRequest().setCharacterEncoding(
> > > > > "UTF-8" );
> > > > >                 return handler.service( request, response );
> > > > >             }
> > > > >         };
> > > > >     }
> > > > >
> > > > >     public static PageResponseRenderer decoratePageResponseRenderer(
> > > > >             @InjectService("PageMarkupRenderer")
> > > > >             final PageMarkupRenderer markupRenderer,
> > > > >             @InjectService("MarkupWriterFactory")
> > > > >             final MarkupWriterFactory markupWriterFactory, final Object
> > > > > delegate ) {
> > > > >
> > > > >         return new PageResponseRenderer() {
> > > > >             public void renderPageResponse( Page page, Response response )
> > > > >                     throws IOException {
> > > > >                 MarkupWriter writer =
> > > > > markupWriterFactory.newMarkupWriter();
> > > > >                 markupRenderer.renderPageMarkup( page, writer );
> > > > >                 PrintWriter pw = response
> > > > >                         .getPrintWriter( "text/html; charset=UTF-8" );
> > > > >                 writer.toMarkup( pw );
> > > > >                 pw.flush();
> > > > >             }
> > > > >         };
> > > > >     }
> > > > >
> > > > > Is there anything wrong, or what am I missing?
> > > > >
> > > > > Thanx && cheers,
> > > > > Martin
> > > > >
> > > > >
> > > > >
> > > > 
> > > > 
> > > > 
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > > > For additional commands, e-mail: users-help@tapestry.apache.org
> > > > 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

Re: T5 encoding issue

Posted by Martin Grotzke <ma...@javakaffee.de>.
On Sun, 2007-06-17 at 23:24 +0200, Martin Grotzke wrote:
> I just stepped through the sources to see where the URI get's
> decoded to the activation context arguments, and found that the
> o.a.t.internal.services.PageRenderDispatcher.dispatch invokes
> convertActivationContext with the path info to convert it to
> the activation context args.
> 
> convertActivationContext uses TapestryInternalUtils.urlDecode
> which invokes URLCodec.decode. It seems that this causes the
> problem, but I cannot say what exactly is the reason.
> 
> When I remove the invocation of TapestryInternalUtils.urlDecode
> everything's fine...
Just to provide more info:
TapestryInternalUtils.urlDecode is invoked with the already decoded
context parameter, e.g. "trüb" for the urlencoded string "tr%C3%BCb".

This parameter is read from request.getServletPath(), which is already
/search/trüb. So it tries to decode the already decoded string, which
then fails.

What is the problem here? Is it that request.getServletPath() provides
the already decoded string, or is the problem that the decoding is done
additionally by T5? Or what else?

Thanx && cheers,
Martin


> 
> Any help with this issue?
> 
> Thanx && cheers,
> Martin
> 
> 
> On Sun, 2007-06-17 at 23:01 +0200, Martin Grotzke wrote:
> > On Tue, 2007-06-12 at 10:38 +0200, Ulrich Stärk wrote:
> > > In case you are using Tomcat try adding URIEncoding="UTF-8" to your
> > > connector definition in server.xml.
> > I just tried that, but it does not solve the problem.
> > 
> > I have added a servlet filter that prints the requested uri to
> > the std out, just to see what is the input for T5.
> > 
> > The URIEncoding="UTF-8" does not change what's printed by the
> > filter, but the argument that's passed to my page class' onActivate
> > is different.
> > 
> > Without URIEncoding="UTF-8":
> > 
> > [INFO ] 2007-06-17 22:52:37,956 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
> > - uri: /shopping24-shop/search/tr%C3%BCb
> > - path: null
> > 
> > [INFO ] 2007-06-17 22:52:51,303 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
> > Got invoked args tr??b
> > 
> > With URIEncoding="UTF-8":
> > 
> > [INFO ] 2007-06-17 22:54:33,398 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
> > uri: /shopping24-shop/search/tr%C3%BCb
> > 
> > [INFO ] 2007-06-17 22:54:44,620 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
> > Got invoked args tr?b
> > 
> > 
> > Is there anything else that I could do to get the correct
> > decoding of the request parameters / uri?
> > 
> > Thanx && cheers,
> > Martin
> > 
> > 
> > 
> > > 
> > > Uli
> > > 
> > > On Mo, 11.06.2007, 23:13, Martin Grotzke sagte:
> > > > Hi,
> > > >
> > > > I have currently an encoding issue, but am not really sure what's
> > > > the reason for this.
> > > >
> > > > I have an url that contains a url encoded german umlaut (ü) in UTF-8
> > > > and looks like the following:
> > > >
> > > > http://localhost:8080/app/search/%C3%BCbel (the %C3%BC represents the ü
> > > > in UTF-8, this url is created by
> > > > componentResources.createPageLink( "search", new Object[]{ _query } )
> > > > in the submit method of the search page)
> > > >
> > > > Now, when I look in the onActivate(string) method, the string is not
> > > > "übel" but it's "?bel", both printed via logging as when I inspect the
> > > > variable during debugging.
> > > >
> > > > AFAICS the created url from the page link is correct in terms of utf-8
> > > > encoding, but the parsed query string seems to be wrong, as it contains
> > > > only the "?"...
> > > >
> > > > We have the following in our AppModule:
> > > >
> > > >     public void contributeRequestHandler(
> > > >             OrderedConfiguration<RequestFilter> configuration,
> > > >             @InjectService("TimingFilter")
> > > >             final RequestFilter filter, @InjectService("Utf8Filter")
> > > >             final RequestFilter utf8Filter ) {
> > > >         configuration.add( "Timing", filter );
> > > >         configuration.add( "Utf8Filter", utf8Filter ); // handle UTF-8
> > > >     }
> > > >
> > > >     public RequestFilter buildUtf8Filter(
> > > >             @InjectService("RequestGlobals")
> > > >             final RequestGlobals requestGlobals ) {
> > > >         return new RequestFilter() {
> > > >             public boolean service( Request request, Response response,
> > > > RequestHandler handler ) throws IOException {
> > > >                 requestGlobals.getHTTPServletRequest().setCharacterEncoding(
> > > > "UTF-8" );
> > > >                 return handler.service( request, response );
> > > >             }
> > > >         };
> > > >     }
> > > >
> > > >     public static PageResponseRenderer decoratePageResponseRenderer(
> > > >             @InjectService("PageMarkupRenderer")
> > > >             final PageMarkupRenderer markupRenderer,
> > > >             @InjectService("MarkupWriterFactory")
> > > >             final MarkupWriterFactory markupWriterFactory, final Object
> > > > delegate ) {
> > > >
> > > >         return new PageResponseRenderer() {
> > > >             public void renderPageResponse( Page page, Response response )
> > > >                     throws IOException {
> > > >                 MarkupWriter writer =
> > > > markupWriterFactory.newMarkupWriter();
> > > >                 markupRenderer.renderPageMarkup( page, writer );
> > > >                 PrintWriter pw = response
> > > >                         .getPrintWriter( "text/html; charset=UTF-8" );
> > > >                 writer.toMarkup( pw );
> > > >                 pw.flush();
> > > >             }
> > > >         };
> > > >     }
> > > >
> > > > Is there anything wrong, or what am I missing?
> > > >
> > > > Thanx && cheers,
> > > > Martin
> > > >
> > > >
> > > >
> > > 
> > > 
> > > 
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > > For additional commands, e-mail: users-help@tapestry.apache.org
> > > 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

Re: T5 encoding issue

Posted by Martin Grotzke <ma...@javakaffee.de>.
I just stepped through the sources to see where the URI get's
decoded to the activation context arguments, and found that the
o.a.t.internal.services.PageRenderDispatcher.dispatch invokes
convertActivationContext with the path info to convert it to
the activation context args.

convertActivationContext uses TapestryInternalUtils.urlDecode
which invokes URLCodec.decode. It seems that this causes the
problem, but I cannot say what exactly is the reason.

When I remove the invocation of TapestryInternalUtils.urlDecode
everything's fine...

Any help with this issue?

Thanx && cheers,
Martin


On Sun, 2007-06-17 at 23:01 +0200, Martin Grotzke wrote:
> On Tue, 2007-06-12 at 10:38 +0200, Ulrich Stärk wrote:
> > In case you are using Tomcat try adding URIEncoding="UTF-8" to your
> > connector definition in server.xml.
> I just tried that, but it does not solve the problem.
> 
> I have added a servlet filter that prints the requested uri to
> the std out, just to see what is the input for T5.
> 
> The URIEncoding="UTF-8" does not change what's printed by the
> filter, but the argument that's passed to my page class' onActivate
> is different.
> 
> Without URIEncoding="UTF-8":
> 
> [INFO ] 2007-06-17 22:52:37,956 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
> - uri: /shopping24-shop/search/tr%C3%BCb
> - path: null
> 
> [INFO ] 2007-06-17 22:52:51,303 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
> Got invoked args tr??b
> 
> With URIEncoding="UTF-8":
> 
> [INFO ] 2007-06-17 22:54:33,398 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
> uri: /shopping24-shop/search/tr%C3%BCb
> 
> [INFO ] 2007-06-17 22:54:44,620 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
> Got invoked args tr?b
> 
> 
> Is there anything else that I could do to get the correct
> decoding of the request parameters / uri?
> 
> Thanx && cheers,
> Martin
> 
> 
> 
> > 
> > Uli
> > 
> > On Mo, 11.06.2007, 23:13, Martin Grotzke sagte:
> > > Hi,
> > >
> > > I have currently an encoding issue, but am not really sure what's
> > > the reason for this.
> > >
> > > I have an url that contains a url encoded german umlaut (ü) in UTF-8
> > > and looks like the following:
> > >
> > > http://localhost:8080/app/search/%C3%BCbel (the %C3%BC represents the ü
> > > in UTF-8, this url is created by
> > > componentResources.createPageLink( "search", new Object[]{ _query } )
> > > in the submit method of the search page)
> > >
> > > Now, when I look in the onActivate(string) method, the string is not
> > > "übel" but it's "?bel", both printed via logging as when I inspect the
> > > variable during debugging.
> > >
> > > AFAICS the created url from the page link is correct in terms of utf-8
> > > encoding, but the parsed query string seems to be wrong, as it contains
> > > only the "?"...
> > >
> > > We have the following in our AppModule:
> > >
> > >     public void contributeRequestHandler(
> > >             OrderedConfiguration<RequestFilter> configuration,
> > >             @InjectService("TimingFilter")
> > >             final RequestFilter filter, @InjectService("Utf8Filter")
> > >             final RequestFilter utf8Filter ) {
> > >         configuration.add( "Timing", filter );
> > >         configuration.add( "Utf8Filter", utf8Filter ); // handle UTF-8
> > >     }
> > >
> > >     public RequestFilter buildUtf8Filter(
> > >             @InjectService("RequestGlobals")
> > >             final RequestGlobals requestGlobals ) {
> > >         return new RequestFilter() {
> > >             public boolean service( Request request, Response response,
> > > RequestHandler handler ) throws IOException {
> > >                 requestGlobals.getHTTPServletRequest().setCharacterEncoding(
> > > "UTF-8" );
> > >                 return handler.service( request, response );
> > >             }
> > >         };
> > >     }
> > >
> > >     public static PageResponseRenderer decoratePageResponseRenderer(
> > >             @InjectService("PageMarkupRenderer")
> > >             final PageMarkupRenderer markupRenderer,
> > >             @InjectService("MarkupWriterFactory")
> > >             final MarkupWriterFactory markupWriterFactory, final Object
> > > delegate ) {
> > >
> > >         return new PageResponseRenderer() {
> > >             public void renderPageResponse( Page page, Response response )
> > >                     throws IOException {
> > >                 MarkupWriter writer =
> > > markupWriterFactory.newMarkupWriter();
> > >                 markupRenderer.renderPageMarkup( page, writer );
> > >                 PrintWriter pw = response
> > >                         .getPrintWriter( "text/html; charset=UTF-8" );
> > >                 writer.toMarkup( pw );
> > >                 pw.flush();
> > >             }
> > >         };
> > >     }
> > >
> > > Is there anything wrong, or what am I missing?
> > >
> > > Thanx && cheers,
> > > Martin
> > >
> > >
> > >
> > 
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > For additional commands, e-mail: users-help@tapestry.apache.org
> > 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

Re: T5 encoding issue

Posted by Martin Grotzke <ma...@javakaffee.de>.
On Tue, 2007-06-12 at 10:38 +0200, Ulrich Stärk wrote:
> In case you are using Tomcat try adding URIEncoding="UTF-8" to your
> connector definition in server.xml.
I just tried that, but it does not solve the problem.

I have added a servlet filter that prints the requested uri to
the std out, just to see what is the input for T5.

The URIEncoding="UTF-8" does not change what's printed by the
filter, but the argument that's passed to my page class' onActivate
is different.

Without URIEncoding="UTF-8":

[INFO ] 2007-06-17 22:52:37,956 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
- uri: /shopping24-shop/search/tr%C3%BCb
- path: null

[INFO ] 2007-06-17 22:52:51,303 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
Got invoked args tr??b

With URIEncoding="UTF-8":

[INFO ] 2007-06-17 22:54:33,398 http-8080-1 org.comp.proj.presentation.util.EncodingFilter.doFilter:
uri: /shopping24-shop/search/tr%C3%BCb

[INFO ] 2007-06-17 22:54:44,620 http-8080-1 org.comp.proj.presentation.pages.Search.onActivate:
Got invoked args tr?b


Is there anything else that I could do to get the correct
decoding of the request parameters / uri?

Thanx && cheers,
Martin



> 
> Uli
> 
> On Mo, 11.06.2007, 23:13, Martin Grotzke sagte:
> > Hi,
> >
> > I have currently an encoding issue, but am not really sure what's
> > the reason for this.
> >
> > I have an url that contains a url encoded german umlaut (ü) in UTF-8
> > and looks like the following:
> >
> > http://localhost:8080/app/search/%C3%BCbel (the %C3%BC represents the ü
> > in UTF-8, this url is created by
> > componentResources.createPageLink( "search", new Object[]{ _query } )
> > in the submit method of the search page)
> >
> > Now, when I look in the onActivate(string) method, the string is not
> > "übel" but it's "?bel", both printed via logging as when I inspect the
> > variable during debugging.
> >
> > AFAICS the created url from the page link is correct in terms of utf-8
> > encoding, but the parsed query string seems to be wrong, as it contains
> > only the "?"...
> >
> > We have the following in our AppModule:
> >
> >     public void contributeRequestHandler(
> >             OrderedConfiguration<RequestFilter> configuration,
> >             @InjectService("TimingFilter")
> >             final RequestFilter filter, @InjectService("Utf8Filter")
> >             final RequestFilter utf8Filter ) {
> >         configuration.add( "Timing", filter );
> >         configuration.add( "Utf8Filter", utf8Filter ); // handle UTF-8
> >     }
> >
> >     public RequestFilter buildUtf8Filter(
> >             @InjectService("RequestGlobals")
> >             final RequestGlobals requestGlobals ) {
> >         return new RequestFilter() {
> >             public boolean service( Request request, Response response,
> > RequestHandler handler ) throws IOException {
> >                 requestGlobals.getHTTPServletRequest().setCharacterEncoding(
> > "UTF-8" );
> >                 return handler.service( request, response );
> >             }
> >         };
> >     }
> >
> >     public static PageResponseRenderer decoratePageResponseRenderer(
> >             @InjectService("PageMarkupRenderer")
> >             final PageMarkupRenderer markupRenderer,
> >             @InjectService("MarkupWriterFactory")
> >             final MarkupWriterFactory markupWriterFactory, final Object
> > delegate ) {
> >
> >         return new PageResponseRenderer() {
> >             public void renderPageResponse( Page page, Response response )
> >                     throws IOException {
> >                 MarkupWriter writer =
> > markupWriterFactory.newMarkupWriter();
> >                 markupRenderer.renderPageMarkup( page, writer );
> >                 PrintWriter pw = response
> >                         .getPrintWriter( "text/html; charset=UTF-8" );
> >                 writer.toMarkup( pw );
> >                 pw.flush();
> >             }
> >         };
> >     }
> >
> > Is there anything wrong, or what am I missing?
> >
> > Thanx && cheers,
> > Martin
> >
> >
> >
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
> 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

Re: T5 encoding issue

Posted by Ulrich Stärk <ul...@spielviel.de>.
In case you are using Tomcat try adding URIEncoding="UTF-8" to your
connector definition in server.xml.

Uli

On Mo, 11.06.2007, 23:13, Martin Grotzke sagte:
> Hi,
>
> I have currently an encoding issue, but am not really sure what's
> the reason for this.
>
> I have an url that contains a url encoded german umlaut (ü) in UTF-8
> and looks like the following:
>
> http://localhost:8080/app/search/%C3%BCbel (the %C3%BC represents the ü
> in UTF-8, this url is created by
> componentResources.createPageLink( "search", new Object[]{ _query } )
> in the submit method of the search page)
>
> Now, when I look in the onActivate(string) method, the string is not
> "übel" but it's "?bel", both printed via logging as when I inspect the
> variable during debugging.
>
> AFAICS the created url from the page link is correct in terms of utf-8
> encoding, but the parsed query string seems to be wrong, as it contains
> only the "?"...
>
> We have the following in our AppModule:
>
>     public void contributeRequestHandler(
>             OrderedConfiguration<RequestFilter> configuration,
>             @InjectService("TimingFilter")
>             final RequestFilter filter, @InjectService("Utf8Filter")
>             final RequestFilter utf8Filter ) {
>         configuration.add( "Timing", filter );
>         configuration.add( "Utf8Filter", utf8Filter ); // handle UTF-8
>     }
>
>     public RequestFilter buildUtf8Filter(
>             @InjectService("RequestGlobals")
>             final RequestGlobals requestGlobals ) {
>         return new RequestFilter() {
>             public boolean service( Request request, Response response,
> RequestHandler handler ) throws IOException {
>                 requestGlobals.getHTTPServletRequest().setCharacterEncoding(
> "UTF-8" );
>                 return handler.service( request, response );
>             }
>         };
>     }
>
>     public static PageResponseRenderer decoratePageResponseRenderer(
>             @InjectService("PageMarkupRenderer")
>             final PageMarkupRenderer markupRenderer,
>             @InjectService("MarkupWriterFactory")
>             final MarkupWriterFactory markupWriterFactory, final Object
> delegate ) {
>
>         return new PageResponseRenderer() {
>             public void renderPageResponse( Page page, Response response )
>                     throws IOException {
>                 MarkupWriter writer =
> markupWriterFactory.newMarkupWriter();
>                 markupRenderer.renderPageMarkup( page, writer );
>                 PrintWriter pw = response
>                         .getPrintWriter( "text/html; charset=UTF-8" );
>                 writer.toMarkup( pw );
>                 pw.flush();
>             }
>         };
>     }
>
> Is there anything wrong, or what am I missing?
>
> Thanx && cheers,
> Martin
>
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org