Google 应用引擎+StampBarcode+pdf417 Api

Google app engine+StampBarcode+pdf417 Api

我想将我的 servlet 部署到 GAE,但收到以下错误

HTTP ERROR 500

访问/条形码时出现问题。原因:

java.awt.Rectangle is a restricted class. Please see the Google  App Engine developer's guide for more details.

原因:

java.lang.NoClassDefFoundError: java.awt.Rectangle 是受限制的 class。有关详细信息,请参阅 Google App Engine 开发人员指南。 在 com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:50) 在 com.barcodelib.barcode.a.b.a.(a.java) 在 com.barcodelib.barcode.a.b.c.(c.java) 在 com.barcodelib.barcode.a.i.(i.java) 在 com.barcodelib.barcode.PDF417.a(PDF417.java) 在 com.barcodelib.barcode.AbstractBarcode.renderBarcode(AbstractBarcode.java) 在 PDF417Barcodes.doGet(PDF417Barcodes.java:49) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

servlet
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException 
        { 
            try { 
                PDF417 barcode = new PDF417(); 
                barcode.setData("PDF417"); 

                ServletOutputStream servletoutputstream = response.getOutputStream(); 

                response.setContentType("image/jpeg"); 
                response.setHeader("Pragma", "no-cache"); 
                response.setHeader("Cache-Control", "no-cache"); 
                response.setDateHeader("Expires", 0); 

                // Generate PDF-417 barcode & output to ServletOutputStream
                barcode.renderBarcode(servletoutputstream); 

            } catch (Exception e) { 
                throw new ServletException(e); 
            } 
        } 

它在 tomcat 上工作正常,但在 GAE 上不工作,请帮助我。

GAE 不支持标准 JDK 中的所有 classes。请看以下link

https://cloud.google.com/appengine/docs/standard/java/jrewhitelist

在这里您会找到允许的 classes 列表。您的 pdf417 barcodelib 库似乎使用了不允许的 class。因此,您的应用程序将 运行 在标准和独立 tomcat 上,但不会在 GAE 上。

您的条形码库使用 java.awt.Rectangle,如错误消息所述,它是受限的 class。此限制仅适用于 GAE,它不是一般限制,这就是它在 Tomcat.

中起作用的原因

此页面 https://cloud.google.com/appengine/docs/standard/java/jrewhitelist 列出了所有 允许的 JRE classes,因此如果您直接或间接使用 class 不在那里列出它会失败。

您可以不使用 GAE,或者尝试找到一个宣传为 GAE 的库 "safe"(免责声明:我不知道是否存在这样的库)。