From cc65c0808131696a621adcd1b2c2038a9d4565cd Mon Sep 17 00:00:00 2001 From: lum Date: Fri, 10 Apr 2026 09:00:22 -0700 Subject: [PATCH 1/3] Manually parse viewName parameter. --- .../controllers/GetQueryDetailsAction.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java b/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java index a90c5a14d0d..41fd33bb66a 100644 --- a/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java +++ b/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java @@ -18,12 +18,15 @@ import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.NotNull; import org.json.JSONArray; import org.json.JSONObject; import org.labkey.api.action.Action; import org.labkey.api.action.ActionType; import org.labkey.api.action.ApiResponse; import org.labkey.api.action.ApiSimpleResponse; +import org.labkey.api.action.BaseViewAction; +import org.labkey.api.action.HasBindParameters; import org.labkey.api.action.ReadOnlyApiAction; import org.labkey.api.collections.CaseInsensitiveHashMap; import org.labkey.api.collections.CaseInsensitiveHashSet; @@ -63,6 +66,7 @@ import org.labkey.query.CustomViewUtil; import org.labkey.query.QueryDefinitionImpl; import org.labkey.query.persist.QueryDef; +import org.springframework.beans.PropertyValues; import org.springframework.validation.BindException; import java.util.ArrayList; @@ -460,7 +464,7 @@ protected List> getDefViewColProps(QueryView view) return colProps; } - public static class Form + public static class Form implements HasBindParameters { private String _queryName; private String _schemaName; @@ -496,11 +500,6 @@ public String[] getViewName() return _viewName; } - public void setViewName(String[] viewName) - { - _viewName = viewName; - } - public String getFk() { return _fk; @@ -550,5 +549,21 @@ public void setIncludeTriggers(boolean includeTriggers) { _includeTriggers = includeTriggers; } + + @Override + public @NotNull BindException bindParameters(PropertyValues params) + { + // GitHub Issue #936 : manually bind the viewName parameter + var viewName = params.getPropertyValue("viewName"); + if (viewName != null) + { + var value = viewName.getValue(); + if (value instanceof String[] strs) + _viewName = strs; + else if (value instanceof String str) + _viewName = new String[] { str }; + } + return BaseViewAction.springBindParameters(this, "form", params); + } } } From 951f9d50bac1427715a97e80c1ee103a1adb10fc Mon Sep 17 00:00:00 2001 From: Lum Date: Mon, 27 Apr 2026 14:51:24 -0700 Subject: [PATCH 2/3] Log if viewName is not parsable --- .../src/org/labkey/query/controllers/GetQueryDetailsAction.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java b/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java index 41fd33bb66a..fead6c327bf 100644 --- a/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java +++ b/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java @@ -562,6 +562,8 @@ public void setIncludeTriggers(boolean includeTriggers) _viewName = strs; else if (value instanceof String str) _viewName = new String[] { str }; + else + LOG.error("Unexpected viewName parameter type: " + String.valueOf(value)); } return BaseViewAction.springBindParameters(this, "form", params); } From 06c0e96342722fbcb64acc746b0232f20ac8d556 Mon Sep 17 00:00:00 2001 From: Lum Date: Mon, 27 Apr 2026 14:56:51 -0700 Subject: [PATCH 3/3] Unnecessary conversion. --- .../src/org/labkey/query/controllers/GetQueryDetailsAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java b/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java index fead6c327bf..898fe907352 100644 --- a/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java +++ b/query/src/org/labkey/query/controllers/GetQueryDetailsAction.java @@ -563,7 +563,7 @@ public void setIncludeTriggers(boolean includeTriggers) else if (value instanceof String str) _viewName = new String[] { str }; else - LOG.error("Unexpected viewName parameter type: " + String.valueOf(value)); + LOG.error("Unexpected viewName parameter type: " + value); } return BaseViewAction.springBindParameters(this, "form", params); }