Repository: cayenne Updated Branches: refs/heads/master 52acbefcb -> 2265e4cc2
Safe encode to XML query descriptors properties. It was possible to corrupt DataMap xml file with empty Cache Groups setting in query. Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/04ca4330 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/04ca4330 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/04ca4330 Branch: refs/heads/master Commit: 04ca4330cff02f8afb5a7cf678ae2cac7b86062b Parents: 949e383 Author: Nikita Timofeev <stari...@gmail.com> Authored: Mon Nov 28 16:17:09 2016 +0300 Committer: Nikita Timofeev <stari...@gmail.com> Committed: Mon Nov 28 16:17:09 2016 +0300 ---------------------------------------------------------------------- .../org/apache/cayenne/map/EJBQLQueryDescriptor.java | 5 +---- .../apache/cayenne/map/ProcedureQueryDescriptor.java | 4 +--- .../java/org/apache/cayenne/map/QueryDescriptor.java | 14 +++++++++++--- .../org/apache/cayenne/map/SQLTemplateDescriptor.java | 4 +--- .../org/apache/cayenne/map/SelectQueryDescriptor.java | 4 +--- 5 files changed, 15 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/04ca4330/cayenne-server/src/main/java/org/apache/cayenne/map/EJBQLQueryDescriptor.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/EJBQLQueryDescriptor.java b/cayenne-server/src/main/java/org/apache/cayenne/map/EJBQLQueryDescriptor.java index 8e85e44..d3adde5 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/map/EJBQLQueryDescriptor.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/map/EJBQLQueryDescriptor.java @@ -69,10 +69,7 @@ public class EJBQLQueryDescriptor extends QueryDescriptor { encoder.indent(1); // print properties - for (Map.Entry<String, String> property : properties.entrySet()) { - encoder.printProperty(property.getKey(), property.getValue()); - } - + encodeProperties(encoder); if (ejbql != null) { encoder.print("<ejbql><![CDATA["); http://git-wip-us.apache.org/repos/asf/cayenne/blob/04ca4330/cayenne-server/src/main/java/org/apache/cayenne/map/ProcedureQueryDescriptor.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/ProcedureQueryDescriptor.java b/cayenne-server/src/main/java/org/apache/cayenne/map/ProcedureQueryDescriptor.java index 0eb50f9..fa1a087 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/map/ProcedureQueryDescriptor.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/map/ProcedureQueryDescriptor.java @@ -97,9 +97,7 @@ public class ProcedureQueryDescriptor extends QueryDescriptor { encoder.indent(1); // print properties - for (Map.Entry<String, String> property : properties.entrySet()) { - encoder.printProperty(property.getKey(), property.getValue()); - } + encodeProperties(encoder); encoder.indent(-1); encoder.println("</query>"); http://git-wip-us.apache.org/repos/asf/cayenne/blob/04ca4330/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptor.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptor.java b/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptor.java index 0731bf5..378eb5f 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptor.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/map/QueryDescriptor.java @@ -227,11 +227,19 @@ public class QueryDescriptor implements Serializable, ConfigurationNode, XMLSeri encoder.indent(1); - for (Map.Entry<String, String> property : properties.entrySet()) { - encoder.printProperty(property.getKey(), property.getValue()); - } + encodeProperties(encoder); encoder.indent(-1); encoder.println("</query>"); } + + void encodeProperties(XMLEncoder encoder) { + for (Map.Entry<String, String> property : properties.entrySet()) { + String value = property.getValue(); + if(value == null || value.isEmpty()) { + continue; + } + encoder.printProperty(property.getKey(), value); + } + } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/04ca4330/cayenne-server/src/main/java/org/apache/cayenne/map/SQLTemplateDescriptor.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/SQLTemplateDescriptor.java b/cayenne-server/src/main/java/org/apache/cayenne/map/SQLTemplateDescriptor.java index 8fac3d5..f9b1ff0 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/map/SQLTemplateDescriptor.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/map/SQLTemplateDescriptor.java @@ -138,9 +138,7 @@ public class SQLTemplateDescriptor extends QueryDescriptor { encoder.indent(1); // print properties - for (Map.Entry<String, String> property : properties.entrySet()) { - encoder.printProperty(property.getKey(), property.getValue()); - } + encodeProperties(encoder); // encode default SQL if (sql != null) { http://git-wip-us.apache.org/repos/asf/cayenne/blob/04ca4330/cayenne-server/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java b/cayenne-server/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java index 5eed080..e844b3e 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java @@ -191,9 +191,7 @@ public class SelectQueryDescriptor extends QueryDescriptor { encoder.indent(1); // print properties - for (Map.Entry<String, String> property : properties.entrySet()) { - encoder.printProperty(property.getKey(), property.getValue()); - } + encodeProperties(encoder); // encode qualifier if (qualifier != null) {