diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch.get.desc.xml
index a02bb29363..fd0e00ebfc 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch.get.desc.xml
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch.get.desc.xml
@@ -6,5 +6,4 @@
guest
- any
\ No newline at end of file
diff --git a/source/java/org/alfresco/web/scripts/AbstractWebScript.java b/source/java/org/alfresco/web/scripts/AbstractWebScript.java
index 377bea1a55..b776a03ba1 100644
--- a/source/java/org/alfresco/web/scripts/AbstractWebScript.java
+++ b/source/java/org/alfresco/web/scripts/AbstractWebScript.java
@@ -31,6 +31,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import javax.servlet.http.HttpServletResponse;
+
import org.alfresco.repo.jscript.Node;
import org.alfresco.repo.jscript.ScriptableHashMap;
import org.alfresco.repo.template.AbsoluteUrlMethod;
@@ -358,12 +360,13 @@ public abstract class AbstractWebScript implements WebScript
if (logger.isDebugEnabled())
{
+ logger.debug("Force success status header in response: " + req.forceSuccessStatus());
logger.debug("Sending status " + statusCode + " (Template: " + template.path + ")");
logger.debug("Rendering response: content type=" + mimetype);
}
res.reset();
- res.setStatus(statusCode);
+ res.setStatus(req.forceSuccessStatus() ? HttpServletResponse.SC_OK : statusCode);
res.setContentType(mimetype + ";charset=UTF-8");
renderTemplate(template.path, model, res.getWriter());
}
diff --git a/source/java/org/alfresco/web/scripts/DeclarativeWebScript.java b/source/java/org/alfresco/web/scripts/DeclarativeWebScript.java
index 08d953d978..8a327a4a9e 100644
--- a/source/java/org/alfresco/web/scripts/DeclarativeWebScript.java
+++ b/source/java/org/alfresco/web/scripts/DeclarativeWebScript.java
@@ -129,8 +129,10 @@ public class DeclarativeWebScript extends AbstractWebScript
{
// render output
int statusCode = status.getCode();
- if (statusCode != HttpServletResponse.SC_OK)
+ if (statusCode != HttpServletResponse.SC_OK && !req.forceSuccessStatus())
{
+ logger.debug("Force success status header in response: " + req.forceSuccessStatus());
+ logger.debug("Setting status " + statusCode);
res.setStatus(statusCode);
}
diff --git a/source/java/org/alfresco/web/scripts/TestWebScriptServer.java b/source/java/org/alfresco/web/scripts/TestWebScriptServer.java
index 6084744686..d85bf3893a 100644
--- a/source/java/org/alfresco/web/scripts/TestWebScriptServer.java
+++ b/source/java/org/alfresco/web/scripts/TestWebScriptServer.java
@@ -79,6 +79,9 @@ public class TestWebScriptServer
/** Current user */
private String username = "admin";
+ /** Current headers */
+ private Map headers = new HashMap();
+
/** I18N Messages */
private MessageSource m_messages;
@@ -391,7 +394,9 @@ public class TestWebScriptServer
command[0].equals("delete"))
{
String uri = (command.length > 1) ? command[1] : null;
- MockHttpServletResponse res = submitRequest(command[0], uri);
+ MockHttpServletResponse res = submitRequest(command[0], uri, headers);
+ bout.write(("Response status: " + res.getStatus()).getBytes());
+ out.println();
bout.write(res.getContentAsByteArray());
out.println();
}
@@ -414,16 +419,17 @@ public class TestWebScriptServer
{
uri += "&alf:method=" + command[2];
}
- MockHttpServletResponse res = submitRequest("post", uri);
+ MockHttpServletResponse res = submitRequest("post", uri, headers);
bout.write(res.getContentAsByteArray());
out.println();
}
else if (command[1].equals("header"))
{
- Map headers = new HashMap();
- headers.put("X-HTTP-Method-Override", command[2]);
- MockHttpServletResponse res = submitRequest("post", command[3], headers);
+ Map tunnelheaders = new HashMap();
+ tunnelheaders.putAll(headers);
+ tunnelheaders.put("X-HTTP-Method-Override", command[2]);
+ MockHttpServletResponse res = submitRequest("post", command[3], tunnelheaders);
bout.write(res.getContentAsByteArray());
out.println();
}
@@ -434,6 +440,43 @@ public class TestWebScriptServer
}
}
+ else if (command[0].equals("header"))
+ {
+ if (command.length == 1)
+ {
+ for (Map.Entry entry : headers.entrySet())
+ {
+ out.println(entry.getKey() + " = " + entry.getValue());
+ }
+ }
+ else if (command.length == 2)
+ {
+ String[] param = command[1].split("=");
+ if (param.length == 0)
+ {
+ return "Syntax Error.\n";
+ }
+ if (param.length == 1)
+ {
+ headers.remove(param[0]);
+ out.println("deleted header " + param[0]);
+ }
+ else if (param.length == 2)
+ {
+ headers.put(param[0], param[1]);
+ out.println("set header " + param[0] + " = " + headers.get(param[0]));
+ }
+ else
+ {
+ return "Syntax Error.\n";
+ }
+ }
+ else
+ {
+ return "Syntax Error.\n";
+ }
+ }
+
else if (command[0].equals("reset"))
{
registry.reset();
diff --git a/source/java/org/alfresco/web/scripts/WebScriptRequest.java b/source/java/org/alfresco/web/scripts/WebScriptRequest.java
index e2a3e51ec0..342a4ff262 100644
--- a/source/java/org/alfresco/web/scripts/WebScriptRequest.java
+++ b/source/java/org/alfresco/web/scripts/WebScriptRequest.java
@@ -141,13 +141,6 @@ public interface WebScriptRequest
*/
public FormatStyle getFormatStyle();
- /**
- * Get the JSON callback method
- *
- * @return method (or null, if not specified)
- */
- public String getJSONCallback();
-
/**
* Get User Agent
*
@@ -157,4 +150,21 @@ public interface WebScriptRequest
*/
public String getAgent();
+ /**
+ * Get the JSON callback method
+ *
+ * @return method (or null, if not specified)
+ */
+ public String getJSONCallback();
+
+ /**
+ * Force response to return SUCCESS (200) code
+ *
+ * Note: This is to support clients who cannot support non-success codes
+ * e.g. Flash player
+ *
+ * @return true => force return of 200, otherwise return status explicitly set
+ */
+ public boolean forceSuccessStatus();
+
}
diff --git a/source/java/org/alfresco/web/scripts/WebScriptRequestImpl.java b/source/java/org/alfresco/web/scripts/WebScriptRequestImpl.java
index 5412a41cfb..29fa6cf824 100644
--- a/source/java/org/alfresco/web/scripts/WebScriptRequestImpl.java
+++ b/source/java/org/alfresco/web/scripts/WebScriptRequestImpl.java
@@ -147,4 +147,12 @@ public abstract class WebScriptRequestImpl implements WebScriptRequest
return getParameter("alf_callback");
}
+ /* (non-Javadoc)
+ * @see org.alfresco.web.scripts.WebScriptRequest#forceSuccessStatus()
+ */
+ public boolean forceSuccessStatus()
+ {
+ return false;
+ }
+
}
diff --git a/source/java/org/alfresco/web/scripts/WebScriptRuntime.java b/source/java/org/alfresco/web/scripts/WebScriptRuntime.java
index b4768020ad..698809657e 100644
--- a/source/java/org/alfresco/web/scripts/WebScriptRuntime.java
+++ b/source/java/org/alfresco/web/scripts/WebScriptRuntime.java
@@ -138,8 +138,7 @@ public abstract class WebScriptRuntime
String reqFormat = scriptReq.getFormat();
String format = (reqFormat == null || reqFormat.length() == 0) ? "default" : scriptReq.getFormat();
WebScriptDescription desc = scriptReq.getServiceMatch().getWebScript().getDescription();
- logger.debug("Format style: " + desc.getFormatStyle());
- logger.debug("Default format: " + desc.getDefaultFormat());
+ logger.debug("Format style: " + desc.getFormatStyle() + ", Default format: " + desc.getDefaultFormat());
logger.debug("Invoking Web Script " + description.getId() + (user == null ? " (unauthenticated)" : " (authenticated as " + user + ") (format " + format + ") (" + locale + ")"));
}
@@ -224,12 +223,13 @@ public abstract class WebScriptRuntime
// render output
if (logger.isDebugEnabled())
{
+ logger.debug("Force success status header in response: " + req.forceSuccessStatus());
logger.debug("Sending status " + statusCode + " (Template: " + templatePath + ")");
logger.debug("Rendering response: content type=" + MimetypeMap.MIMETYPE_HTML);
}
res.reset();
- res.setStatus(statusCode);
+ res.setStatus(req.forceSuccessStatus() ? HttpServletResponse.SC_OK : statusCode);
res.setContentType(MimetypeMap.MIMETYPE_HTML + ";charset=UTF-8");
try
{
diff --git a/source/java/org/alfresco/web/scripts/WebScriptServletRequest.java b/source/java/org/alfresco/web/scripts/WebScriptServletRequest.java
index b9155e50c5..9c9f952b84 100644
--- a/source/java/org/alfresco/web/scripts/WebScriptServletRequest.java
+++ b/source/java/org/alfresco/web/scripts/WebScriptServletRequest.java
@@ -248,4 +248,14 @@ public class WebScriptServletRequest extends WebScriptRequestImpl
return port;
}
+ /* (non-Javadoc)
+ * @see org.alfresco.web.scripts.WebScriptRequestImpl#forceSuccessStatus()
+ */
+ @Override
+ public boolean forceSuccessStatus()
+ {
+ String forceSuccess = req.getHeader("alf-force-success-response");
+ return Boolean.valueOf(forceSuccess);
+ }
+
}