You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Jose L Martinez-Avial (JIRA)" <ji...@apache.org> on 2013/09/14 01:08:52 UTC

[jira] [Created] (WW-4199) Exclusion of URLs should be done before calling prepare.

Jose L Martinez-Avial created WW-4199:
-----------------------------------------

             Summary: Exclusion of URLs should be done before calling prepare.
                 Key: WW-4199
                 URL: https://issues.apache.org/jira/browse/WW-4199
             Project: Struts 2
          Issue Type: Bug
          Components: Dispatch Filter
            Reporter: Jose L Martinez-Avial
            Priority: Minor


I have some webservices under /services in my webapp, and I have excluded them from Struts by using the excludePattern filter:

<param-name>struts.action.excludePattern</param-name>
<param-value>/services/.*</param-value>

The problem is that the classes StrutsPrepareAndExecuteFilter and StrutsPrepareFilter do some calls before to prepare before checking if the URL should be treated. In the case of the webservices it provokes the following exception:

####<Sep 13, 2013 6:38:54 PM EDT> <Error> <HTTP> <naboo.mia.usa.sinvest> <EcoPrdInt> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1379111934567> <BEA-101108> <[weblogic.servlet.internal.WebAppServletContext@2f97ff - appName: 'test-int', name: 'test-int.war', context-path: '/test-int', spec-version: '2.5'] Unsupported encoding: "UTF-8; action="urn:publishDocumentForSignature"" specified.
java.io.UnsupportedEncodingException: Unsupported Encoding UTF-8; action="urn:publishDocumentForSignature"
        at weblogic.servlet.internal.ServletRequestImpl.setCharacterEncoding(ServletRequestImpl.java:428)
        at weblogic.servlet.internal.ServletRequestImpl.initRequestEncoding(ServletRequestImpl.java:1115)
        at weblogic.servlet.internal.ServletRequestImpl.getCharacterEncoding(ServletRequestImpl.java:451)
        at org.apache.struts2.dispatcher.Dispatcher.applyEncoding(Dispatcher.java:762)
        at org.apache.struts2.dispatcher.Dispatcher.prepare(Dispatcher.java:748)
        at org.apache.struts2.dispatcher.ng.PrepareOperations.setEncodingAndLocale(PrepareOperations.java:121)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:85)

And that's due to the filter calling prepare to set the encoding and localem in the follow code:
[...]
        try {
            prepare.setEncodingAndLocale(request, response);
            prepare.createActionContext(request, response);
            prepare.assignDispatcherToThread();
            if (excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
                chain.doFilter(request, response);
            } else {
[...]
 But if the URL is going to be excluded, why is it doing that call? I think the calls to prepare should be done after checking the URL for exclusions. Unless I'm missing something, it shouldn't impact anything, right?

Thanks

JL

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira