From 79e690bf2c22087adfaed79f567fba16ce4cc3ca Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Thu, 30 Oct 2025 17:27:36 +0100 Subject: [PATCH 1/2] java LoadingOptions: fix split logic error --- schema_salad/java/main_utils/LoadingOptions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schema_salad/java/main_utils/LoadingOptions.java b/schema_salad/java/main_utils/LoadingOptions.java index d1937b370..475ca683a 100644 --- a/schema_salad/java/main_utils/LoadingOptions.java +++ b/schema_salad/java/main_utils/LoadingOptions.java @@ -65,7 +65,7 @@ public String expandUrl( } if (!this.vocab.isEmpty() && url.contains(":")) { - String prefix = url.split(":", 1)[0]; + String prefix = url.split(":")[0]; if (this.vocab.containsKey(prefix)) { url = this.vocab.get(prefix) + url.substring(prefix.length() + 1); } From 7fadbac93072b1050f36cae8498381ec8c623a9d Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Thu, 30 Oct 2025 17:51:54 +0100 Subject: [PATCH 2/2] java: populate extensionFields; add public access to the LoadingOptions --- schema_salad/java_codegen.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/schema_salad/java_codegen.py b/schema_salad/java_codegen.py index d0931e62d..eef108642 100644 --- a/schema_salad/java_codegen.py +++ b/schema_salad/java_codegen.py @@ -224,12 +224,17 @@ def begin_class( package {package}; +import {package}.utils.LoadingOptions; import {package}.utils.Saveable; /** {interface_doc_str} */ -public interface {cls} {ext} {{""".format( +public interface {cls} {ext} {{ + + java.util.Map getExtensionFields(); + LoadingOptions getLoadingOptions(); +""".format( package=self.package, cls=cls, ext=ext, @@ -283,6 +288,9 @@ def begin_class( private LoadingOptions loadingOptions_ = new LoadingOptionsBuilder().build(); private java.util.Map extensionFields_ = new java.util.HashMap(); + public LoadingOptions getLoadingOptions() {{ + return this.loadingOptions_; + }} public java.util.Map getExtensionFields() {{ return this.extensionFields_; }} @@ -356,7 +364,17 @@ def end_class(self, classname: str, field_names: list[str]) -> None: safename=self.safe_name(fieldname), type=fieldtype.instance_type ) ) - + self.current_loader.write( + """ for (String field:__doc.keySet()) { + if (!attrs.contains(field)) { + if (field.contains(":")) { + String expanded_field = __loadingOptions.expandUrl(field, "", false, false, null); + extensionFields_.put(expanded_field, __doc.get(field)); + } + } + } +""" + ) self.current_loader.write(""" }""") target = self.main_src_dir / f"{self.current_class}Impl.java" with open( @@ -366,8 +384,9 @@ def end_class(self, classname: str, field_names: list[str]) -> None: f.write(self.current_fields.getvalue()) f.write(self.current_loader.getvalue()) f.write( - """ -} + f""" + private java.util.List attrs = java.util.Arrays.asList("{'", "'.join(field_names)}"); +}} """ )