What are you still missing? The code you've written ought to work after
changing to pass the correct FileDescriptor object to DynamicMessage.
On Fri, Jun 24, 2011 at 12:27 AM, slookin sloo...@gmail.com wrote:
Yes, in generally it is not Self Describing, but couldn't implement
real self describing, becase the message size.
But I'm able upload proto descripter to reciver, so I want to parse
incomming message using proto descripter.
Could you help me, how I can do it?
On Jun 23, 8:12 pm, Jason Hsueh jas...@google.com wrote:
Oh, I missed that you were reading the FileDescriptorSet from a separate
file, not the same stream. This isn't exactly self describing since
when
you transmit the message you assume the recipient knows what type the
message is, and has access to the FileDescriptorSet. Seehttp://
code.google.com/apis/protocolbuffers/docs/techniques.html#self...
On Thu, Jun 23, 2011 at 12:31 AM, slookin sloo...@gmail.com wrote:
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,