From 2d09c65883771109dcee2e84d65d8310a5f4e160 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Thu, 19 Mar 2009 18:39:21 +0000 Subject: [PATCH] patch for swf-1073 --- .../FlowFacesContextMessageDelegate.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextMessageDelegate.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextMessageDelegate.java index baf14e8b..3d9bcb9d 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextMessageDelegate.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextMessageDelegate.java @@ -274,6 +274,9 @@ public class FlowFacesContextMessageDelegate { * uncommon for FacesMessages to be changed after they gave been added to a FacesContext, for * example, from a PhaseListener. *

+ * NOTE: Only {@link javax.faces.application.FacesMessage} instances are directly adapted, any subclasses will be + * converted to the standard FacesMessage implementation. This is to protect against bugs such as SWF-1073. + * * For convenience this class also implements the {@link MessageResolver} interface. */ private static class FlowFacesMessageAdapter extends Message implements MessageResolver { @@ -286,7 +289,20 @@ public class FlowFacesContextMessageDelegate { super(null, null, null); this.source = source; this.key = key; - this.facesMessage = message; + this.facesMessage = asStandardFacesMessageInstance(message); + } + + /** + * Use standard faces message as required to protect against bugs such as SWF-1073. + * + * @param message {@link javax.faces.application.FacesMessage} or subclass. + * @return {@link javax.faces.application.FacesMessage} instance + */ + private FacesMessage asStandardFacesMessageInstance(FacesMessage message) { + if (FacesMessage.class.equals(message.getClass())) { + return message; + } + return new FacesMessage(message.getSeverity(), message.getSummary(), message.getDetail()); } public Object getSource() {