X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=zxingorg%2Fsrc%2Fcom%2Fgoogle%2Fzxing%2Fweb%2FDecodeServlet.java;h=e5ea0425b801c8103dcce5892aa9b69f0cc1d295;hb=fd091de0e28bee88b6785d395e23cb6a4b1dac0c;hp=6a67be7e87509ea885f795b69909d90f9a5b3a82;hpb=584a6a9fd65349a584eabe71749aeb2d8a14bbfa;p=zxing.git diff --git a/zxingorg/src/com/google/zxing/web/DecodeServlet.java b/zxingorg/src/com/google/zxing/web/DecodeServlet.java index 6a67be7e..e5ea0425 100644 --- a/zxingorg/src/com/google/zxing/web/DecodeServlet.java +++ b/zxingorg/src/com/google/zxing/web/DecodeServlet.java @@ -28,6 +28,7 @@ import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.http.Header; import org.apache.http.HttpException; import org.apache.http.HttpMessage; @@ -35,9 +36,9 @@ import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; -import org.apache.http.conn.PlainSocketFactory; -import org.apache.http.conn.Scheme; -import org.apache.http.conn.SchemeRegistry; +import org.apache.http.conn.scheme.PlainSocketFactory; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; @@ -57,10 +58,10 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; +import java.net.SocketException; import java.net.URI; import java.net.URISyntaxException; import java.net.UnknownHostException; -import java.util.Arrays; import java.util.Hashtable; import java.util.List; import java.util.Timer; @@ -160,7 +161,12 @@ public final class DecodeServlet extends HttpServlet { } finally { is.close(); } - } catch (InterruptedException ie) { + } catch (IllegalArgumentException iae) { + // Thrown if hostname is bad or null + getRequest.abort(); + response.sendRedirect("badurl.jspx"); + } catch (SocketException se) { + // Thrown if hostname is bad or null getRequest.abort(); response.sendRedirect("badurl.jspx"); } catch (HttpException he) { @@ -229,8 +235,8 @@ public final class DecodeServlet extends HttpServlet { if (request.getParameter("full") == null) { response.setContentType("text/plain"); - response.setCharacterEncoding("UTF-8"); - Writer out = new OutputStreamWriter(response.getOutputStream(), "UTF-8"); + response.setCharacterEncoding("UTF8"); + Writer out = new OutputStreamWriter(response.getOutputStream(), "UTF8"); try { out.write(result.getText()); } finally { @@ -240,12 +246,24 @@ public final class DecodeServlet extends HttpServlet { request.setAttribute("result", result); byte[] rawBytes = result.getRawBytes(); if (rawBytes != null) { - request.setAttribute("rawBytesString", Arrays.toString(rawBytes)); + request.setAttribute("rawBytesString", arrayToString(rawBytes)); } else { request.setAttribute("rawBytesString", "(Not applicable)"); } - ParsedResult parsedResult = ResultParser.parseReaderResult(result); + String text = result.getText(); + if (text != null) { + request.setAttribute("text", StringEscapeUtils.escapeXml(text)); + } else { + request.setAttribute("text", "(Not applicable)"); + } + ParsedResult parsedResult = ResultParser.parseResult(result); request.setAttribute("parsedResult", parsedResult); + String displayResult = parsedResult.getDisplayResult(); + if (displayResult != null) { + request.setAttribute("displayResult", StringEscapeUtils.escapeXml(displayResult)); + } else { + request.setAttribute("displayResult", "(Not applicable)"); + } request.getRequestDispatcher("decoderesult.jspx").forward(request, response); } } @@ -261,6 +279,28 @@ public final class DecodeServlet extends HttpServlet { return true; } + private static String arrayToString(byte[] bytes) { + int length = bytes.length; + StringBuilder result = new StringBuilder(length << 2); + int i = 0; + while (i < length) { + int max = Math.min(i + 8, length); + for (int j = i; j < max; j++) { + int value = bytes[j] & 0xFF; + result.append(Integer.toHexString(value / 16)); + result.append(Integer.toHexString(value % 16)); + result.append(' '); + } + result.append('\n'); + i += 8; + } + for (int j = i - 8; j < length; j++) { + result.append(Integer.toHexString(bytes[j] & 0xFF)); + result.append(' '); + } + return result.toString(); + } + @Override public void destroy() { log.config("DecodeServlet shutting down...");