Author: ffang
Date: Tue Feb 22 09:21:11 2011
New Revision: 1073271
URL: http://svn.apache.org/viewvc?rev=1073271&view=rev
Log:
[SMXCOMP-858]CXFSE Proxy Doesn't Implement propagateSubject Setting
Modified:
servicemix/components/trunk/engines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java
Modified:
servicemix/components/trunk/engines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java
URL:
http://svn.apache.org/viewvc/servicemix/components/trunk/engines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java?rev=1073271&r1=1073270&r2=1073271&view=diff
==============================================================================
---
servicemix/components/trunk/engines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java
(original)
+++
servicemix/components/trunk/engines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java
Tue Feb 22 09:21:11 2011
@@ -21,6 +21,13 @@ import java.util.List;
import javax.jbi.component.ComponentContext;
import javax.jbi.messaging.DeliveryChannel;
+import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.InOut;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessageExchangeFactory;
+import javax.jbi.messaging.MessagingException;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.jbi.servicedesc.ServiceEndpoint;
import javax.naming.InitialContext;
import javax.xml.namespace.QName;
@@ -100,6 +107,7 @@ public class CxfSeProxyFactoryBean imple
if (proxy == null) {
proxy = createProxy();
}
+
return proxy;
}
@@ -153,6 +161,9 @@ public class CxfSeProxyFactoryBean imple
}
ClientProxy.getClient(proxy).setThreadLocalRequestContext(true);
+ if (isPropagateSecuritySubject()) {
+ jbiTransportFactory.setDeliveryChannel(new
PropagateSecuritySubjectDeliveryChannel(jbiTransportFactory.getDeliveryChannel()));
+ }
return proxy;
}
@@ -432,4 +443,69 @@ public class CxfSeProxyFactoryBean imple
}
}
+ public class PropagateSecuritySubjectDeliveryChannel implements
DeliveryChannel {
+
+ private DeliveryChannel delegate;
+
+ public PropagateSecuritySubjectDeliveryChannel(DeliveryChannel dc) {
+ this.delegate = dc;
+ }
+
+ public void close() throws MessagingException {
+ delegate.close();
+ }
+
+ public MessageExchangeFactory createExchangeFactory() {
+ return delegate.createExchangeFactory();
+ }
+
+ public MessageExchangeFactory createExchangeFactory(QName
interfaceName) {
+ return delegate.createExchangeFactory(interfaceName);
+ }
+
+ public MessageExchangeFactory createExchangeFactoryForService(QName
serviceName) {
+ return delegate.createExchangeFactoryForService(serviceName);
+ }
+
+ public MessageExchangeFactory createExchangeFactory(ServiceEndpoint
endpoint) {
+ return delegate.createExchangeFactory(endpoint);
+ }
+
+ public MessageExchange accept() throws MessagingException {
+ return delegate.accept();
+ }
+
+ public MessageExchange accept(long timeout) throws MessagingException {
+ return delegate.accept(timeout);
+ }
+
+ public void send(MessageExchange exchange) throws MessagingException {
+ propagateSubject(exchange);
+ delegate.send(exchange);
+ }
+
+ public boolean sendSync(MessageExchange exchange) throws
MessagingException {
+ propagateSubject(exchange);
+ return delegate.sendSync(exchange);
+ }
+
+ public boolean sendSync(MessageExchange exchange, long timeout) throws
MessagingException {
+ propagateSubject(exchange);
+ return delegate.sendSync(exchange, timeout);
+ }
+
+ private void propagateSubject(MessageExchange exchange) {
+ NormalizedMessage msg;
+ if (exchange instanceof InOnly) {
+ msg = ((InOnly) exchange).getInMessage();
+ } else if (exchange instanceof InOut) {
+ msg = ((InOut) exchange).getInMessage();
+ } else {
+ throw new RuntimeException("Unable to determine message type
to propagate subject: " + exchange.getClass().getName());
+ }
+ if (msg.getSecuritySubject() == null &&
JBIContext.getMessageExchange() != null &&
JBIContext.getMessageExchange().getMessage("in") != null) {
+
msg.setSecuritySubject(JBIContext.getMessageExchange().getMessage("in").getSecuritySubject());
+ }
+ }
+ }
}