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.

Reply via email to