Updated Branches: refs/heads/wicket-6.x dd336fe22 -> 28cac7193
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/28cac719 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/28cac719 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/28cac719 Branch: refs/heads/wicket-6.x Commit: 28cac7193fe84790dc890937404f739c19927eda Parents: dd336fe Author: svenmeier <[email protected]> Authored: Thu Sep 26 11:54:16 2013 +0200 Committer: svenmeier <[email protected]> Committed: Thu Sep 26 11:54:16 2013 +0200 ---------------------------------------------------------------------- .../wicket/examples/source/SourcesPage.java | 52 ++++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/28cac719/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..c9f28f4 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) { @@ -489,8 +489,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;
