我根据此处的示例编写了一个非常简单的应用程序。
当我尝试使用独立的 Jetty 9.2.10.v20150310(与 GAE Managed VM 使用的版本相同)运行它时,它工作正常(加载和保存)。当我尝试使用 Google Cloud SDK maven 插件运行它或将其部署到 App Engine 时,电子表格内容会加载,但 CSS 无法下载,并在服务器上出现异常:
[INFO] SEVERE: Failed to load media, /view/z_obs/lGAQ1/f14/0/ss_lGAQ1_t0_sheet_0.css
[INFO] java.lang.NullPointerException
[INFO] at org.zkoss.zss.ui.Spreadsheet.getMergeMatrixHelper(Spreadsheet.java:2755)
[INFO] at org.zkoss.zss.ui.Spreadsheet.prepareBasicStyleSheet(Spreadsheet.java:4144)
[INFO] at org.zkoss.zss.ui.Spreadsheet.getSheetDefaultRules0(Spreadsheet.java:4603)
[INFO] at org.zkoss.zss.ui.Spreadsheet.getSheetDefaultRules(Spreadsheet.java:4597)
[INFO] at org.zkoss.zss.ui.Spreadsheet.access$6200(Spreadsheet.java:219)
[INFO] at org.zkoss.zss.ui.Spreadsheet$ExtraCtrl.getMedia(Spreadsheet.java:3041)
[INFO] at org.zkoss.zk.au.http.AuDynaMediar.service(AuDynaMediar.java:128)
然后 UI 变得有点混乱 - 单元格选择突出显示的单元格长度不正确,并且尝试键入或格式化单元格的内容失败。我尝试了各种组合 - ZUL 和 JSP,使用 src 属性、bookProvider 属性 ins JSP 和 SelectorComposer 设置电子表格,有时上面提到的 CSS 下载得很好并且没有异常,或者稍后出现异常,但是在所有情况下,只要我对单元格进行更改,它们就会立即恢复,或者在尝试输入一个单元格后,我无法输入任何内容。从记录的异常中,我认为当前的书在操作过程中以某种方式为空,例如:
[INFO] java.lang.NullPointerException
[INFO] at org.zkoss.zss.ui.au.in.FetchActiveRangeCommand.process(FetchActiveRangeCommand.java:57)
和
[INFO] java.lang.NullPointerException
[INFO] at org.zkoss.zss.ui.au.in.AbstractCommand.getSheetUuid(AbstractCommand.java:37)
[INFO] at org.zkoss.zss.ui.au.in.CellFocusedCommand.process(CellFocusedCommand.java:55)
我按照此处的说明使应用程序对 GAE 更加友好,但除了会话序列化之外,我认为托管 VM 中不需要这些设置,并且它们没有任何区别。
从它在相同版本的独立 Jetty 上工作的事实来看,我认为可以假设 App Engine / Docker 以某种方式导致了这种情况。我能够使用使用修改后的 Jetty 6 的旧 GAE SDK 在本地运行它,但它不模拟生产环境。我无法部署到经典 GAE,因为 ZK 电子表格依赖于 java.awt.* 类。
我尝试使用默认的 Java 运行时,还尝试使用基于 gcr.io/google_appengine/jetty9 、 gcr.io/google_appengine/java-compat 和 gcr.io/google_appengine/jetty9-compat 的自定义运行时 - 似乎没有事情。
我想我可以尝试基于独立 Jetty(或任何应用程序服务器)的第三方 Docker 映像只是为了让事情正常工作,但我确实需要访问数据存储区和 blobstore。
任何处理此问题的帮助将不胜感激。