/*
- * Copyright 2008 Google Inc.
+ * Copyright 2008 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageMonochromeBitmapSource;
+import com.google.zxing.client.result.ParsedResult;
+import com.google.zxing.client.result.ResultParser;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import java.io.Writer;
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;
import java.util.logging.Logger;
/**
- * @author Sean Owen
+ * {@link HttpServlet} which decodes images containing barcodes. Given a URL, it will
+ * retrieve the image and decode it. It can also process image files uploaded via POST.
+ *
+ * @author Sean Owen (srowen@google.com)
*/
public final class DecodeServlet extends HttpServlet {
private static final long MAX_IMAGE_SIZE = 500000L;
- private static final long EMAIL_CHECK_INTERVAL = 60000L;
+ private static final long EMAIL_CHECK_INTERVAL = 2L * 60 * 1000;
private static final Logger log = Logger.getLogger(DecodeServlet.class.getName());
}
@Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String imageURIString = request.getParameter("u");
if (imageURIString == null || imageURIString.length() == 0) {
log.info("Decoding " + imageURI);
InputStream is = getResponse.getEntity().getContent();
try {
- processStream(is, response);
+ processStream(is, request, response);
} finally {
is.close();
}
} catch (HttpException he) {
getRequest.abort();
response.sendRedirect("badurl.jspx");
+ } catch (UnknownHostException uhe) {
+ getRequest.abort();
+ response.sendRedirect("badurl.jspx");
}
}
log.info("Decoding uploaded file");
InputStream is = item.getInputStream();
try {
- processStream(is, response);
+ processStream(is, request, response);
} finally {
is.close();
}
} else {
- throw new ServletException("File is too large: " + item.getSize());
+ response.sendRedirect("badimage.jspx");
}
break;
}
}
- private static void processStream(InputStream is, HttpServletResponse response) throws IOException {
+ private static void processStream(InputStream is, HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
BufferedImage image = ImageIO.read(is);
if (image == null) {
response.sendRedirect("badimage.jspx");
return;
}
- response.setContentType("text/plain");
- response.setCharacterEncoding("UTF-8");
- Writer out = new OutputStreamWriter(response.getOutputStream(), "UTF-8");
- try {
- out.write(result.getText());
- } finally {
- out.close();
+ if (request.getParameter("full") == null) {
+ response.setContentType("text/plain");
+ response.setCharacterEncoding("UTF8");
+ Writer out = new OutputStreamWriter(response.getOutputStream(), "UTF8");
+ try {
+ out.write(result.getText());
+ } finally {
+ out.close();
+ }
+ } else {
+ request.setAttribute("result", result);
+ byte[] rawBytes = result.getRawBytes();
+ if (rawBytes != null) {
+ request.setAttribute("rawBytesString", Arrays.toString(rawBytes));
+ } else {
+ request.setAttribute("rawBytesString", "(Not applicable)");
+ }
+ ParsedResult parsedResult = ResultParser.parseReaderResult(result);
+ request.setAttribute("parsedResult", parsedResult);
+ request.getRequestDispatcher("decoderesult.jspx").forward(request, response);
}
}