I am trying out protocol buffers for the first time, and have written a simple client and servlet to send and receive the PB. It will run on App Engine. However every time I try it hits a NoClassDefFoundError for GeneratedMessages.
The error is: ov 27, 2009 12:54:38 PM com.google.apphosting.utils.jetty.JettyLogger warn WARNING: Error for /testfileupload java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessage at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:700) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java: 124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$000(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:319) at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass (IsolatedAppClassLoader.java:151) at java.lang.ClassLoader.loadClass(ClassLoader.java:254) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:399) at my.testfiletransfer.TestFileUploadServlet.doGet (TestFileUploadServlet.java:28) at my.testfiletransfer.TestFileUploadServlet.doPost (TestFileUploadServlet.java:20) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: 487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter (ServletHandler.java:1093) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter (ServletHandler.java:1084) at com.google.appengine.tools.development.StaticFileFilter.doFilter (StaticFileFilter.java:121) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter (ServletHandler.java:1084) at org.mortbay.jetty.servlet.ServletHandler.handle (ServletHandler.java:360) at org.mortbay.jetty.security.SecurityHandler.handle (SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.java:712) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: 405) at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:54) at org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:139) at com.google.appengine.tools.development.JettyContainerService $ApiProxyHandler.handle(JettyContainerService.java:342) at org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:139) at org.mortbay.jetty.Server.handle(Server.java:313) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: 506) at org.mortbay.jetty.HttpConnection$RequestHandler.content (HttpConnection.java:844) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) at org.mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:396) at org.mortbay.thread.BoundedThreadPool$PoolThread.run (BoundedThreadPool.java:442) Caused by: java.lang.ClassNotFoundException: com.google.protobuf.GeneratedMessage at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:319) at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass (IsolatedAppClassLoader.java:151) at java.lang.ClassLoader.loadClass(ClassLoader.java:254) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:399) ... 39 more ------------------------------------------------------------------------------------------------------ The client is: package my.testfiletransfer; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import my.tft.protos.RandomMessageProtos.Note; import my.tft.protos.RandomMessageProtos.RandomMessage; public class TestFileUploadClient { public static void main(String[] args) { BufferedReader in = null; try { System.out.println("starting client"); File source = new File("/Users/darkmaster108/Documents/blarg.txt"); URL url = new URL("http://localhost:8080/testfileupload"); URLConnection urlc = url.openConnection(); urlc.setDoOutput(true); urlc.connect(); RandomMessage.Builder randomMessage = RandomMessage.newBuilder(); Note.Builder note = Note.newBuilder(); note.setName(source.getName()); StringBuffer sb = new StringBuffer(); in = new BufferedReader(new FileReader(source)); String line; while ((line = in.readLine()) != null) sb.append(line); note.setMessage(sb.toString()); randomMessage.addNote(note); randomMessage.build().writeTo(urlc.getOutputStream()); urlc.getOutputStream().close(); BufferedReader rd = new BufferedReader(new InputStreamReader(urlc .getInputStream())); System.out.println("Respose is:"); while ((line = rd.readLine()) != null) { System.out.println(line); } rd.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } // finally } } ------------------------------------------------------------------------------------------------------ The server is: package my.testfiletransfer; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import my.tft.protos.RandomMessageProtos.RandomMessage; @SuppressWarnings("serial") public class TestFileUploadServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { doGet(req, resp); } public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { try { InputStream is = req.getInputStream(); RandomMessage randomMessage = RandomMessage.parseFrom(is); is.close(); System.err.println("Name: " + randomMessage.getNote(1).getName()); System.err.println("Message: " + randomMessage.getNote(1).getMessage ()); PrintWriter out = resp.getWriter(); out.println("ok"); out.close(); } catch(Exception e) { System.err.println(e.getMessage()); } } } Any help would be much appreciated, I'm sure I'm making a silly little mistake. -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to proto...@googlegroups.com. To unsubscribe from this group, send email to protobuf+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/protobuf?hl=en.