This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 15fbc8e557ee68278b18b251b18935c8da4bd47c
Author: juanpablo <[email protected]>
AuthorDate: Sun Aug 18 20:36:22 2019 +0200

    WikiEngine#getContentEncoding returns a Charset now, instead of a String + 
propagate the change
---
 .../main/java/org/apache/wiki/VariableManager.java |  21 ++--
 .../src/main/java/org/apache/wiki/WikiEngine.java  |  51 ++++----
 .../wiki/ajax/WikiAjaxDispatcherServlet.java       |   9 +-
 .../org/apache/wiki/auth/AuthorizationManager.java |  65 ++++------
 .../org/apache/wiki/diff/ExternalDiffProvider.java |  42 +++----
 .../java/org/apache/wiki/filters/SpamFilter.java   |  50 ++++----
 .../org/apache/wiki/tags/ContentEncodingTag.java   |  17 +--
 .../java/org/apache/wiki/ui/CommandResolver.java   |  40 +++---
 .../java/org/apache/wiki/ui/WikiJSPFilter.java     |   5 +-
 .../java/org/apache/wiki/ui/WikiServletFilter.java |  24 ++--
 .../org/apache/wiki/url/DefaultURLConstructor.java | 139 +++++----------------
 .../org/apache/wiki/url/ShortURLConstructor.java   |  24 ++--
 .../java/org/apache/wiki/url/URLConstructor.java   |  11 +-
 13 files changed, 186 insertions(+), 312 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/VariableManager.java 
b/jspwiki-main/src/main/java/org/apache/wiki/VariableManager.java
index f7d1378..86e166d 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/VariableManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/VariableManager.java
@@ -365,14 +365,12 @@ public class VariableManager
             return Release.getVersionString();
         }
 
