I've Google for a day now and could not find full information on the
following problem.
I want to serialize protobuf messages in C++, send them to a JMS
(using activemq-cpp API) and parse in my Java server. Based on what I
found in my searches, here's my C++ function that serializes the
message:
/*
* Serialize given protobuf message and send to Active MQ JMS using
the producer.
*/
void MessageProducer::send( const diva::messaging::Message&
proto_mesg )
{
using namespace google::protobuf::io;
long bufLength = proto_mesg.ByteSize() +
CodedOutputStream::VarintSize32( proto_mesg.ByteSize() );
unsigned char buf[bufLength];
ZeroCopyOutputStream* raw_output = new ArrayOutputStream( buf,
bufLength );
CodedOutputStream* coded_output = new CodedOutputStream(raw_output);
// Prepend the message size to wire message.
coded_output->WriteVarint32( proto_mesg.ByteSize() );
proto_mesg.SerializeToCodedStream(coded_output);
// Create an ACtive JMS message and insert task & module information
in header.
cms::BytesMessage* message = m_session->createBytesMessage();
// Write serialized protobuf message to the JMS message and send.
message->writeBytes( buf, 0, bufLength );
m_producer->send( message );
delete message;
delete coded_output;
delete raw_output;
}
And here's the part in Java that parses teh received messages from
JMS:
// Create a byte array for received message.
BytesMessage receivedMessage =
(BytesMessage)received_message;
logger.info("received message in NAC");
byte[] mesg_bytes = new
byte[(int)receivedMessage.getBodyLength()];
int num_read = receivedMessage.readBytes(mesg_bytes);
if ( num_read != receivedMessage.getBodyLength() ) {
throw new Exception("Error reading message into
byte array");
}
// Create registry for all possible DIVA messages.
ExtensionRegistry er = ExtensionRegistry.newInstance();
DivaBase.registerAllExtensions(er);
// Parse the received message.
diva.messaging.DivaBase.Message m =
diva.messaging.DivaBase.Message.parseFrom( mesg_bytes, er );
Currently, I get
Problem parsing message received in NAC:
com.google.protobuf.InvalidProtocolBufferException: Protocol message
end-group tag did not match expected tag.
Problem parsing message received in NAC: java.lang.ClassCastException:
org.apache.activemq.command.ActiveMQTextMessage cannot be cast to
javax.jms.BytesMessage
errors for each message and cannot see what I'm doing wrong.
Thanks for any comments on the code and/or pointers you might provide.
--
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/protobuf?hl=en.