You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2015/10/18 12:05:28 UTC

camel git commit: Revert "CAMEL-8959: Remove old code from camel-cxf no longer needed due the CXF 3.0+ upgrade"

Repository: camel
Updated Branches:
  refs/heads/master c9a3df291 -> e96fe7f80


Revert "CAMEL-8959: Remove old code from camel-cxf no longer needed due the CXF 3.0+ upgrade"

This reverts commit e269b0a905106c361e68bc41e4c146a6d01ba444.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e96fe7f8
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e96fe7f8
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e96fe7f8

Branch: refs/heads/master
Commit: e96fe7f809862ba766034332256e4d07f87029d1
Parents: c9a3df2
Author: Andrea Cosentino <an...@gmail.com>
Authored: Sun Oct 18 11:38:01 2015 +0200
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Sun Oct 18 11:38:01 2015 +0200

----------------------------------------------------------------------
 .../common/message/DefaultCxfMessageMapper.java | 43 +++++++++++++-------
 .../component/cxf/HybridSourceDataBinding.java  | 13 ++++++
 2 files changed, 42 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e96fe7f8/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapper.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapper.java b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapper.java
index be85bb5..d2510be 100644
--- a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapper.java
+++ b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/common/message/DefaultCxfMessageMapper.java
@@ -16,12 +16,11 @@
  */
 package org.apache.camel.component.cxf.common.message;
 
+import java.lang.reflect.Method;
 import java.security.Principal;
 import java.util.List;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.cxf.helpers.CastUtils;
@@ -69,7 +68,7 @@ public class DefaultCxfMessageMapper implements CxfMessageMapper {
         answer.put(org.apache.cxf.message.Message.ENCODING, enc);
         answer.put(org.apache.cxf.message.Message.QUERY_STRING, queryString);
         
-        HttpServletRequest request = (HttpServletRequest) camelMessage.getHeader(Exchange.HTTP_SERVLET_REQUEST);
+        Object request = camelMessage.getHeader(Exchange.HTTP_SERVLET_REQUEST);
         answer.put(CXF_HTTP_REQUEST, request);
         
         if (request != null) {
@@ -85,19 +84,35 @@ public class DefaultCxfMessageMapper implements CxfMessageMapper {
         return answer;
     }
     
-    protected void setSecurityContext(Message cxfMessage, final HttpServletRequest request) {
-        cxfMessage.put(SecurityContext.class, new SecurityContext() {
-
-            public Principal getUserPrincipal() {
-                return request.getUserPrincipal();
-            }
+    protected void setSecurityContext(Message cxfMessage, final Object request) {
+        try {
+            final Method getPrincipalMethod = request.getClass()
+                .getMethod("getUserPrincipal", new Class[] {});
+            final Method userInRoleMethod = request.getClass()
+                .getMethod("isUserInRole", new Class[] {String.class});
+            cxfMessage.put(SecurityContext.class, new SecurityContext() {
+
+                public Principal getUserPrincipal() {
+                    try {
+                        return (Principal)getPrincipalMethod.invoke(request, new Object[] {});
+                    } catch (Throwable t) {
+                        return null;
+                    }
+                }
 
-            @Override
-            public boolean isUserInRole(String role) {
-                return request.isUserInRole(role);
-            }
+                @Override
+                public boolean isUserInRole(String role) {
+                    try {
+                        return (Boolean)userInRoleMethod.invoke(request, new Object[] {role});
+                    } catch (Throwable t) {
+                        return false;
+                    }
+                }
 
-        });
+            });
+        } catch (Throwable t) {
+            // not expected
+        }
     }
 
     public void propagateResponseHeadersToCamel(Message cxfMessage, Exchange exchange,

http://git-wip-us.apache.org/repos/asf/camel/blob/e96fe7f8/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/HybridSourceDataBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/HybridSourceDataBinding.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/HybridSourceDataBinding.java
index 99036f5..74eb5d1 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/HybridSourceDataBinding.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/HybridSourceDataBinding.java
@@ -84,6 +84,19 @@ public class HybridSourceDataBinding extends JAXBDataBinding {
                     if (obj == null) {
                         return;
                     }
+                    // workaround issue in CXF that is causing these to go through 
+                    // sax instead of stax.  Fixed in 2.4.4/2.5.
+                    if (obj instanceof StaxSource
+                        || obj instanceof StAXSource) {
+                        XMLStreamReader reader = StaxUtils.createXMLStreamReader((Source)obj);
+                        try {
+                            StaxUtils.copy(reader, output);
+                            reader.close();
+                        } catch (XMLStreamException e) {
+                            throw new Fault(new Message("COULD_NOT_READ_XML_STREAM", LOG), e);
+                        }
+                        return;
+                    }
                     super.write(obj, part, output);
                 }