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 ) ? "&" : "?" + parameters; - } - else - { + } else { parameters = "&"+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.
