diff --git a/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java b/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java
index 01e9147d04..b6520fb35a 100644
--- a/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java
+++ b/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Remote API
* %%
- * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * Copyright (C) 2005 - 2019 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -181,6 +181,22 @@ public class BufferedResponse implements WrappingWebScriptResponse
res.reset();
}
+ /* (non-Javadoc)
+ * @see org./alfresco.web.scripts.WebScriptResponse#resetjava.lang.String)
+ */
+ public void reset(String preserveHeadersPattern)
+ {
+ if (outputStream != null)
+ {
+ outputStream = null;
+ }
+ else if (outputWriter != null)
+ {
+ outputWriter = null;
+ }
+ res.reset(preserveHeadersPattern);
+ }
+
/*
* (non-Javadoc)
* @see org.alfresco.web.scripts.WebScriptResponse#setCache(org.alfresco.web.scripts.Cache)
diff --git a/src/main/java/org/alfresco/repo/web/scripts/RepositoryContainer.java b/src/main/java/org/alfresco/repo/web/scripts/RepositoryContainer.java
index 0e4fb8c752..e3bb07f362 100644
--- a/src/main/java/org/alfresco/repo/web/scripts/RepositoryContainer.java
+++ b/src/main/java/org/alfresco/repo/web/scripts/RepositoryContainer.java
@@ -2,7 +2,7 @@
* #%L
* Alfresco Remote API
* %%
- * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * Copyright (C) 2005 - 2019 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -97,6 +97,7 @@ public class RepositoryContainer extends AbstractRuntimeContainer
private int memoryThreshold = 4 * 1024 * 1024; // 4mb
private long maxContentSize = (long) 4 * 1024 * 1024 * 1024; // 4gb
private TempStoreOutputStreamFactory streamFactory = null;
+ private String preserveHeadersPattern = null;
private Class>[] notPublicExceptions = new Class>[] {};
private Class>[] publicExceptions = new Class>[] {};
@@ -139,6 +140,11 @@ public class RepositoryContainer extends AbstractRuntimeContainer
}
}
+ public void setPreserveHeadersPattern(String preserveHeadersPattern)
+ {
+ this.preserveHeadersPattern = preserveHeadersPattern;
+ }
+
/**
* @param repository Repository
*/
@@ -515,7 +521,8 @@ public class RepositoryContainer extends AbstractRuntimeContainer
{
// Reset the request and response in case of a transaction retry
bufferedReq.reset();
- bufferedRes.reset();
+ // REPO-4388 don't reset specified headers
+ bufferedRes.reset(preserveHeadersPattern);
script.execute(bufferedReq, bufferedRes);
}
}
diff --git a/src/main/resources/alfresco/project-remote-api.properties b/src/main/resources/alfresco/project-remote-api.properties
index 5ae37f8369..c76b37a1c2 100644
--- a/src/main/resources/alfresco/project-remote-api.properties
+++ b/src/main/resources/alfresco/project-remote-api.properties
@@ -22,3 +22,5 @@
#
# See issue REPO-2575 for details.
alfresco.restApi.basicAuthScheme=false
+# REPO-4388 allow CORS headers in transaction response
+webscripts.transaction.preserveHeadersPattern=Access-Control-.*
\ No newline at end of file
diff --git a/src/main/resources/alfresco/public-rest-context.xml b/src/main/resources/alfresco/public-rest-context.xml
index a99d06aa86..95eed313d3 100644
--- a/src/main/resources/alfresco/public-rest-context.xml
+++ b/src/main/resources/alfresco/public-rest-context.xml
@@ -66,6 +66,7 @@
+
diff --git a/src/main/resources/alfresco/web-scripts-application-context.xml b/src/main/resources/alfresco/web-scripts-application-context.xml
index 7bf6b4e3b7..1cb6c41f62 100644
--- a/src/main/resources/alfresco/web-scripts-application-context.xml
+++ b/src/main/resources/alfresco/web-scripts-application-context.xml
@@ -175,6 +175,7 @@
+