Updated Branches:
  refs/heads/master 5e453cfd8 -> 23f3c9ad7

WICKET-5374 don't let XhtmlRenderer use a StringBufferInputStream, as it
fails on non-ASCII characters


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/23f3c9ad
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/23f3c9ad
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/23f3c9ad

Branch: refs/heads/master
Commit: 23f3c9ad7778bd0155957c335f12c903c436d10a
Parents: 5e453cf
Author: svenmeier <[email protected]>
Authored: Thu Sep 26 12:03:46 2013 +0200
Committer: svenmeier <[email protected]>
Committed: Thu Sep 26 12:03:46 2013 +0200

----------------------------------------------------------------------
 .../wicket/examples/source/SourcesPage.java     | 62 ++++++++++----------
 1 file changed, 30 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/23f3c9ad/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
----------------------------------------------------------------------
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
index 6b0d1dc..5c5b0b4 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
@@ -16,11 +16,10 @@
  */
 package org.apache.wicket.examples.source;
 
-import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.net.JarURLConnection;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -33,8 +32,6 @@ import java.util.List;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 
-import com.uwyn.jhighlight.renderer.Renderer;
-import com.uwyn.jhighlight.renderer.XhtmlRendererFactory;
 import org.apache.wicket.Component;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
@@ -55,10 +52,15 @@ import 
org.apache.wicket.request.http.handler.ErrorCodeRequestHandler;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.lang.PackageName;
-import org.apache.wicket.util.string.*;
+import org.apache.wicket.util.string.AppendingStringBuffer;
+import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.uwyn.jhighlight.renderer.Renderer;
+import com.uwyn.jhighlight.renderer.XhtmlRendererFactory;
+
 /**
  * Displays the resources in a packages directory in a browsable format.
  * 
@@ -88,24 +90,17 @@ public class SourcesPage extends WebPage
                                return "";
                        }
 
-                       BufferedReader br = null;
                        String source = null;
+                       InputStream resourceAsStream = null;
                        try
                        {
-                           StringBuilder sb = new StringBuilder();
                                source = (name != null) ? name : 
sourceParam.toString();
-                               InputStream resourceAsStream = 
getPageTargetClass().getResourceAsStream(source);
+                               resourceAsStream = 
getPageTargetClass().getResourceAsStream(source);
                                if (resourceAsStream == null)
                                {
                                        return "Unable to read the source for " 
+ source;
                                }
-                               br = new BufferedReader(new 
InputStreamReader(resourceAsStream));
 
-                               while (br.ready())
-                               {
-                                       sb.append(br.readLine());
-                                       sb.append('\n');
-                               }
                                int lastDot = source.lastIndexOf('.');
                                if (lastDot != -1)
                                {
@@ -113,10 +108,14 @@ public class SourcesPage extends WebPage
                                        Renderer renderer = 
XhtmlRendererFactory.getRenderer(type);
                                        if (renderer != null)
                                        {
-                                               return 
renderer.highlight(source, sb.toString(), "UTF-8", true);
+                                               ByteArrayOutputStream output = 
new ByteArrayOutputStream();
+                                               renderer.highlight(source, 
resourceAsStream, output, "UTF-8", true);
+                                               return output.toString("UTF-8");
                                        }
                                }
-                               CharSequence escaped = 
Strings.escapeMarkup(sb.toString(), false, true);
+
+                               CharSequence escaped = 
Strings.escapeMarkup(IOUtils.toString(resourceAsStream),
+                                       false, true);
                                return Strings.replaceAll(escaped, "\n", "<br 
/>").toString();
                        }
                        catch (IOException e)
@@ -128,7 +127,7 @@ public class SourcesPage extends WebPage
                        }
                        finally
                        {
-                               IOUtils.closeQuietly(br);
+                               IOUtils.closeQuietly(resourceAsStream);
                        }
                }
        }
@@ -149,15 +148,16 @@ public class SourcesPage extends WebPage
                        return get(getPageTargetClass());
                }
 
-               private final void addResources(final AppendingStringBuffer 
relativePath, final File dir, List<String> resources)
+               private final void addResources(final AppendingStringBuffer 
relativePath, final File dir,
+                       List<String> resources)
                {
                        File[] files = dir.listFiles();
                        for (File file : files)
                        {
                                if (file.isDirectory())
                                {
-                                       addResources(new 
AppendingStringBuffer(relativePath).append(file.getName()).append('/'),
-                                               file, resources);
+                                       addResources(new 
AppendingStringBuffer(relativePath).append(file.getName())
+                                               .append('/'), file, resources);
                                }
                                else
                                {
@@ -307,16 +307,16 @@ public class SourcesPage extends WebPage
                                                @Override
                                                protected CharSequence getURL()
                                                {
-                                                       return 
urlFor(SourcesPage.class,
-                                                                         
SourcesPage.generatePageParameters(getPageTargetClass(),
-                                                                             
item.getModel().getObject()));
+                                                       return 
urlFor(SourcesPage.class, SourcesPage.generatePageParameters(
+                                                               
getPageTargetClass(), item.getModel().getObject()));
                                                }
 
                                                @Override
                                                protected void 
updateAjaxAttributes(AjaxRequestAttributes attributes)
                                                {
                                                        
super.updateAjaxAttributes(attributes);
-                                                       AjaxCallListener 
ajaxCallListener = new AjaxCallListener() {
+                                                       AjaxCallListener 
ajaxCallListener = new AjaxCallListener()
+                                                       {
                                                                @Override
                                                                public 
CharSequence getFailureHandler(Component component)
                                                                {
@@ -419,10 +419,8 @@ public class SourcesPage extends WebPage
                        @Override
                        public String getObject()
                        {
-                               return name != null ? name : 
getPage().getRequest()
-                                       .getRequestParameters()
-                                       .getParameterValue(SOURCE)
-                                       .toOptionalString();
+                               return name != null ? name : 
getPage().getRequest().getRequestParameters()
+                                       
.getParameterValue(SOURCE).toOptionalString();
                        }
 
                });
@@ -479,8 +477,8 @@ public class SourcesPage extends WebPage
                        {
                                if (log.isErrorEnabled())
                                {
-                                       log.error("user is trying to access 
class: " + pageParam +
-                                               " which is not in the scope of 
org.apache.wicket.examples");
+                                       log.error("user is trying to access 
class: " + pageParam
+                                               + " which is not in the scope 
of org.apache.wicket.examples");
                                }
                                throw new 
UnauthorizedInstantiationException(getClass());
                        }
@@ -489,8 +487,8 @@ public class SourcesPage extends WebPage
                        if (page == null)
                        {
                                getRequestCycle().replaceAllRequestHandlers(
-                                               new ErrorCodeRequestHandler(404,
-                                                               "Could not find 
sources for the page you requested"));
+                                       new ErrorCodeRequestHandler(404,
+                                               "Could not find sources for the 
page you requested"));
                        }
                }
                return page;

Reply via email to