diff --git a/google-protocol-buffer/pom.xml b/google-protocol-buffer/pom.xml
index dc5d3bd5dae2..b8114c99f783 100644
--- a/google-protocol-buffer/pom.xml
+++ b/google-protocol-buffer/pom.xml
@@ -18,10 +18,16 @@
protobuf-java
${protobuf.version}
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit.jupiter.version}
+
- 3.2.0
+ 4.30.2
+ 5.13.0-M2
\ No newline at end of file
diff --git a/google-protocol-buffer/src/main/java/com/baeldung/generated/Food.java b/google-protocol-buffer/src/main/java/com/baeldung/generated/Food.java
new file mode 100644
index 000000000000..e304a8ec096b
--- /dev/null
+++ b/google-protocol-buffer/src/main/java/com/baeldung/generated/Food.java
@@ -0,0 +1,1446 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// NO CHECKED-IN PROTOBUF GENCODE
+// source: src/main/resources/food.proto
+// Protobuf Java Version: 4.30.2
+
+package com.baeldung.generated;
+
+public final class Food {
+
+ private Food() {
+ }
+
+ static {
+ com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
+ /* major= */ 4,
+ /* minor= */ 30,
+ /* patch= */ 2,
+ /* suffix= */ "", Food.class.getName());
+ }
+
+ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {
+ }
+
+ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
+ registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);
+ }
+
+ public interface MenuOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:com.baeldung.Menu)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * map<string, float> items = 1;
+ */
+ int getItemsCount();
+
+ /**
+ * map<string, float> items = 1;
+ */
+ boolean containsItems(java.lang.String key);
+
+ /**
+ * Use {@link #getItemsMap()} instead.
+ */
+ @java.lang.Deprecated
+ java.util.Map getItems();
+
+ /**
+ * map<string, float> items = 1;
+ */
+ java.util.Map getItemsMap();
+
+ /**
+ * map<string, float> items = 1;
+ */
+ float getItemsOrDefault(java.lang.String key, float defaultValue);
+
+ /**
+ * map<string, float> items = 1;
+ */
+ float getItemsOrThrow(java.lang.String key);
+ }
+
+ /**
+ * Protobuf type {@code com.baeldung.Menu}
+ */
+ public static final class Menu extends com.google.protobuf.GeneratedMessage implements
+ // @@protoc_insertion_point(message_implements:com.baeldung.Menu)
+ MenuOrBuilder {
+
+ private static final long serialVersionUID = 0L;
+
+ static {
+ com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
+ /* major= */ 4,
+ /* minor= */ 30,
+ /* patch= */ 2,
+ /* suffix= */ "", Menu.class.getName());
+ }
+
+ // Use Menu.newBuilder() to construct.
+ private Menu(com.google.protobuf.GeneratedMessage.Builder> builder) {
+ super(builder);
+ }
+
+ private Menu() {
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+ return com.baeldung.generated.Food.internal_static_com_baeldung_Menu_descriptor;
+ }
+
+ @SuppressWarnings({ "rawtypes" })
+ @java.lang.Override
+ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(int number) {
+ switch (number) {
+ case 1:
+ return internalGetItems();
+ default:
+ throw new RuntimeException("Invalid map field number: " + number);
+ }
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
+ return com.baeldung.generated.Food.internal_static_com_baeldung_Menu_fieldAccessorTable.ensureFieldAccessorsInitialized(
+ com.baeldung.generated.Food.Menu.class, com.baeldung.generated.Food.Menu.Builder.class);
+ }
+
+ public static final int ITEMS_FIELD_NUMBER = 1;
+
+ private static final class ItemsDefaultEntryHolder {
+
+ static final com.google.protobuf.MapEntry defaultEntry = com.google.protobuf.MapEntry. newDefaultInstance(
+ com.baeldung.generated.Food.internal_static_com_baeldung_Menu_ItemsEntry_descriptor, com.google.protobuf.WireFormat.FieldType.STRING, "",
+ com.google.protobuf.WireFormat.FieldType.FLOAT, 0F);
+ }
+
+ @SuppressWarnings("serial")
+ private com.google.protobuf.MapField items_;
+
+ private com.google.protobuf.MapField internalGetItems() {
+ if (items_ == null) {
+ return com.google.protobuf.MapField.emptyMapField(ItemsDefaultEntryHolder.defaultEntry);
+ }
+ return items_;
+ }
+
+ public int getItemsCount() {
+ return internalGetItems().getMap()
+ .size();
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ @java.lang.Override
+ public boolean containsItems(java.lang.String key) {
+ if (key == null) {
+ throw new NullPointerException("map key");
+ }
+ return internalGetItems().getMap()
+ .containsKey(key);
+ }
+
+ /**
+ * Use {@link #getItemsMap()} instead.
+ */
+ @java.lang.Override
+ @java.lang.Deprecated
+ public java.util.Map getItems() {
+ return getItemsMap();
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ @java.lang.Override
+ public java.util.Map getItemsMap() {
+ return internalGetItems().getMap();
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ @java.lang.Override
+ public float getItemsOrDefault(java.lang.String key, float defaultValue) {
+ if (key == null) {
+ throw new NullPointerException("map key");
+ }
+ java.util.Map map = internalGetItems().getMap();
+ return map.containsKey(key) ? map.get(key) : defaultValue;
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ @java.lang.Override
+ public float getItemsOrThrow(java.lang.String key) {
+ if (key == null) {
+ throw new NullPointerException("map key");
+ }
+ java.util.Map map = internalGetItems().getMap();
+ if (!map.containsKey(key)) {
+ throw new java.lang.IllegalArgumentException();
+ }
+ return map.get(key);
+ }
+
+ private byte memoizedIsInitialized = -1;
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) {
+ return true;
+ }
+ if (isInitialized == 0) {
+ return false;
+ }
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+ com.google.protobuf.GeneratedMessage.serializeStringMapTo(output, internalGetItems(), ItemsDefaultEntryHolder.defaultEntry, 1);
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) {
+ return size;
+ }
+
+ size = 0;
+ for (java.util.Map.Entry entry : internalGetItems().getMap()
+ .entrySet()) {
+ com.google.protobuf.MapEntry items__ = ItemsDefaultEntryHolder.defaultEntry.newBuilderForType()
+ .setKey(entry.getKey())
+ .setValue(entry.getValue())
+ .build();
+ size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, items__);
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.baeldung.generated.Food.Menu)) {
+ return super.equals(obj);
+ }
+ com.baeldung.generated.Food.Menu other = (com.baeldung.generated.Food.Menu) obj;
+
+ if (!internalGetItems().equals(other.internalGetItems())) {
+ return false;
+ }
+ if (!getUnknownFields().equals(other.getUnknownFields())) {
+ return false;
+ }
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ if (!internalGetItems().getMap()
+ .isEmpty()) {
+ hash = (37 * hash) + ITEMS_FIELD_NUMBER;
+ hash = (53 * hash) + internalGetItems().hashCode();
+ }
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.baeldung.generated.Food.Menu parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseFrom(com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseFrom(com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseFrom(java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseDelimitedFrom(java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
+ }
+
+ public static com.baeldung.generated.Food.Menu parseFrom(com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() {
+ return newBuilder();
+ }
+
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+
+ public static Builder newBuilder(com.baeldung.generated.Food.Menu prototype) {
+ return DEFAULT_INSTANCE.toBuilder()
+ .mergeFrom(prototype);
+ }
+
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+
+ /**
+ * Protobuf type {@code com.baeldung.Menu}
+ */
+ public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements
+ // @@protoc_insertion_point(builder_implements:com.baeldung.Menu)
+ com.baeldung.generated.Food.MenuOrBuilder {
+
+ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+ return com.baeldung.generated.Food.internal_static_com_baeldung_Menu_descriptor;
+ }
+
+ @SuppressWarnings({ "rawtypes" })
+ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection(int number) {
+ switch (number) {
+ case 1:
+ return internalGetItems();
+ default:
+ throw new RuntimeException("Invalid map field number: " + number);
+ }
+ }
+
+ @SuppressWarnings({ "rawtypes" })
+ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection(int number) {
+ switch (number) {
+ case 1:
+ return internalGetMutableItems();
+ default:
+ throw new RuntimeException("Invalid map field number: " + number);
+ }
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {
+ return com.baeldung.generated.Food.internal_static_com_baeldung_Menu_fieldAccessorTable.ensureFieldAccessorsInitialized(
+ com.baeldung.generated.Food.Menu.class, com.baeldung.generated.Food.Menu.Builder.class);
+ }
+
+ // Construct using com.baeldung.generated.Food.Menu.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+ super(parent);
+
+ }
+
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ bitField0_ = 0;
+ internalGetMutableItems().clear();
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+ return com.baeldung.generated.Food.internal_static_com_baeldung_Menu_descriptor;
+ }
+
+ @java.lang.Override
+ public com.baeldung.generated.Food.Menu getDefaultInstanceForType() {
+ return com.baeldung.generated.Food.Menu.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public com.baeldung.generated.Food.Menu build() {
+ com.baeldung.generated.Food.Menu result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public com.baeldung.generated.Food.Menu buildPartial() {
+ com.baeldung.generated.Food.Menu result = new com.baeldung.generated.Food.Menu(this);
+ if (bitField0_ != 0) {
+ buildPartial0(result);
+ }
+ onBuilt();
+ return result;
+ }
+
+ private void buildPartial0(com.baeldung.generated.Food.Menu result) {
+ int from_bitField0_ = bitField0_;
+ if (((from_bitField0_ & 0x00000001) != 0)) {
+ result.items_ = internalGetItems();
+ result.items_.makeImmutable();
+ }
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.baeldung.generated.Food.Menu) {
+ return mergeFrom((com.baeldung.generated.Food.Menu) other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.baeldung.generated.Food.Menu other) {
+ if (other == com.baeldung.generated.Food.Menu.getDefaultInstance()) {
+ return this;
+ }
+ internalGetMutableItems().mergeFrom(other.internalGetItems());
+ bitField0_ |= 0x00000001;
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10: {
+ com.google.protobuf.MapEntry items__ = input.readMessage(
+ ItemsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
+ internalGetMutableItems().getMutableMap()
+ .put(items__.getKey(), items__.getValue());
+ bitField0_ |= 0x00000001;
+ break;
+ } // case 10
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+
+ private int bitField0_;
+
+ private com.google.protobuf.MapField items_;
+
+ private com.google.protobuf.MapField internalGetItems() {
+ if (items_ == null) {
+ return com.google.protobuf.MapField.emptyMapField(ItemsDefaultEntryHolder.defaultEntry);
+ }
+ return items_;
+ }
+
+ private com.google.protobuf.MapField internalGetMutableItems() {
+ if (items_ == null) {
+ items_ = com.google.protobuf.MapField.newMapField(ItemsDefaultEntryHolder.defaultEntry);
+ }
+ if (!items_.isMutable()) {
+ items_ = items_.copy();
+ }
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return items_;
+ }
+
+ public int getItemsCount() {
+ return internalGetItems().getMap()
+ .size();
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ @java.lang.Override
+ public boolean containsItems(java.lang.String key) {
+ if (key == null) {
+ throw new NullPointerException("map key");
+ }
+ return internalGetItems().getMap()
+ .containsKey(key);
+ }
+
+ /**
+ * Use {@link #getItemsMap()} instead.
+ */
+ @java.lang.Override
+ @java.lang.Deprecated
+ public java.util.Map getItems() {
+ return getItemsMap();
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ @java.lang.Override
+ public java.util.Map getItemsMap() {
+ return internalGetItems().getMap();
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ @java.lang.Override
+ public float getItemsOrDefault(java.lang.String key, float defaultValue) {
+ if (key == null) {
+ throw new NullPointerException("map key");
+ }
+ java.util.Map map = internalGetItems().getMap();
+ return map.containsKey(key) ? map.get(key) : defaultValue;
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ @java.lang.Override
+ public float getItemsOrThrow(java.lang.String key) {
+ if (key == null) {
+ throw new NullPointerException("map key");
+ }
+ java.util.Map map = internalGetItems().getMap();
+ if (!map.containsKey(key)) {
+ throw new java.lang.IllegalArgumentException();
+ }
+ return map.get(key);
+ }
+
+ public Builder clearItems() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ internalGetMutableItems().getMutableMap()
+ .clear();
+ return this;
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ public Builder removeItems(java.lang.String key) {
+ if (key == null) {
+ throw new NullPointerException("map key");
+ }
+ internalGetMutableItems().getMutableMap()
+ .remove(key);
+ return this;
+ }
+
+ /**
+ * Use alternate mutation accessors instead.
+ */
+ @java.lang.Deprecated
+ public java.util.Map getMutableItems() {
+ bitField0_ |= 0x00000001;
+ return internalGetMutableItems().getMutableMap();
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ public Builder putItems(java.lang.String key, float value) {
+ if (key == null) {
+ throw new NullPointerException("map key");
+ }
+
+ internalGetMutableItems().getMutableMap()
+ .put(key, value);
+ bitField0_ |= 0x00000001;
+ return this;
+ }
+
+ /**
+ * map<string, float> items = 1;
+ */
+ public Builder putAllItems(java.util.Map values) {
+ internalGetMutableItems().getMutableMap()
+ .putAll(values);
+ bitField0_ |= 0x00000001;
+ return this;
+ }
+
+ // @@protoc_insertion_point(builder_scope:com.baeldung.Menu)
+ }
+
+ // @@protoc_insertion_point(class_scope:com.baeldung.Menu)
+ private static final com.baeldung.generated.Food.Menu DEFAULT_INSTANCE;
+
+ static {
+ DEFAULT_INSTANCE = new com.baeldung.generated.Food.Menu();
+ }
+
+ public static com.baeldung.generated.Food.Menu getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser