Why not just call add() with a Message instance instead? On Mon, Jul 9, 2018 at 7:39 PM, John Lilley <[email protected]> wrote: > Darn, there's only one snag. I need the protobuf package name, not the java > package classname, in order to construct the message name that corresponds > to the result of full_name() in the C++ generated code. Of course, I can > make them the same thing, but I'm not finding any way to interrogate the > class to find out the package to which it belongs. > john > > On Mon, Jul 9, 2018 at 5:17 PM John Lilley <[email protected]> wrote: >> >> 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. > > -- > 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.
-- 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.
