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 <anco...@gmail.com> Authored: Sun Oct 18 11:38:01 2015 +0200 Committer: Andrea Cosentino <anco...@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); }