Monday, January 7, 2013

Google ProtoBuf

1) Download & install Google protobuf.
2) Create .proto file.
  e.g.
import "xyz_options.proto"; package com.example.tutorial; option java_multiple_files = true; option java_generate_equals_and_hash = true; option (VdsFileCmnt) = "This is an example file comment"; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message ZipCode{ required string cityname = 1; required int32 code=2 ; } message PhoneNumber { option (VdsMsgCmnt) = "PhoneNumber Class Comment"; option (VdsMsgTbl) = "~"; required string number = 1 [ (VdsFldCmnt) = "string number: Field Comment", (VdsFldCol) = "~" ]; optional PhoneType type = 2 [default = HOME, (VdsFldCmnt) = "PhoneType type: Field Comment", (VdsFldCol) = "~"]; repeated int32 phoneId=3; //This case is not covered } message Person { option (VdsMsgTbl) = "~"; required string name = 1 [(VdsFldCol) = "~"]; required int32 id = 2 [(VdsFldCol) = "~"]; // Unique ID number for this person. optional string email = 3 [(VdsFldCol) = "~"]; repeated PhoneNumber phone = 4 [ (VdsFldTbl) = "~" ]; } // Our address book file is just one of these. message AddressBook { option (VdsMsgTbl) = "~"; repeated Person person = 1 [ (VdsFldTbl) = "~" ]; required ZipCode zipcode= 2; //This case is not covered }

3) Generate Java file from proto file. pom.xml file for this 
4.0.0 realtor realtor_model 0.0.1 jar dtrott http://maven.davidtrott.com/repository realtor_protos http://maven.apache.org UTF-8 junit junit 4.10 com.google.protobuf protobuf-java 2.4.1 org.hibernate.javax.persistence hibernate-jpa-2.0-api 1.0.1.Final org.hibernate hibernate-entitymanager 3.6.7.Final maven-antrun-plugin compile-protoc generate-sources run org.codehaus.mojo build-helper-maven-plugin 1.7 add-source generate-sources add-source target/generated-sources org.apache.maven.plugins maven-compiler-plugin 2.3.2 1.6 1.6 org.eclipse.m2e lifecycle-mapping 1.0.0 org.apache.maven.plugins maven-antrun-plugin [1.3,) run
4) Message can be written to HttpServletResponse object.


protected void writeToHttpServletResponse(GeneratedMessage protobufGeneratedMessage) throws IOException {
getHttpServletResponse().setContentType("application/x-protobuf");
protobufGeneratedMessage.writeTo(getHttpServletResponse().getOutputStream());
}
5) Marshall, UnMarshall example

SalesHdbService salesHdbService = salesServiceFactory.getSalesHdbService();
SearchSalesHdbPropertyRequest hdbPropertyRequest = SearchSalesHdbPropertyRequest.parseFrom(getHttpServletRequest().getInputStream());
SearchSalesHdbPropertyResponse hdbPropertyResponse = salesHdbService.getSearchSalesHdbPropertyResponse(hdbPropertyRequest);



No comments:

Post a Comment