You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/11/22 15:50:02 UTC
[2/2] camel git commit: CAMEL-8270: camel-restlet should support CORS
again.
CAMEL-8270: camel-restlet should support CORS again.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/28bbd8e6
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/28bbd8e6
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/28bbd8e6
Branch: refs/heads/camel-2.16.x
Commit: 28bbd8e616d519a6114c9e192794467e7028378d
Parents: 92a6514
Author: Claus Ibsen <da...@apache.org>
Authored: Sun Nov 22 15:49:27 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Nov 22 15:49:53 2015 +0100
----------------------------------------------------------------------
.../restlet/DefaultRestletBinding.java | 77 +++++++++++++++++++-
1 file changed, 76 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/28bbd8e6/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
index 264093c..d0882f7 100644
--- a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
+++ b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java
@@ -26,9 +26,12 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
import javax.xml.transform.dom.DOMSource;
@@ -40,6 +43,7 @@ import org.apache.camel.component.file.GenericFile;
import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.camel.spi.HeaderFilterStrategyAware;
import org.apache.camel.util.MessageHelper;
+import org.apache.camel.util.ObjectHelper;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.data.CacheDirective;
@@ -359,7 +363,7 @@ public class DefaultRestletBinding implements RestletBinding, HeaderFilterStrate
}
@SuppressWarnings("unchecked")
- protected boolean setResponseHeader(Exchange exchange, org.restlet.Message message, String header, Object value) {
+ protected boolean setResponseHeader(Exchange exchange, org.restlet.Response message, String header, Object value) {
// there must be a value going forward
if (value == null) {
return true;
@@ -370,6 +374,77 @@ public class DefaultRestletBinding implements RestletBinding, HeaderFilterStrate
// special for certain headers
if (message.getEntity() != null) {
+ // arfg darn restlet you make using your api harder for end users with all this trick just to set those ACL headers
+ if (header.equalsIgnoreCase(HeaderConstants.HEADER_ACCESS_CONTROL_ALLOW_CREDENTIAL)) {
+ Boolean bool = exchange.getContext().getTypeConverter().tryConvertTo(Boolean.class, value);
+ if (bool != null) {
+ message.setAccessControlAllowCredential(bool);
+ }
+ return true;
+ }
+ if (header.equalsIgnoreCase(HeaderConstants.HEADER_ACCESS_CONTROL_ALLOW_HEADERS)) {
+ Set set;
+ if (value instanceof Set) {
+ set = (Set) value;
+ } else {
+ set = new LinkedHashSet();
+ Iterator it = ObjectHelper.createIterator(value);
+ while (it.hasNext()) {
+ Object next = it.next();
+ String text = exchange.getContext().getTypeConverter().tryConvertTo(String.class, next);
+ if (text != null) {
+ set.add(text);
+ }
+ }
+ }
+ message.setAccessControlAllowHeaders(set);
+ return true;
+ }
+ if (header.equalsIgnoreCase(HeaderConstants.HEADER_ACCESS_CONTROL_ALLOW_METHODS)) {
+ Set set;
+ if (value instanceof Set) {
+ set = (Set) value;
+ } else {
+ set = new LinkedHashSet();
+ Iterator it = ObjectHelper.createIterator(value);
+ while (it.hasNext()) {
+ Object next = it.next();
+ String text = exchange.getContext().getTypeConverter().tryConvertTo(String.class, next);
+ if (text != null) {
+ Method method = new Method(text);
+ set.add(method);
+ }
+ }
+ }
+ message.setAccessControlAllowMethods(set);
+ return true;
+ }
+ if (header.equalsIgnoreCase(HeaderConstants.HEADER_ACCESS_CONTROL_ALLOW_ORIGIN)) {
+ String text = exchange.getContext().getTypeConverter().tryConvertTo(String.class, value);
+ if (text != null) {
+ message.setAccessControlAllowOrigin(text);
+ }
+ return true;
+ }
+ if (header.equalsIgnoreCase(HeaderConstants.HEADER_ACCESS_CONTROL_EXPOSE_HEADERS)) {
+ Set set;
+ if (value instanceof Set) {
+ set = (Set) value;
+ } else {
+ set = new LinkedHashSet();
+ Iterator it = ObjectHelper.createIterator(value);
+ while (it.hasNext()) {
+ Object next = it.next();
+ String text = exchange.getContext().getTypeConverter().tryConvertTo(String.class, next);
+ if (text != null) {
+ Method method = new Method(text);
+ set.add(method);
+ }
+ }
+ }
+ message.setAccessControlExposeHeaders(set);
+ return true;
+ }
if (header.equalsIgnoreCase(HeaderConstants.HEADER_CACHE_CONTROL)) {
if (value instanceof List) {
message.setCacheDirectives((List<CacheDirective>) value);