You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2024/07/03 17:28:16 UTC
(empire-db) branch master updated: EMPIREDB-430 Properly catch and handle value conversion errors.
This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/master by this push:
new 5408f8ca EMPIREDB-430 Properly catch and handle value conversion errors.
5408f8ca is described below
commit 5408f8ca7837d9c2bfc58d958a12aec0ba97553d
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Wed Jul 3 19:28:12 2024 +0200
EMPIREDB-430
Properly catch and handle value conversion errors.
---
.../empire/jakarta/components/ControlTag.java | 41 ++++++++++++----------
.../apache/empire/jakarta/components/InputTag.java | 35 +++++++++---------
.../empire/jakarta/utils/TagEncodingHelper.java | 14 ++++++--
.../apache/empire/jsf2/components/ControlTag.java | 21 ++++++-----
.../apache/empire/jsf2/components/InputTag.java | 19 +++++-----
.../empire/jsf2/utils/TagEncodingHelper.java | 14 ++++++--
6 files changed, 88 insertions(+), 56 deletions(-)
diff --git a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
index b84c9f70..938d136f 100644
--- a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
+++ b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
@@ -21,6 +21,17 @@ package org.apache.empire.jakarta.components;
import java.io.IOException;
import java.util.List;
+import org.apache.empire.commons.ObjectUtils;
+import org.apache.empire.data.Column;
+import org.apache.empire.jakarta.controls.InputControl;
+import org.apache.empire.jakarta.utils.ControlRenderInfo;
+import org.apache.empire.jakarta.utils.TagEncodingHelper;
+import org.apache.empire.jakarta.utils.TagEncodingHelperFactory;
+import org.apache.empire.jakarta.utils.TagStyleClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import jakarta.faces.application.FacesMessage;
import jakarta.faces.component.NamingContainer;
import jakarta.faces.component.UIComponent;
import jakarta.faces.component.UIComponentBase;
@@ -33,18 +44,6 @@ import jakarta.faces.context.FacesContext;
import jakarta.faces.context.ResponseWriter;
import jakarta.faces.convert.ConverterException;
-import org.apache.empire.commons.ObjectUtils;
-import org.apache.empire.data.Column;
-import org.apache.empire.db.exceptions.FieldIllegalValueException;
-import org.apache.empire.exceptions.EmpireException;
-import org.apache.empire.jakarta.controls.InputControl;
-import org.apache.empire.jakarta.utils.ControlRenderInfo;
-import org.apache.empire.jakarta.utils.TagEncodingHelper;
-import org.apache.empire.jakarta.utils.TagEncodingHelperFactory;
-import org.apache.empire.jakarta.utils.TagStyleClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
public class ControlTag extends UIInput implements NamingContainer
{
/**
@@ -644,9 +643,16 @@ public class ControlTag extends UIInput implements NamingContainer
// Get Input Tag
if (getChildCount() <= 1)
return null;
- // get Input Value
- ControlSeparatorComponent inputSepTag = (ControlSeparatorComponent) getChildren().get(1);
- return this.control.getConvertedValue(inputSepTag, this.inpInfo, newSubmittedValue);
+ // convert value
+ try {
+ // parse and convert value
+ ControlSeparatorComponent inputSepTag = (ControlSeparatorComponent) getChildren().get(1);
+ return this.control.getConvertedValue(inputSepTag, this.inpInfo, newSubmittedValue);
+ } catch (Exception e) {
+ // Add error message
+ FacesMessage msg = helper.getFieldValueErrorMessage(context, e, newSubmittedValue);
+ throw new ConverterException(msg);
+ }
}
@Override
@@ -718,11 +724,8 @@ public class ControlTag extends UIInput implements NamingContainer
// super.validateValue(context, value);
} catch (Exception e) {
- // Value is not valid
- if (!(e instanceof EmpireException))
- e = new FieldIllegalValueException(helper.getColumn(), "", e);
// Add error message
- helper.addErrorMessage(context, e);
+ helper.addFieldValueErrorMessage(context, e, value);
setValid(false);
} finally {
diff --git a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/InputTag.java b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/InputTag.java
index 5f56fafc..4460ce72 100644
--- a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/InputTag.java
+++ b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/InputTag.java
@@ -21,6 +21,15 @@ package org.apache.empire.jakarta.components;
import java.io.IOException;
import java.util.List;
+import org.apache.empire.data.Column;
+import org.apache.empire.jakarta.controls.InputControl;
+import org.apache.empire.jakarta.utils.TagEncodingHelper;
+import org.apache.empire.jakarta.utils.TagEncodingHelperFactory;
+import org.apache.empire.jakarta.utils.TagStyleClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import jakarta.faces.application.FacesMessage;
import jakarta.faces.component.NamingContainer;
import jakarta.faces.component.UIComponent;
import jakarta.faces.component.UIInput;
@@ -31,16 +40,6 @@ import jakarta.faces.context.ResponseWriter;
import jakarta.faces.convert.ConverterException;
import jakarta.faces.view.AttachedObjectHandler;
-import org.apache.empire.data.Column;
-import org.apache.empire.db.exceptions.FieldIllegalValueException;
-import org.apache.empire.exceptions.EmpireException;
-import org.apache.empire.jakarta.controls.InputControl;
-import org.apache.empire.jakarta.utils.TagEncodingHelper;
-import org.apache.empire.jakarta.utils.TagEncodingHelperFactory;
-import org.apache.empire.jakarta.utils.TagStyleClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
public class InputTag extends UIInput implements NamingContainer
{
// Logger
@@ -257,8 +256,15 @@ public class InputTag extends UIInput implements NamingContainer
{ // Check state
if (control == null || inpInfo == null || helper.isReadOnly())
return null;
- // parse and convert value
- return this.control.getConvertedValue(this, this.inpInfo, newSubmittedValue);
+ // convert value
+ try {
+ // parse and convert value
+ return this.control.getConvertedValue(this, this.inpInfo, newSubmittedValue);
+ } catch (Exception e) {
+ // Add error message
+ FacesMessage msg = helper.getFieldValueErrorMessage(context, e, newSubmittedValue);
+ throw new ConverterException(msg);
+ }
}
@Override
@@ -330,11 +336,8 @@ public class InputTag extends UIInput implements NamingContainer
// super.validateValue(context, value);
} catch (Exception e) {
- // Value is not valid
- if (!(e instanceof EmpireException))
- e = new FieldIllegalValueException(helper.getColumn(), "", e);
// Add error message
- helper.addErrorMessage(context, e);
+ helper.addFieldValueErrorMessage(context, e, value);
setValid(false);
} finally {
diff --git a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
index 4ff8940e..5d201500 100644
--- a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
+++ b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
@@ -57,9 +57,11 @@ import org.apache.empire.data.RecordData;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBRecordBase;
import org.apache.empire.db.DBRowSet;
+import org.apache.empire.db.exceptions.FieldIllegalValueException;
import org.apache.empire.db.exceptions.FieldNotNullException;
import org.apache.empire.exceptions.BeanPropertyGetException;
import org.apache.empire.exceptions.BeanPropertySetException;
+import org.apache.empire.exceptions.EmpireException;
import org.apache.empire.exceptions.InvalidArgumentException;
import org.apache.empire.exceptions.InvalidPropertyException;
import org.apache.empire.exceptions.NotSupportedException;
@@ -1478,10 +1480,18 @@ public class TagEncodingHelper implements NamingContainer
return false;
}
- public void addErrorMessage(FacesContext context, Exception e)
+ public FacesMessage getFieldValueErrorMessage(FacesContext context, Exception e, Object value)
{
+ if (!(e instanceof EmpireException))
+ e = new FieldIllegalValueException(getColumn(), StringUtils.valueOf(value), e);
+ // create faces message
String msgText = getTextResolver(context).getExceptionMessage(e);
- FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msgText, msgText);
+ return new FacesMessage(FacesMessage.SEVERITY_ERROR, msgText, msgText);
+ }
+
+ public void addFieldValueErrorMessage(FacesContext context, Exception e, Object value)
+ {
+ FacesMessage msg = getFieldValueErrorMessage(context, e, value);
context.addMessage(component.getClientId(), msg);
}
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
index 93d723b2..b8facc77 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
@@ -21,6 +21,7 @@ package org.apache.empire.jsf2.components;
import java.io.IOException;
import java.util.List;
+import javax.faces.application.FacesMessage;
import javax.faces.component.NamingContainer;
import javax.faces.component.UIComponent;
import javax.faces.component.UIComponentBase;
@@ -35,8 +36,6 @@ import javax.faces.convert.ConverterException;
import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.data.Column;
-import org.apache.empire.db.exceptions.FieldIllegalValueException;
-import org.apache.empire.exceptions.EmpireException;
import org.apache.empire.jsf2.controls.InputControl;
import org.apache.empire.jsf2.utils.ControlRenderInfo;
import org.apache.empire.jsf2.utils.TagEncodingHelper;
@@ -644,9 +643,16 @@ public class ControlTag extends UIInput implements NamingContainer
// Get Input Tag
if (getChildCount() <= 1)
return null;
- // get Input Value
- ControlSeparatorComponent inputSepTag = (ControlSeparatorComponent) getChildren().get(1);
- return this.control.getConvertedValue(inputSepTag, this.inpInfo, newSubmittedValue);
+ // convert value
+ try {
+ // parse and convert value
+ ControlSeparatorComponent inputSepTag = (ControlSeparatorComponent) getChildren().get(1);
+ return this.control.getConvertedValue(inputSepTag, this.inpInfo, newSubmittedValue);
+ } catch (Exception e) {
+ // Add error message
+ FacesMessage msg = helper.getFieldValueErrorMessage(context, e, newSubmittedValue);
+ throw new ConverterException(msg);
+ }
}
@Override
@@ -718,11 +724,8 @@ public class ControlTag extends UIInput implements NamingContainer
// super.validateValue(context, value);
} catch (Exception e) {
- // Value is not valid
- if (!(e instanceof EmpireException))
- e = new FieldIllegalValueException(helper.getColumn(), "", e);
// Add error message
- helper.addErrorMessage(context, e);
+ helper.addFieldValueErrorMessage(context, e, value);
setValid(false);
} finally {
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
index 6427fc0d..c9d32df5 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
@@ -21,6 +21,7 @@ package org.apache.empire.jsf2.components;
import java.io.IOException;
import java.util.List;
+import javax.faces.application.FacesMessage;
import javax.faces.component.NamingContainer;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
@@ -32,8 +33,6 @@ import javax.faces.convert.ConverterException;
import javax.faces.view.AttachedObjectHandler;
import org.apache.empire.data.Column;
-import org.apache.empire.db.exceptions.FieldIllegalValueException;
-import org.apache.empire.exceptions.EmpireException;
import org.apache.empire.jsf2.controls.InputControl;
import org.apache.empire.jsf2.utils.TagEncodingHelper;
import org.apache.empire.jsf2.utils.TagEncodingHelperFactory;
@@ -257,8 +256,15 @@ public class InputTag extends UIInput implements NamingContainer
{ // Check state
if (control == null || inpInfo == null || helper.isReadOnly())
return null;
- // parse and convert value
- return this.control.getConvertedValue(this, this.inpInfo, newSubmittedValue);
+ // convert value
+ try {
+ // parse and convert value
+ return this.control.getConvertedValue(this, this.inpInfo, newSubmittedValue);
+ } catch (Exception e) {
+ // Add error message
+ FacesMessage msg = helper.getFieldValueErrorMessage(context, e, newSubmittedValue);
+ throw new ConverterException(msg);
+ }
}
@Override
@@ -330,11 +336,8 @@ public class InputTag extends UIInput implements NamingContainer
// super.validateValue(context, value);
} catch (Exception e) {
- // Value is not valid
- if (!(e instanceof EmpireException))
- e = new FieldIllegalValueException(helper.getColumn(), "", e);
// Add error message
- helper.addErrorMessage(context, e);
+ helper.addFieldValueErrorMessage(context, e, value);
setValid(false);
} finally {
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index 27710768..e7067b6c 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -57,9 +57,11 @@ import org.apache.empire.data.RecordData;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBRecordBase;
import org.apache.empire.db.DBRowSet;
+import org.apache.empire.db.exceptions.FieldIllegalValueException;
import org.apache.empire.db.exceptions.FieldNotNullException;
import org.apache.empire.exceptions.BeanPropertyGetException;
import org.apache.empire.exceptions.BeanPropertySetException;
+import org.apache.empire.exceptions.EmpireException;
import org.apache.empire.exceptions.InvalidArgumentException;
import org.apache.empire.exceptions.InvalidPropertyException;
import org.apache.empire.exceptions.NotSupportedException;
@@ -1478,10 +1480,18 @@ public class TagEncodingHelper implements NamingContainer
return false;
}
- public void addErrorMessage(FacesContext context, Exception e)
+ public FacesMessage getFieldValueErrorMessage(FacesContext context, Exception e, Object value)
{
+ if (!(e instanceof EmpireException))
+ e = new FieldIllegalValueException(getColumn(), StringUtils.valueOf(value), e);
+ // create faces message
String msgText = getTextResolver(context).getExceptionMessage(e);
- FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msgText, msgText);
+ return new FacesMessage(FacesMessage.SEVERITY_ERROR, msgText, msgText);
+ }
+
+ public void addFieldValueErrorMessage(FacesContext context, Exception e, Object value)
+ {
+ FacesMessage msg = getFieldValueErrorMessage(context, e, value);
context.addMessage(component.getClientId(), msg);
}