Thanks Jason,
  It is all my code (link to real java class - 
http://test.look-in.net/pf/pf.zip.
  Could you give me links with examples or explain why i should
"serializes the FileDescriptorSet"?

On Jun 22, 8:35 pm, Jason Hsueh <jas...@google.com> wrote:
> On Wed, Jun 22, 2011 at 3:30 AM, slookin <sloo...@gmail.com> wrote:
> > I trying to develop "flexible" server for reciving message, i'm not
> > able to create java classes for each message type, but I can upload
> > proto descripter on server. Of course client (sender) will use
> > generated java classes for prepare messages:
>
> > My code (sender):
> > Person.Builder person = Person.newBuilder();
> > person.setId(Integer.valueOf(42));
> > person.setEmail("test_em...@gmail.com");
> > person.setName("Viktor Villari");
> > Person p=person.build();
> > FileOutputStream fstream = new FileOutputStream ("message.pf");
> > CodedOutputStream outSream = CodedOutputStream.newInstance(fstream);
> > p.writeTo(outSream);
> > outSream.flush();
> > System.out.println("sent");
>
> > Reciver (address.descriptor.proto - grenerated via descriptor.proto):
> >        FileInputStream input = new FileInputStream
> > ("address.descriptor.proto");
> >                DescriptorProtos.FileDescriptorSet
> > fdsProto=DescriptorProtos.FileDescriptorSet.parseFrom(input);
> >                input = new FileInputStream ("message.pf");
> >            //
> > System.out.println(fds.getFile(0).getMessageType(0).getName());
> >                System.out.println("File name =
> > "+fdsProto.getFile(0).getName());
> >                // System.out.println("Message type =
> > "+fdsProto.getFile(0).getMessageType(0).getName());
> >                // System.out.println("Field info =
> > "+fdsProto.getFile(0).getMessageType(0).getField(0).getName()+"
> > "+fdsProto.getFile(0).getMessageType(0).getField(0).getType());
> >                FileDescriptor
> > fileDescr=FileDescriptor.buildFrom(fdsProto.getFile(0), new
> > FileDescriptor[0]);
> >                System.out.println("Message type =
> > "+fileDescr.getMessageTypes().get(0).getName());
> >                System.out.println("Field info =
> > "+fileDescr.getMessageTypes().get(0).getFields().get(0).getName()+"
> > type=
> > "+fileDescr.getMessageTypes().get(0).getFields().get(0).getType());
> >                DynamicMessage
> > dm=DynamicMessage.parseFrom(fdsProto.getDescriptor(),
> > input);
>
> On this line, you are passing the descriptor for the FileDescriptorSet. You
> should be using fileDescr to get at the Person message type. (Note that your
> description scheme does not indicate what message type is actually used. But
> I also don't see the code snippet that serializes the FileDescriptorSet, or
> for that matter delimit between the FileDescriptorSet and the serialized
> Person data, so maybe you are doing something elsewhere)
>
>
>
>
>
>
>
> >                System.out.println("DynamicMessage to string
> > \n"+dm.toString());
> >                //---- problem line
> >                System.out.println("Person.name  = "+
> > dm.getField(fileDescr.getMessageTypes().get(0).getFields().get(0)));
> >                //----
>
> > Output:
> > File name = addressbook.proto
> > Message type = Person
> > Field info = name type= STRING
> > DynamicMessage to string
> > 2: "Viktor Villari"
> > 3: 42
> > 4: "test_em...@gmail.com"
>
> > Exception in thread "main" java.lang.IllegalArgumentException:
> > FieldDescriptor does not match message type.
> >        at
>
> > com.google.protobuf.DynamicMessage.verifyContainingType(DynamicMessage.java:
> > 242)
> >        at com.google.protobuf.DynamicMessage.getField(DynamicMessage.java:
> > 160)
> >        at net.lookin.protobuf.Test.main(Test.java:64)
>
> > Why I recive exception?
> > How I can access to specific field value in DynamicMessage?
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Protocol Buffers" group.
> > To post to this group, send email to protobuf@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.

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@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