You were right, my runtime environment wasn't set up correctly. As I
was using GAE I had to copy the jar to war/WEB-INF/lib, that fixed the
reading issue.

Thanks for your help!

On Nov 29, 5:21 am, Kenton Varda <ken...@google.com> wrote:
> The error said:
>   java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessage
>
> This seems to be saying tha com.google.protobuf.GeneratedMessage -- which is
> part of libprotobuf.jar -- is not present.  Note that it *was* clearly
> present when you complied your code -- otherwise you'd get a compiler error.
>  But you're only getting an error when *running*, which suggests that your
> runtime environment differs from your build environment.
>
> On Sat, Nov 28, 2009 at 3:35 AM, Hershiv Haria <darkmaste...@gmail.com>wrote:
>
> > By libprotobuf.jar I assume you mean the classes compiled during
> > installation?
>
> > I have them in the build path, and they work on the java tutorial
> > project from the protobuf site.
> > Is there any other reason it wouldn't find the class?
>
> > On Nov 28, 5:48 am, Kenton Varda <ken...@google.com> wrote:
> > > Looks like libprotobuf.jar is missing.  The code generated by protoc
> > depends
> > > on this library.
>
> > > On Fri, Nov 27, 2009 at 5:06 AM, Hershiv Haria <darkmaste...@gmail.com
> > >wrote:
>
> > > > 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 {
>
> ...
>
> read more »

--

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.


Reply via email to