Success!  This works nicely (although, lacking polish)

public class MessageFactory {
   
   private final Map<String,Message> defaultMessages = new HashMap<>();
   
   public void add(Class wrapperClass) {
      for (Class nestedClass : wrapperClass.getDeclaredClasses()) {
         if (!Message.class.isAssignableFrom(nestedClass)) {
            continue;
         }
         try {
            String fullName = wrapperClass.getSimpleName() + "." + 
nestedClass.getSimpleName();
            Message message = (Message)nestedClass.getMethod(
"getDefaultInstance").invoke(null);
            defaultMessages.put(fullName, message);
         } catch (Exception ex) {
            ex.printStackTrace();
         }
      }
   }
   
   public Message.Builder getBuilder(String fullName) {
      Message message = defaultMessages.get(fullName);
      if (message == null) {
         throw new IllegalArgumentException("Unknown message name '" + 
fullName + "'");
      }
      return message.newBuilderForType();
   }
   
   public Message createMessage(String fullName, InputStream is) throws 
Exception {
      Message.Builder builder = getBuilder(fullName);
      CodedInputStream cis = CodedInputStream.newInstance(is);
      return builder.mergeFrom(cis).build();
   }


   public Message createMessage(String fullName, byte[] buffer) throws 
Exception {
      return createMessage(fullName, new ByteArrayInputStream(buffer));
   }
}



-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to