suggested fix:
Index: C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/context/DOMResponseWriter.java
===================================================================
— C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/context/DOMResponseWriter.java (revision 14269)
+++ C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/context/DOMResponseWriter.java (working copy)
@@ -354,10 +354,15 @@
ElementController.from(session).addInto(body);
String sessionIDScript = "window.session='" + context.getIceFacesId() + "'; ";
+ String connectionLostRedirectURI = configuration.getAttributeAsSingleQuotedRelativeURL("connectionLostRedirectURI", "null");
+ if( connectionLostRedirectURI == null )
{
+ log.warn( configuration.getAttribute("connectionLostRedirectURI","") + " is not a valid URL for 'connectionLostRedirectURI'");
+ connectionLostRedirectURI = "null";
+ }
String configurationScript =
"window.configuration = {" +
"synchronous: " + configuration.getAttribute("synchronousUpdate", "false") + "," +
- "redirectURI: " + configuration.getAttribute("connectionLostRedirectURI", "null") + "," +
+ "redirectURI: " + connectionLostRedirectURI + "," +
"connection: {" +
"context: '" + context.getApplication().getViewHandler().getResourceURL(context, "/") + "'," +
"timeout: " + configuration.getAttributeAsLong("connectionTimeout", 30000) + "," +
Index: C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/webapp/http/common/Configuration.java
===================================================================
— C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/webapp/http/common/Configuration.java (revision 14269)
+++ C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/webapp/http/common/Configuration.java (working copy)
@@ -1,5 +1,10 @@
package com.icesoft.faces.webapp.http.common;
+import java.util.regex.Pattern;
+
+import javax.faces.context.FacesContext;
+
+
public abstract class Configuration
{
public abstract String getName();
@@ -147,4 +152,43 @@
return defaultValue;
}
}
+
+ public String getAttributeAsSingleQuotedRelativeURL(String name, String defaultValue){
+ String result = defaultValue;
+ try{
+ result = getAttributeAsRelativeURL(name,defaultValue);
+ if( result != null && !result.equals(defaultValue))
{
+
+ //modify url to ensure it starts with '/ and ends with '
+ if( result.startsWith("'"))
+ result = result.substring(1);
+ if( result.startsWith("/"))
+ result = result.substring(1);
+ result = "'/" + result;
+ if( !result.endsWith("'"))
+ result += "'";
+ }
+ }
+ catch( ConfigurationException e)
{
+ result = null;
+ }
+
+ return result;
+ }
+
+ public String getAttributeAsRelativeURL(String name, String defaultValue)
+ throws ConfigurationException{
+ String result = getAttribute(name);
+ if( result != null ){
+ result = result.trim();
+ if( ! Pattern.matches("^/\\S./+$", result) )
{
+ throw new ConfigurationException( result + " is not a valid URL for " + name);
+ }
+
+ return result;
+ }
+ return defaultValue;
+ }
+
+
}
suggested fix:
Index: C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/context/DOMResponseWriter.java
===================================================================
— C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/context/DOMResponseWriter.java (revision 14269)
+++ C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/context/DOMResponseWriter.java (working copy)
@@ -354,10 +354,15 @@
ElementController.from(session).addInto(body);
String sessionIDScript = "window.session='" + context.getIceFacesId() + "'; ";
{ + log.warn( configuration.getAttribute("connectionLostRedirectURI","") + " is not a valid URL for 'connectionLostRedirectURI'"); + connectionLostRedirectURI = "null"; + }+ String connectionLostRedirectURI = configuration.getAttributeAsSingleQuotedRelativeURL("connectionLostRedirectURI", "null");
+ if( connectionLostRedirectURI == null )
String configurationScript =
"window.configuration = {" +
"synchronous: " + configuration.getAttribute("synchronousUpdate", "false") + "," +
+ "redirectURI: " + connectionLostRedirectURI + "," +
"connection: {" +
"context: '" + context.getApplication().getViewHandler().getResourceURL(context, "/") + "'," +
"timeout: " + configuration.getAttributeAsLong("connectionTimeout", 30000) + "," +
Index: C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/webapp/http/common/Configuration.java
===================================================================
— C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/webapp/http/common/Configuration.java (revision 14269)
+++ C:/Users/Philip/workspace/ICEfaces Head/icefaces/core/src/com/icesoft/faces/webapp/http/common/Configuration.java (working copy)
@@ -1,5 +1,10 @@
package com.icesoft.faces.webapp.http.common;
+import java.util.regex.Pattern;
{ public abstract String getName(); @@ -147,4 +152,43 @@ return defaultValue; }+
+import javax.faces.context.FacesContext;
+
+
public abstract class Configuration
}
{ + + //modify url to ensure it starts with '/ and ends with ' + if( result.startsWith("'")) + result = result.substring(1); + if( result.startsWith("/")) + result = result.substring(1); + result = "'/" + result; + if( !result.endsWith("'")) + result += "'"; + }+
+ public String getAttributeAsSingleQuotedRelativeURL(String name, String defaultValue){
+ String result = defaultValue;
+ try{
+ result = getAttributeAsRelativeURL(name,defaultValue);
+ if( result != null && !result.equals(defaultValue))
+ }
{ + result = null; + }+ catch( ConfigurationException e)
+
{ + throw new ConfigurationException( result + " is not a valid URL for " + name); + }+ return result;
+ }
+
+ public String getAttributeAsRelativeURL(String name, String defaultValue)
+ throws ConfigurationException{
+ String result = getAttribute(name);
+ if( result != null ){
+ result = result.trim();
+ if( ! Pattern.matches("^/\\S./+$", result) )
+
+ return result;
+ }
+ return defaultValue;
+ }
+
+
}