-        public String getEncoding()
-        {
-            return m_context.getEngine().getContentEncoding();
+        public String getEncoding() {
+            return m_context.getEngine().getContentEncoding().displayName();
         }
 
-        public String getTotalpages()
-        {
-            return Integer.toString(m_context.getEngine().getPageCount());
+        public String getTotalpages() {
+            return Integer.toString( m_context.getEngine().getPageCount() );
         }
 
         public String getPageprovider()
@@ -385,16 +383,13 @@ public class VariableManager
             return m_context.getEngine().getCurrentProviderInfo();
         }
 
-        public String getAttachmentprovider()
-        {
-            WikiProvider p = 
m_context.getEngine().getAttachmentManager().getCurrentProvider();
+        public String getAttachmentprovider() {
+            final WikiProvider p = 
m_context.getEngine().getAttachmentManager().getCurrentProvider();
             return (p != null) ? p.getClass().getName() : "-";
         }
 
-        public String getAttachmentproviderdescription()
-        {
-            WikiProvider p = 
m_context.getEngine().getAttachmentManager().getCurrentProvider();
-
+        public String getAttachmentproviderdescription() {
+            final WikiProvider p = 
m_context.getEngine().getAttachmentManager().getCurrentProvider();
             return (p != null) ? p.getProviderInfo() : "-";
         }
 
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java 
b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
index fad91ec..c438ecb 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/WikiEngine.java
@@ -82,6 +82,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
+import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.security.Principal;
 import java.util.ArrayList;
@@ -877,31 +878,26 @@ public class WikiEngine
             return "";
         }
 
-        try {
-            String res = request.getQueryString();
-            if( res != null ) {
-                res = new String( res.getBytes( StandardCharsets.ISO_8859_1 ), 
getContentEncoding() );
-
-                //
-                // Ensure that the 'page=xyz' attribute is removed
-                // FIXME: Is it really the mandate of this routine to do that?
-                //
-                final int pos1 = res.indexOf("page=");
-                if( pos1 >= 0 ) {
-                    String tmpRes = res.substring( 0, pos1 );
-                    final int pos2 = res.indexOf( "&",pos1 ) + 1;
-                    if ( ( pos2 > 0 ) && ( pos2 < res.length() ) ) {
-                        tmpRes = tmpRes + res.substring(pos2);
-                    }
-                    res = tmpRes;
+        String res = request.getQueryString();
+        if( res != null ) {
+            res = new String( res.getBytes( StandardCharsets.ISO_8859_1 ), 
getContentEncoding() );
+
+            //
+            // Ensure that the 'page=xyz' attribute is removed
+            // FIXME: Is it really the mandate of this routine to do that?
+            //
+            final int pos1 = res.indexOf("page=");
+            if( pos1 >= 0 ) {
+                String tmpRes = res.substring( 0, pos1 );
+                final int pos2 = res.indexOf( "&",pos1 ) + 1;
+                if ( ( pos2 > 0 ) && ( pos2 < res.length() ) ) {
+                    tmpRes = tmpRes + res.substring(pos2);
                 }
+                res = tmpRes;
             }
-
-            return res;
-        } catch( UnsupportedEncodingException e ) {
-            log.fatal( "Unsupported encoding", e );
-            return "";
         }
+
+        return res;
     }
 
     /**
@@ -1211,12 +1207,11 @@ public class WikiEngine
      *  @since 1.5.3
      *  @return The content encoding (either UTF-8 or ISO-8859-1).
      */
-    public String getContentEncoding()
-    {
-        if( m_useUTF8 )
-            return "UTF-8";
-
-        return "ISO-8859-1";
+    public Charset getContentEncoding() {
+        if( m_useUTF8 ) {
+            return StandardCharsets.UTF_8;
+        }
+        return StandardCharsets.ISO_8859_1;
     }
 
     /**
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/ajax/WikiAjaxDispatcherServlet.java
 
b/jspwiki-main/src/main/java/org/apache/wiki/ajax/WikiAjaxDispatcherServlet.java
index 31bf209..5c06d50 100644
--- 
a/jspwiki-main/src/main/java/org/apache/wiki/ajax/WikiAjaxDispatcherServlet.java
+++ 
b/jspwiki-main/src/main/java/org/apache/wiki/ajax/WikiAjaxDispatcherServlet.java
@@ -121,8 +121,7 @@ public class WikiAjaxDispatcherServlet extends HttpServlet {
      * @throws IOException
      * @throws ServletException if no registered servlet can be found
      */
-    private void performAction(HttpServletRequest req, HttpServletResponse res)
-            throws IOException, ServletException {
+    private void performAction( final HttpServletRequest req, final 
HttpServletResponse res ) throws IOException, ServletException {
         final String path = req.getRequestURI();
         final String servletName = getServletName(path);
         if (servletName!=null) {
@@ -130,8 +129,8 @@ public class WikiAjaxDispatcherServlet extends HttpServlet {
             if (container != null) {
                 final WikiAjaxServlet servlet = container.servlet;
                 if ( validatePermission(req,container) ) {
-                    req.setCharacterEncoding(m_engine.getContentEncoding());
-                    res.setCharacterEncoding(m_engine.getContentEncoding());
+                    
req.setCharacterEncoding(m_engine.getContentEncoding().displayName());
+                    
res.setCharacterEncoding(m_engine.getContentEncoding().displayName());
                     final String actionName = 
AjaxUtil.getNextPathPart(req.getRequestURI(), servlet.getServletMapping());
                     log.debug("actionName="+actionName);
                     final Object params = req.getParameter("params");
@@ -184,7 +183,7 @@ public class WikiAjaxDispatcherServlet extends HttpServlet {
     /**
      * Find the {@link AjaxServletContainer} as registered in {@link 
#registerServlet}.
      *
-     * @param servletName the name of the servlet from {@link #getServletName}
+     * @param servletAlias the name of the servlet from {@link #getServletName}
      * @return The first servlet found, or null.
      */
     private AjaxServletContainer findServletContainer(String servletAlias) {
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/auth/AuthorizationManager.java 
b/jspwiki-main/src/main/java/org/apache/wiki/auth/AuthorizationManager.java
index a892249..6d27142 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/auth/AuthorizationManager.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/auth/AuthorizationManager.java
@@ -453,8 +453,7 @@ public class AuthorizationManager {
      * @param properties the set of properties used to initialize the wiki 
engine
      * @throws WikiException if the AuthorizationManager cannot be initialized
      */
-    public void initialize( WikiEngine engine, Properties properties ) throws 
WikiException
-    {
+    public void initialize( final WikiEngine engine, final Properties 
properties ) throws WikiException {
         m_engine = engine;
 
         //
@@ -464,32 +463,26 @@ public class AuthorizationManager {
         m_authorizer.initialize( engine, properties );
 
         // Initialize local security policy
-        try
-        {
-            String policyFileName = properties.getProperty( POLICY, 
DEFAULT_POLICY );
-            URL policyURL = AuthenticationManager.findConfigFile( engine, 
policyFileName );
+        try {
+            final String policyFileName = properties.getProperty( POLICY, 
DEFAULT_POLICY );
+            final URL policyURL = AuthenticationManager.findConfigFile( 
engine, policyFileName );
 
-            if (policyURL != null)
-            {
-                File policyFile = new File( policyURL.toURI().getPath() );
+            if (policyURL != null) {
+                final File policyFile = new File( policyURL.toURI().getPath() 
);
                 log.info("We found security policy URL: " + policyURL + " and 
transformed it to file " + policyFile.getAbsolutePath());
-                m_localPolicy = new LocalPolicy( policyFile, 
engine.getContentEncoding() );
+                m_localPolicy = new LocalPolicy( policyFile, 
engine.getContentEncoding().displayName() );
                 m_localPolicy.refresh();
                 log.info( "Initialized default security policy: " + 
policyFile.getAbsolutePath() );
-            }
-            else
-            {
-                String sb = "JSPWiki was unable to initialize the default 
security policy (WEB-INF/jspwiki.policy) file. " +
-                            "Please ensure that the jspwiki.policy file exists 
in the default location. " +
-                                   "This file should exist regardless of the 
existance of a global policy file. " +
-                            "The global policy file is identified by the 
java.security.policy variable. ";
-                WikiSecurityException wse = new WikiSecurityException( sb );
+            } else {
+                final String sb = "JSPWiki was unable to initialize the 
default security policy (WEB-INF/jspwiki.policy) file. " +
+                                  "Please ensure that the jspwiki.policy file 
exists in the default location. " +
+                                         "This file should exist regardless of 
the existance of a global policy file. " +
+                                  "The global policy file is identified by the 
java.security.policy variable. ";
+                final WikiSecurityException wse = new WikiSecurityException( 
sb );
                 log.fatal( sb, wse );
                 throw wse;
             }
-        }
-        catch ( Exception e)
-        {
+        } catch ( final Exception e) {
             log.error("Could not initialize local security policy: " + 
e.getMessage() );
             throw new WikiException( "Could not initialize local security 
policy: " + e.getMessage(), e );
         }
@@ -504,34 +497,24 @@ public class AuthorizationManager {
      * @return a Authorizer used to get page authorization information
      * @throws WikiException
      */
-    private Authorizer getAuthorizerImplementation( Properties props ) throws 
WikiException
-    {
-        String authClassName = props.getProperty( PROP_AUTHORIZER, 
DEFAULT_AUTHORIZER );
-        return (Authorizer) locateImplementation( authClassName );
+    private Authorizer getAuthorizerImplementation( Properties props ) throws 
WikiException {
+        final String authClassName = props.getProperty( PROP_AUTHORIZER, 
DEFAULT_AUTHORIZER );
+        return ( Authorizer )locateImplementation( authClassName );
     }
 
-    private Object locateImplementation( String clazz ) throws WikiException
-    {
-        if ( clazz != null )
-        {
-            try
-            {
-                Class<?> authClass = ClassUtil.findClass( 
"org.apache.wiki.auth.authorize", clazz );
+    private Object locateImplementation( final String clazz ) throws 
WikiException {
+        if ( clazz != null ) {
+            try {
+                Class< ? > authClass = ClassUtil.findClass( 
"org.apache.wiki.auth.authorize", clazz );
                 Object impl = authClass.newInstance();
                 return impl;
-            }
-            catch( ClassNotFoundException e )
-            {
+            } catch( ClassNotFoundException e ) {
                 log.fatal( "Authorizer " + clazz + " cannot be found", e );
                 throw new WikiException( "Authorizer " + clazz + " cannot be 
found", e );
-            }
-            catch( InstantiationException e )
-            {
+            } catch( InstantiationException e ) {
                 log.fatal( "Authorizer " + clazz + " cannot be created", e );
                 throw new WikiException( "Authorizer " + clazz + " cannot be 
created", e );
-            }
-            catch( IllegalAccessException e )
-            {
+            } catch( IllegalAccessException e ) {
                 log.fatal( "You are not allowed to access this authorizer 
class", e );
                 throw new WikiException( "You are not allowed to access this 
authorizer class", e );
             }
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/diff/ExternalDiffProvider.java 
b/jspwiki-main/src/main/java/org/apache/wiki/diff/ExternalDiffProvider.java
index 2b78637..48b920f 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/diff/ExternalDiffProvider.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/diff/ExternalDiffProvider.java
@@ -19,12 +19,6 @@
 
 package org.apache.wiki.diff;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.Properties;
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
@@ -32,6 +26,14 @@ import 
org.apache.wiki.api.exceptions.NoRequiredPropertyException;
 import org.apache.wiki.util.FileUtil;
 import org.apache.wiki.util.TextUtil;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.Properties;
+
 /**
  * This DiffProvider allows external command line tools to be used to generate
  * the diff.
@@ -47,7 +49,7 @@ public class ExternalDiffProvider implements DiffProvider
     public static final String PROP_DIFFCOMMAND    = "jspwiki.diffCommand";
 
     private String m_diffCommand = null;
-    private String m_encoding;
+    private Charset m_encoding;
 
     private static final char DIFF_ADDED_SYMBOL    = '+';
     private static final char DIFF_REMOVED_SYMBOL  = '-';
@@ -118,7 +120,7 @@ public class ExternalDiffProvider implements DiffProvider
             String output = FileUtil.runSimpleCommand(cmd, f1.getParent());
 
             // FIXME: Should this rely on the system default encoding?
-            String rawWikiDiff = new String(output.getBytes("ISO-8859-1"), 
m_encoding);
+            String rawWikiDiff = new String( output.getBytes( 
StandardCharsets.ISO_8859_1 ), m_encoding );
 
             String htmlWikiDiff = TextUtil.replaceEntities( rawWikiDiff );
 
@@ -127,21 +129,17 @@ public class ExternalDiffProvider implements DiffProvider
             else
                 diff = htmlWikiDiff;
 
-        }
-        catch (IOException e)
-        {
+        } catch (IOException e) {
             log.error("Failed to do file diff", e);
-        }
-        catch (InterruptedException e)
-        {
+        } catch (InterruptedException e) {
             log.error("Interrupted", e);
-        }
-        finally
-        {
-            if( f1 != null )
+        } finally {
+            if( f1 != null ) {
                 f1.delete();
-            if( f2 != null )
+            }
+            if( f2 != null ) {
                 f2.delete();
+            }
         }
 
         return diff;
@@ -154,10 +152,10 @@ public class ExternalDiffProvider implements DiffProvider
      * green, those starting with - reddish (hm, got to think of color 
blindness
      * here...).
      */
-    static String colorizeDiff(String diffText) throws IOException
-    {
-        if( diffText == null )
+    static String colorizeDiff(String diffText) throws IOException {
+        if( diffText == null ) {
             return "Invalid diff - probably something wrong with server 
setup.";
+        }
 
         String line = null;
         String start = null;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/filters/SpamFilter.java 
b/jspwiki-main/src/main/java/org/apache/wiki/filters/SpamFilter.java
index 12a0752..3ee127c 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/filters/SpamFilter.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/filters/SpamFilter.java
@@ -18,25 +18,7 @@
  */
 package org.apache.wiki.filters;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.Random;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.PageContext;
-
+import net.sf.akismet.Akismet;
 import org.apache.commons.lang3.time.StopWatch;
 import org.apache.log4j.Logger;
 import org.apache.oro.text.regex.MalformedPatternException;
@@ -69,7 +51,24 @@ import org.suigeneris.jrcs.diff.delta.DeleteDelta;
 import org.suigeneris.jrcs.diff.delta.Delta;
 import org.suigeneris.jrcs.diff.myers.MyersDiff;
 
-import net.sf.akismet.Akismet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.PageContext;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.Random;
+import java.util.StringTokenizer;
+import java.util.Vector;
 
 
 /**
@@ -1084,12 +1083,11 @@ public class SpamFilter extends BasicPageFilter {
      * @param pageContext The PageContext
      * @return A HTML string which contains input fields for the SpamFilter.
      */
-    public static final String insertInputFields( PageContext pageContext ) {
-        WikiContext ctx = WikiContext.findContext( pageContext );
-        WikiEngine engine = ctx.getEngine();
-
-        StringBuilder sb = new StringBuilder();
-        if( engine.getContentEncoding().equals( "UTF-8" ) ) {
+    public static final String insertInputFields( final PageContext 
pageContext ) {
+        final WikiContext ctx = WikiContext.findContext( pageContext );
+        final WikiEngine engine = ctx.getEngine();
+        final StringBuilder sb = new StringBuilder();
+        if( engine.getContentEncoding().equals( StandardCharsets.UTF_8 ) ) {
             sb.append( "<input name='encodingcheck' type='hidden' 
value='\u3041' />\n" );
         }
 
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentEncodingTag.java 
b/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentEncodingTag.java
index 482c323..a33a0d3 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentEncodingTag.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/tags/ContentEncodingTag.java
@@ -18,30 +18,25 @@
  */
 package org.apache.wiki.tags;
 
-import java.io.IOException;
-
 import org.apache.wiki.WikiEngine;
 
+import java.io.IOException;
+
 /**
  *  Returns the app name.
  *
  *  @since 2.0
  */
-public class ContentEncodingTag
-    extends WikiTagBase
-{
+public class ContentEncodingTag extends WikiTagBase {
+
     private static final long serialVersionUID = 0L;
 
     /**
      *  {@inheritDoc}
      */
-    public final int doWikiStartTag()
-        throws IOException
-    {
-        WikiEngine engine = m_wikiContext.getEngine();
-
+    public final int doWikiStartTag() throws IOException {
+        final WikiEngine engine = m_wikiContext.getEngine();
         pageContext.getOut().print( engine.getContentEncoding() );
-
         return SKIP_BODY;
     }
 }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java 
b/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java
index e6f6a70..c3ca5de 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/CommandResolver.java
@@ -18,14 +18,6 @@
  */
 package org.apache.wiki.ui;
 
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.log4j.Logger;
 import org.apache.wiki.InternalWikiException;
 import org.apache.wiki.WikiEngine;
@@ -36,6 +28,13 @@ import org.apache.wiki.auth.GroupPrincipal;
 import org.apache.wiki.parser.MarkupParser;
 import org.apache.wiki.util.TextUtil;
 
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
 /**
  * <p>Resolves special pages, JSPs and Commands on behalf of a
  * WikiEngine. CommandResolver will automatically resolve page names
@@ -429,35 +428,26 @@ public final class CommandResolver
      * @param request the HTTP request
      * @return the resolved page name
      */
-    protected String extractPageFromParameter( String requestContext, 
HttpServletRequest request )
-    {
+    protected String extractPageFromParameter( final String requestContext, 
final HttpServletRequest request ) {
         String page;
 
         // Extract the page name from the URL directly
-        try
-        {
+        try {
             page = m_engine.getURLConstructor().parsePage( requestContext, 
request, m_engine.getContentEncoding() );
-            if ( page != null )
-            {
-                try
-                {
+            if ( page != null ) {
+                try {
                     // Look for singular/plural variants; if one
                     // not found, take the one the user supplied
-                    String finalPage = getFinalPageName( page );
-                    if ( finalPage != null )
-                    {
+                    final String finalPage = getFinalPageName( page );
+                    if ( finalPage != null ) {
                         page = finalPage;
                     }
-                }
-                catch( ProviderException e )
-                {
+                } catch( final ProviderException e ) {
                     // FIXME: Should not ignore!
                 }
                 return page;
             }
-        }
-        catch( IOException e )
-        {
+        } catch( final IOException e ) {
             m_log.error( "Unable to create context", e );
             throw new InternalWikiException( "Big internal booboo, please 
check logs." , e);
         }
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiJSPFilter.java 
b/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiJSPFilter.java
index 21dbf87..41d55c9 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiJSPFilter.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiJSPFilter.java
@@ -43,6 +43,7 @@ import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 
 
 /**
@@ -102,8 +103,8 @@ public class WikiJSPFilter extends WikiServletFilter
             responseWrapper = new JSPWikiServletResponseWrapper( 
(HttpServletResponse)response, m_wiki_encoding, useEncoding);
 
             // fire PAGE_REQUESTED event
-            String pagename = DefaultURLConstructor.parsePageFromURL(
-                    (HttpServletRequest)request, 
response.getCharacterEncoding() );
+            String pagename = DefaultURLConstructor.parsePageFromURL( ( 
HttpServletRequest )request,
+                                                                      
Charset.forName( response.getCharacterEncoding() ) );
             fireEvent( WikiPageEvent.PAGE_REQUESTED, pagename );
 
             super.doFilter( request, responseWrapper, chain );
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiServletFilter.java 
b/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiServletFilter.java
index 2fafb2e..45a95e1 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiServletFilter.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/ui/WikiServletFilter.java
@@ -18,16 +18,8 @@
  */
 package org.apache.wiki.ui;
 
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.servlet.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-
 import org.apache.log4j.Logger;
 import org.apache.log4j.NDC;
-
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.WikiSession;
@@ -35,6 +27,18 @@ import org.apache.wiki.auth.SessionMonitor;
 import org.apache.wiki.auth.WikiSecurityException;
 import org.apache.wiki.tags.WikiTagBase;
 
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.IOException;
+import java.io.PrintWriter;
+
 /**
  * Filter that verifies that the {@link org.apache.wiki.WikiEngine} is 
running, and
  * sets the authentication status for the user's WikiSession. Each HTTP request
@@ -129,10 +133,10 @@ public class WikiServletFilter implements Filter
         }   
         
         // If we haven't done so, wrap the request
-        HttpServletRequest httpRequest = (HttpServletRequest) request;
+        HttpServletRequest httpRequest = ( HttpServletRequest )request;
         
         // Set the character encoding
-        httpRequest.setCharacterEncoding( m_engine.getContentEncoding() );
+        httpRequest.setCharacterEncoding( 
m_engine.getContentEncoding().displayName() );
         
         if ( !isWrapped( request ) )
         {
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/url/DefaultURLConstructor.java 
b/jspwiki-main/src/main/java/org/apache/wiki/url/DefaultURLConstructor.java
index 383043c..9a72a4d 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/url/DefaultURLConstructor.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/url/DefaultURLConstructor.java
@@ -26,7 +26,7 @@ import org.apache.wiki.ui.CommandResolver;
 import org.apache.wiki.util.TextUtil;
 
 import javax.servlet.http.HttpServletRequest;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 import java.util.Properties;
 
 /**
@@ -36,9 +36,8 @@ import java.util.Properties;
  *
  *  @since 2.2
  */
-public class DefaultURLConstructor
-    implements URLConstructor
-{
+public class DefaultURLConstructor implements URLConstructor {
+
     protected WikiEngine m_engine;
 
     /**
@@ -51,11 +50,8 @@ public class DefaultURLConstructor
      *
      * {@inheritDoc}
      */
-    public void initialize( WikiEngine engine,
-                            Properties properties )
-    {
+    public void initialize( final WikiEngine engine, final Properties 
properties ) {
         m_engine = engine;
-
         m_pathPrefix = engine.getBaseURL() + "/";
     }
 
@@ -76,11 +72,12 @@ public class DefaultURLConstructor
      *                 the setting in jspwiki.properties.
      * @return A replacement.
      */
-    protected final String doReplacement( String baseptrn, String name, 
boolean absolute )
-    {
+    protected final String doReplacement( String baseptrn, final String name, 
final boolean absolute ) {
         String baseurl = m_pathPrefix;
 
-        if( absolute ) baseurl = m_engine.getBaseURL() + "/";
+        if( absolute ) {
+            baseurl = m_engine.getBaseURL() + "/";
+        }
 
         baseptrn = TextUtil.replaceString( baseptrn, "%u", baseurl );
         baseptrn = TextUtil.replaceString( baseptrn, "%U", 
m_engine.getBaseURL() );
@@ -97,10 +94,8 @@ public class DefaultURLConstructor
      *
      *  We also convert any %2F's back to slashes to make nicer-looking URLs.
      */
-    private String encodeURI( String uri )
-    {
+    private String encodeURI( String uri ) {
         uri = m_engine.encodeName(uri);
-
         uri = StringUtils.replace( uri, "+", "%20" );
         uri = StringUtils.replace( uri, "%2F", "/" );
 
@@ -114,17 +109,14 @@ public class DefaultURLConstructor
      * @return A pattern for replacement.
      * @throws IllegalArgumentException if the context cannot be found
      */
-    public static String getURLPattern( String context, String name )
-        throws IllegalArgumentException
-    {
-        if( context.equals(WikiContext.VIEW) && name == null)
-        {
+    public static String getURLPattern( final String context, final String 
name ) throws IllegalArgumentException {
+        if( context.equals(WikiContext.VIEW) && name == null) {
             // FIXME
             return "%uWiki.jsp";
         }
 
         // Find the action matching our pattern (could throw exception)
-        Command command = CommandResolver.findCommand( context );
+        final Command command = CommandResolver.findCommand( context );
 
         return command.getURLPattern();
     }
@@ -132,10 +124,7 @@ public class DefaultURLConstructor
     /**
      *  Constructs the actual URL based on the context.
      */
-    private String makeURL( String context,
-                            String name,
-                            boolean absolute )
-    {
+    private String makeURL( final String context, final String name, final 
boolean absolute ) {
         return doReplacement( getURLPattern(context,name), name, absolute );
     }
 
@@ -145,31 +134,19 @@ public class DefaultURLConstructor
      *
      *  {@inheritDoc}
      */
-    public String makeURL( String context,
-                           String name,
-                           boolean absolute,
-                           String parameters )
-    {
-        if( parameters != null && parameters.length() > 0 )
-        {
-            if( context.equals(WikiContext.ATTACH) )
-            {
+    public String makeURL( final String context, final String name, final 
boolean absolute, String parameters ) {
+        if( parameters != null && parameters.length() > 0 ) {
+            if( context.equals(WikiContext.ATTACH) ) {
                 parameters = "?"+parameters;
-            }
-            else if( context.equals(WikiContext.NONE) )
-            {
+            } else if( context.equals(WikiContext.NONE) ) {
                 parameters = (name.indexOf('?') != -1 ) ? "&amp;" : "?" + 
parameters;
-            }
-            else
-            {
+            } else {
                 parameters = "&amp;"+parameters;
             }
-        }
-        else
-        {
+        } else {
             parameters = "";
         }
-        return makeURL( context, name, absolute )+parameters;
+        return makeURL( context, name, absolute ) + parameters;
     }
 
     /**
@@ -178,15 +155,9 @@ public class DefaultURLConstructor
      *
      *  {@inheritDoc}
      */
-    public String parsePage( String context,
-                             HttpServletRequest request,
-                             String encoding )
-        throws UnsupportedEncodingException
-    {
+    public String parsePage( final String context, final HttpServletRequest 
request, final Charset encoding ) {
         String pagereq = request.getParameter( "page" );
-
-        if( context.equals(WikiContext.ATTACH) )
-        {
+        if( context.equals(WikiContext.ATTACH) ) {
             pagereq = parsePageFromURL( request, encoding );
         }
 
@@ -194,42 +165,6 @@ public class DefaultURLConstructor
     }
 
     /**
-     *  There's a bug in Tomcat until 5.5.16 at least: The "+" sign is not
-     *  properly decoded by the servlet container, and therefore 
request.getPathInfo()
-     *  will return faulty results for paths which contains + signs to signify 
spaces.
-     *  <p>
-     *  This method provides a workaround by simply parsing the 
getRequestURI(), which
-     *  is returned from the servlet container undedecoded.
-     *  <p>
-     *  Please see <a 
href="http://issues.apache.org/bugzilla/show_bug.cgi?id=39278";>Tomcat Bug 
39278</a>
-     *  for more information.
-     *
-     *  @param request A HTTP servlet request
-     *  @param encoding The used encoding
-     *  @return a String, decoded by JSPWiki, specifying extra path 
information that comes
-     *          after the servlet path but before the query string in the 
request URL;
-     *          or null if the URL does not have any extra path information
-     *  @throws UnsupportedEncodingException
-     */
-    /*
-    private static String getPathInfo( HttpServletRequest request, String 
encoding )
-        throws UnsupportedEncodingException
-    {
-        String c = request.getContextPath(); // Undecoded
-        String s = request.getServletPath(); // Decoded
-        String u = request.getRequestURI();  // Undecoded
-
-        c = URLDecoder.decode( c, encoding );
-        u = URLDecoder.decode( u, encoding );
-
-        String pi = u.substring( s.length()+c.length() );
-
-        if( pi.length() == 0 ) pi = null;
-
-        return pi;
-    }
-    */
-    /**
      *  Takes the name of the page from the request URI.
      *  The initial slash is also removed.  If there is no page,
      *  returns null.
@@ -238,29 +173,18 @@ public class DefaultURLConstructor
      *  @param encoding The encoding to use
      *
      *  @return a parsed page name, or null, if it cannot be found
-     *
-     *  @throws UnsupportedEncodingException If the encoding is not recognized.
      */
-    public static String parsePageFromURL( HttpServletRequest request,
-                                           String encoding )
-        throws UnsupportedEncodingException
-    {
-        String name = request.getPathInfo();
-
-        if( name == null || name.length() <= 1 )
-        {
+    public static String parsePageFromURL( final HttpServletRequest request, 
final Charset encoding ) {
+        final String name = request.getPathInfo();
+        if( name == null || name.length() <= 1 ) {
             return null;
-        }
-        else if( name.charAt(0) == '/' )
-        {
-            name = name.substring(1);
+        } else if( name.charAt(0) == '/' ) {
+            return name.substring(1);
         }
 
         //
-        //  This is required, because by default all URLs are handled
-        //  as Latin1, even if they are really UTF-8.
+        //  This is required, because by default all URLs are handled as 
Latin1, even if they are really UTF-8.
         //
-
         // name = TextUtil.urlDecode( name, encoding );
 
         return name;
@@ -271,11 +195,10 @@ public class DefaultURLConstructor
      *  This method is not needed for the DefaultURLConstructor.
      *
      * @param request The HTTP Request that was used to end up in this page.
-     * @return "Wiki.jsp", "PageInfo.jsp", etc.  Just return the name,
-     *         JSPWiki will figure out the page.
+     * @return "Wiki.jsp", "PageInfo.jsp", etc.  Just return the name, JSPWiki 
will figure out the page.
      */
-    public String getForwardPage( HttpServletRequest request )
-    {
+    public String getForwardPage( final HttpServletRequest request ) {
         return "Wiki.jsp";
     }
+
 }
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/url/ShortURLConstructor.java 
b/jspwiki-main/src/main/java/org/apache/wiki/url/ShortURLConstructor.java
index d4744c4..f686d50 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/url/ShortURLConstructor.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/url/ShortURLConstructor.java
@@ -18,18 +18,16 @@
  */
 package org.apache.wiki.url;
 
-import java.io.UnsupportedEncodingException;
-import java.util.Properties;
-
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.log4j.Logger;
-
 import org.apache.wiki.InternalWikiException;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiEngine;
 import org.apache.wiki.util.TextUtil;
 
+import javax.servlet.http.HttpServletRequest;
+import java.nio.charset.Charset;
+import java.util.Properties;
+
 
 /**
  *  Provides a way to do short URLs of the form /wiki/PageName.
@@ -200,16 +198,10 @@ public class ShortURLConstructor
     /**
      * {@inheritDoc}
      */
-    public String parsePage( String context,
-                             HttpServletRequest request,
-                             String encoding )
-        throws UnsupportedEncodingException
-    {
-        String pagereq = request.getParameter( "page" );
-
-        if( pagereq == null )
-        {
-            pagereq = parsePageFromURL( request, encoding );
+    public String parsePage( final String context, final HttpServletRequest 
request, final Charset encoding ) {
+        final String pagereq = request.getParameter( "page" );
+        if( pagereq == null ) {
+            return parsePageFromURL( request, encoding );
         }
 
         return pagereq;
diff --git a/jspwiki-main/src/main/java/org/apache/wiki/url/URLConstructor.java 
b/jspwiki-main/src/main/java/org/apache/wiki/url/URLConstructor.java
index 1f1cf0f..67c7da5 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/url/URLConstructor.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/url/URLConstructor.java
@@ -18,12 +18,13 @@
  */
 package org.apache.wiki.url;
 
-import java.util.Properties;
-import java.io.IOException;
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.wiki.WikiEngine;
 
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.Properties;
+
 
 /**
  *  Provides an interface through which JSPWiki constructs URLs.
@@ -67,7 +68,7 @@ public interface URLConstructor {
      *  @return This method must return the name of the resource.
      *  @throws IOException If parsing failes
      */
-    String parsePage( String context, HttpServletRequest request, String 
encoding ) throws IOException;
+    String parsePage( String context, HttpServletRequest request, Charset 
encoding ) throws IOException;
 
     /**
      *  Returns information which JSP page should continue handling this type 
of request.

Reply via email to