From a70a17e38da58631152d0e4eaf7df04a7b13f4b6 Mon Sep 17 00:00:00 2001 From: Diego Date: Wed, 15 Apr 2026 13:35:15 -0400 Subject: [PATCH 1/5] fix(generator): fall back to java.lang.Object for unknown types. --- generator/src/googleapis/codegen/java_generator.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/generator/src/googleapis/codegen/java_generator.py b/generator/src/googleapis/codegen/java_generator.py index 609f1782a20..f017edb7ada 100755 --- a/generator/src/googleapis/codegen/java_generator.py +++ b/generator/src/googleapis/codegen/java_generator.py @@ -261,12 +261,10 @@ def _GetTypeInfo(self, def_dict): if result: return result - # TODO(user): Uncomment this and update golden files. - # result = self.type_map.get((json_type, None)) - # if result: - # return result - # - # raise ValueError('Unknown type: %s format: %s' % (json_type, json_format)) + # Fallback to the unformatted base type if exact format mapping is not found. + result = self.type_map.get((json_type, None)) + if result: + return result return (utilities.CamelCase(json_type), None, None) From f113797a4358081037597832f8a0d6f68327a3f3 Mon Sep 17 00:00:00 2001 From: Diego Date: Thu, 16 Apr 2026 09:45:03 -0400 Subject: [PATCH 2/5] test(generator): assert safe fallback mapping for Any formatted structures --- generator/tests/java_generator_test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/generator/tests/java_generator_test.py b/generator/tests/java_generator_test.py index 99cd443690f..d9b9e766909 100755 --- a/generator/tests/java_generator_test.py +++ b/generator/tests/java_generator_test.py @@ -84,6 +84,7 @@ def testGetCodeTypeFromDictionary(self): ['java.lang.Integer', {'type': 'integer', 'format': 'int32'}], ['java.lang.Long', {'type': 'string', 'format': 'int64'}], ['java.lang.Object', {'type': 'any'}], + ['java.lang.Object', {'type': 'any', 'format': 'google.protobuf.Value'}], ['java.lang.Boolean', {'type': 'boolean'}], ['java.lang.String', {'type': 'string'}], ['java.lang.Long', {'type': 'integer', 'format': 'uint32'}], From 1aea3e3be2e5d7db99d4150630c9c056c6301202 Mon Sep 17 00:00:00 2001 From: Diego Date: Wed, 22 Apr 2026 09:41:57 -0400 Subject: [PATCH 3/5] fix(generator): prevent String from being converted to java.lang.String --- generator/src/googleapis/codegen/java_generator.py | 2 +- generator/tests/java_generator_test.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/generator/src/googleapis/codegen/java_generator.py b/generator/src/googleapis/codegen/java_generator.py index f017edb7ada..ce17a4c7ffc 100755 --- a/generator/src/googleapis/codegen/java_generator.py +++ b/generator/src/googleapis/codegen/java_generator.py @@ -152,7 +152,7 @@ class JavaLanguageModel(language_model.LanguageModel): _TYPE_DATETIME = ('com.google.api.client.util.DateTime', ImportDefinition(['com.google.api.client.util.DateTime']), None) - _TYPE_STRING = _SimpleType('java.lang.String') + _TYPE_STRING = ('String', ImportDefinition(), None) _TYPE_FORMAT_TO_DATATYPE_AND_IMPORTS = { ('any', None): _SimpleType('java.lang.Object'), diff --git a/generator/tests/java_generator_test.py b/generator/tests/java_generator_test.py index d9b9e766909..b7627025870 100755 --- a/generator/tests/java_generator_test.py +++ b/generator/tests/java_generator_test.py @@ -75,7 +75,7 @@ def testGetCodeTypeFromDictionary(self): """Test mapping of JSON schema types to Java class names.""" language_model = java_generator.JavaLanguageModel() test_cases = [ - ['java.lang.String', {'type': 'string', 'format': 'byte'}], + ['String', {'type': 'string', 'format': 'byte'}], ['com.google.api.client.util.DateTime', {'type': 'string', 'format': 'date-time'}], ['java.lang.Double', {'type': 'number', 'format': 'double'}], @@ -86,7 +86,7 @@ def testGetCodeTypeFromDictionary(self): ['java.lang.Object', {'type': 'any'}], ['java.lang.Object', {'type': 'any', 'format': 'google.protobuf.Value'}], ['java.lang.Boolean', {'type': 'boolean'}], - ['java.lang.String', {'type': 'string'}], + ['String', {'type': 'string'}], ['java.lang.Long', {'type': 'integer', 'format': 'uint32'}], ['java.math.BigInteger', {'type': 'string', 'format': 'uint64'}], ] From 2edec8473ba33a58d3c744faab62decad39d9342 Mon Sep 17 00:00:00 2001 From: Diego Date: Wed, 22 Apr 2026 09:54:55 -0400 Subject: [PATCH 4/5] Revert "fix(generator): prevent String from being converted to java.lang.String" This reverts commit 1aea3e3be2e5d7db99d4150630c9c056c6301202. --- generator/src/googleapis/codegen/java_generator.py | 2 +- generator/tests/java_generator_test.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/generator/src/googleapis/codegen/java_generator.py b/generator/src/googleapis/codegen/java_generator.py index ce17a4c7ffc..f017edb7ada 100755 --- a/generator/src/googleapis/codegen/java_generator.py +++ b/generator/src/googleapis/codegen/java_generator.py @@ -152,7 +152,7 @@ class JavaLanguageModel(language_model.LanguageModel): _TYPE_DATETIME = ('com.google.api.client.util.DateTime', ImportDefinition(['com.google.api.client.util.DateTime']), None) - _TYPE_STRING = ('String', ImportDefinition(), None) + _TYPE_STRING = _SimpleType('java.lang.String') _TYPE_FORMAT_TO_DATATYPE_AND_IMPORTS = { ('any', None): _SimpleType('java.lang.Object'), diff --git a/generator/tests/java_generator_test.py b/generator/tests/java_generator_test.py index b7627025870..d9b9e766909 100755 --- a/generator/tests/java_generator_test.py +++ b/generator/tests/java_generator_test.py @@ -75,7 +75,7 @@ def testGetCodeTypeFromDictionary(self): """Test mapping of JSON schema types to Java class names.""" language_model = java_generator.JavaLanguageModel() test_cases = [ - ['String', {'type': 'string', 'format': 'byte'}], + ['java.lang.String', {'type': 'string', 'format': 'byte'}], ['com.google.api.client.util.DateTime', {'type': 'string', 'format': 'date-time'}], ['java.lang.Double', {'type': 'number', 'format': 'double'}], @@ -86,7 +86,7 @@ def testGetCodeTypeFromDictionary(self): ['java.lang.Object', {'type': 'any'}], ['java.lang.Object', {'type': 'any', 'format': 'google.protobuf.Value'}], ['java.lang.Boolean', {'type': 'boolean'}], - ['String', {'type': 'string'}], + ['java.lang.String', {'type': 'string'}], ['java.lang.Long', {'type': 'integer', 'format': 'uint32'}], ['java.math.BigInteger', {'type': 'string', 'format': 'uint64'}], ] From c9a5d33457f40d20c43e77cbcb9d3a722c1e62cc Mon Sep 17 00:00:00 2001 From: Diego Date: Wed, 22 Apr 2026 10:14:35 -0400 Subject: [PATCH 5/5] fix(generator): special-case string type in fallback logic to restore legacy behavior --- generator/src/googleapis/codegen/java_generator.py | 3 ++- generator/tests/java_generator_test.py | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/generator/src/googleapis/codegen/java_generator.py b/generator/src/googleapis/codegen/java_generator.py index f017edb7ada..5f0fd946569 100755 --- a/generator/src/googleapis/codegen/java_generator.py +++ b/generator/src/googleapis/codegen/java_generator.py @@ -263,9 +263,10 @@ def _GetTypeInfo(self, def_dict): # Fallback to the unformatted base type if exact format mapping is not found. result = self.type_map.get((json_type, None)) - if result: + if result and json_type != 'string': return result + return (utilities.CamelCase(json_type), None, None) def GetCodeTypeFromDictionary(self, def_dict): diff --git a/generator/tests/java_generator_test.py b/generator/tests/java_generator_test.py index d9b9e766909..9eb360dbcca 100755 --- a/generator/tests/java_generator_test.py +++ b/generator/tests/java_generator_test.py @@ -89,6 +89,9 @@ def testGetCodeTypeFromDictionary(self): ['java.lang.String', {'type': 'string'}], ['java.lang.Long', {'type': 'integer', 'format': 'uint32'}], ['java.math.BigInteger', {'type': 'string', 'format': 'uint64'}], + ['java.lang.Object', {'type': 'any', 'format': 'unknown'}], + ['String', {'type': 'string', 'format': 'unknown'}], + ] for test_case in test_cases: self.assertEqual( @@ -111,6 +114,9 @@ def testGetPrimitiveTypeFromDictionary(self): [None, {'type': 'string', 'format': 'date-time'}], [None, {'type': 'string', 'format': 'uint64'}], [None, {'type': 'anything_else', 'format': 'uint64'}], + [None, {'type': 'any', 'format': 'unknown'}], + [None, {'type': 'string', 'format': 'unknown'}], + ] for test_case in test_cases: