我遇到了GAE和Apache POI的问题。我无法在任何较旧的帖子中找到正确的答案,所以我会在这里解释我的问题。
我们正在编写一个简单的Web应用程序,它将XML文件与发送给它的数据转换为PDF,Word或HTML文件。一切都通过servlet运行(简单的请求/响应)。应显示/提供这些文件以供下载。
我们一直在使用Apache-Poi来创建像往常一样的Word文件。但是我遇到了在标题中添加图像的问题(从我到目前为止读到的Apache-POI的老问题)。该问题的解决方案是使用模板word文档并从那里复制粘贴标题,或者只是用数据填充它并作为回应发回。
在本地运行我的GAE-App时,这两种解决方案都能正常工作:模板word文件被加载并填充数据。部署后,我在尝试打开模板文件的地方出现安全异常:
**XWPFDocument doc = new XWPFDocument(template);**
"模板"是InputStream,它是项目结构中的File。
*Uncaught exception from servlet
java.lang.NoClassDefFoundError: com.sun.org.apache.xerces.internal.util.SecurityManager is a restricted class. Please see the Google App Engine developer's guide for more details.
at com.google.apphosting.runtime.security.shared.stub.com.sun.org.apache.xerces.internal.util.SecurityManager.<clinit>(SecurityManager.java)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:370)
at org.apache.poi.util.SAXHelper.trySetXercesSecurityManager(SAXHelper.java:89)
at org.apache.poi.util.SAXHelper.newXMLReader(SAXHelper.java:52)
at org.apache.poi.util.SAXHelper.getSAXReader(SAXHelper.java:106)
at org.apache.poi.util.SAXHelper.readSAXDocument(SAXHelper.java:123)
at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:376)
at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.<init>(ContentTypeManager.java:105)
at org.apache.poi.openxml4j.opc.internal.ZipContentTypeManager.<init>(ZipContentTypeManager.java:56)
at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:188)
at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:665)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:274)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:39)
at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:121)
at com.ebcont.profile.WordGenerator.generateWord(WordGenerator.java:100)
at com.ebcont.profile.DetailsServlet.renderWord(DetailsServlet.java:218)*
任何帮助都会受到赞赏,因为我现在已经坚持了几个月(感谢上帝,这仍然是一个小小的要求)。