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);
}