Hey guys.
I'm trying to write an app that parses uploaded xml files into a document, lets the user deselect nodes, then export the xml with the selected nodes. My problem is, that it's working locally, but throws the following exception on the servers. As far as I can tell I only use whitelisted classes. You can check my project here. It's still not finished, have temporary solutions, but it's working(locally). I paste the related source below the stacktrace. javax.servlet.ServletException: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java: 240) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java: 152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: 542) at org.mortbay.jetty.HttpConnection $RequestHandler.headerComplete(HttpConnection.java:923) at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java: 76) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java: 135) at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: 260) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $2.handleRequest(RuntimePb.java:9669) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: 439) at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java: 573) at com.google.tracing.TraceContext$TraceContextRunnable $1.run(TraceContext.java:448) at com.google.tracing.TraceContext.runInContext(TraceContext.java: 688) at com.google.tracing.TraceContext $AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java: 326) at com.google.tracing.TraceContext $AbstractTraceContextCallback.runInInheritedContext(TraceContext.java: 318) at com.google.tracing.TraceContext $TraceContextRunnable.run(TraceContext.java:446) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1110) at java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:636) Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl at com.google.apphosting.runtime.jetty.SessionManager.deserialize(SessionManager.java: 421) at com.google.apphosting.runtime.jetty.SessionManager.loadSession(SessionManager.java: 315) at com.google.apphosting.runtime.jetty.SessionManager.getSession(SessionManager.java: 288) at org.mortbay.jetty.servlet.AbstractSessionManager.getHttpSession(AbstractSessionManager.java: 237) at org.mortbay.jetty.servlet.SessionHandler.setRequestedId(SessionHandler.java: 246) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java: 136) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java: 765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: 418) at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java: 238) ... 19 more Caused by: java.lang.ClassNotFoundException: com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl at com.google.apphosting.runtime.security.UserClassLoader.loadClass(UserClassLoader.java: 445) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.google.apphosting.runtime.jetty.SessionManager $DelegatingObjectInputStream.resolveClass(SessionManager.java:476) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java: 1592) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java: 1513) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java: 1749) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368) at java.util.HashMap.readObject(HashMap.java:1047) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43) at java.lang.reflect.Method.invoke(Method.java:616) at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java: 991) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java: 1865) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java: 1770) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java: 1963) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java: 1887) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java: 1770) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368) at com.google.apphosting.runtime.jetty.SessionManager.deserialize(SessionManager.java: 417) ... 27 more Upload servlet: import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; ..... public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { ServletFileUpload upload = new ServletFileUpload(); Document document = null; try{ FileItemIterator iter = upload.getItemIterator(request); while (iter.hasNext()) { FileItemStream item = iter.next(); if (item.getContentType().toLowerCase().indexOf("zip") < 0) { continue; } InputStream stream = item.openStream(); // Open the ZIP file ZipInputStream in = new ZipInputStream(stream); // Get the first entry ZipEntry entry = in.getNextEntry(); document = XMLUtils.getXml(in); // Close the streams in.close(); //only one file gets processed break; } } Method that parses creates the xml from the stream: import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; ... public static Document getXml(InputStream stream) throws ParserConfigurationException, SAXException, IOException { // Create JAXP document builder DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); // Parse xml data Document xml = parser.parse(stream); return xml; } Thanks for helping guys, Richie -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appengine@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.