Author: alessio.soldano(a)jboss.com
Date: 2010-06-10 16:39:35 -0400 (Thu, 10 Jun 2010)
New Revision: 12465
Added:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/interceptor/
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/interceptor/EndpointAssociationInterceptor.java
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/AbstractInvoker.java
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/ServletControllerExt.java
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java
Log:
[JBWS-3060] Linking spi endpoint to the message exchange using a custom interceptor
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/AbstractInvoker.java
===================================================================
---
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/AbstractInvoker.java 2010-06-10
17:22:10 UTC (rev 12464)
+++
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/AbstractInvoker.java 2010-06-10
20:39:35 UTC (rev 12465)
@@ -72,7 +72,6 @@
import org.apache.cxf.service.invoker.Invoker;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.jboss.wsf.spi.deployment.Endpoint;
-import org.jboss.wsf.spi.invocation.EndpointAssociation;
import org.jboss.wsf.spi.invocation.Invocation;
import org.jboss.wsf.spi.invocation.InvocationContext;
import org.jboss.wsf.spi.invocation.InvocationHandler;
@@ -83,6 +82,7 @@
*
* @author Thomas.Diesler(a)jboss.org
* @author richard.opalka(a)jboss.com
+ * @author alessio.soldano(a)jboss.com
*
* @see org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker
*/
@@ -145,7 +145,7 @@
}
}
- Endpoint ep = EndpointAssociation.getEndpoint();
+ Endpoint ep = exchange.get(Endpoint.class);
InvocationHandler invHandler = ep.getInvocationHandler();
Invocation inv = invHandler.createInvocation();
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/ServletControllerExt.java
===================================================================
---
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/ServletControllerExt.java 2010-06-10
17:22:10 UTC (rev 12464)
+++
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/ServletControllerExt.java 2010-06-10
20:39:35 UTC (rev 12465)
@@ -55,7 +55,6 @@
public class ServletControllerExt extends ServletController
{
private ServletTransportFactory cxfTransport;
- private ServletContext servletCtx;
private Bus bus;
private ServerConfig serverConfig;
@@ -63,7 +62,6 @@
{
super(cxfTransport, config, servletCtx, bus);
this.cxfTransport = cxfTransport;
- this.servletCtx = servletCtx;
this.bus = bus;
SPIProvider spiProvider = SPIProviderResolver.getInstance().getProvider();
serverConfig = spiProvider.getSPI(ServerConfigFactory.class).getServerConfig();
@@ -80,7 +78,6 @@
// Find destination based on request URI
String requestURI = req.getRequestURI();
Collection<ServletDestination> destinations =
cxfTransport.getDestinations();
- String exactMatch = null;
ServletDestination returnValue = null;
for (ServletDestination destination : destinations)
{
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java
===================================================================
---
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java 2010-06-10
17:22:10 UTC (rev 12464)
+++
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java 2010-06-10
20:39:35 UTC (rev 12465)
@@ -42,6 +42,7 @@
import org.jboss.wsf.stack.cxf.client.configuration.JBossWSCXFConfigurer;
import org.jboss.wsf.stack.cxf.client.configuration.JBossWSSpringBusFactory;
import org.jboss.wsf.stack.cxf.deployment.WSDLFilePublisher;
+import org.jboss.wsf.stack.cxf.interceptor.EndpointAssociationInterceptor;
import org.jboss.wsf.stack.cxf.spring.handler.NamespaceHandlerResolver;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
@@ -120,6 +121,7 @@
{
bus.setExtension(configurer, Configurer.class);
}
+ setInterceptors(bus);
setSoapTransportFactory(bus, soapTransportFactory);
setResourceResolver(bus, resolver);
if (jbossCxfXml != null)
@@ -190,6 +192,13 @@
}
}
+ protected static void setInterceptors(Bus bus)
+ {
+ //Install the EndpointAssociationInterceptor for linking every message exchange
+ //with the proper spi Endpoint retrieved in CXFServletExt
+ bus.getInInterceptors().add(new EndpointAssociationInterceptor());
+ }
+
protected static void setResourceResolver(Bus bus, ResourceResolver resourceResolver)
{
if (resourceResolver != null)
Added:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/interceptor/EndpointAssociationInterceptor.java
===================================================================
---
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/interceptor/EndpointAssociationInterceptor.java
(rev 0)
+++
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/interceptor/EndpointAssociationInterceptor.java 2010-06-10
20:39:35 UTC (rev 12465)
@@ -0,0 +1,58 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.wsf.stack.cxf.interceptor;
+
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+import org.jboss.wsf.spi.deployment.Endpoint;
+import org.jboss.wsf.spi.invocation.EndpointAssociation;
+
+/**
+ * A RECEIVE phase interceptor that sets the @see{org.jboss.wsf.spi.deployment.Endpoint}
+ * associated to the current message exchange. This is performed early in the chain,
+ * before any thread pool comes into the game, preventing the EndpointAssociation
+ * threadlocal to retrieve the correct Endpoint instance.
+ *
+ * @author alessio.soldano(a)jboss.com
+ * @since 10-Jun-2010
+ *
+ */
+public class EndpointAssociationInterceptor extends
AbstractPhaseInterceptor<Message>
+{
+
+ public EndpointAssociationInterceptor()
+ {
+ super(Phase.RECEIVE);
+ }
+
+ @Override
+ public void handleMessage(Message message) throws Fault
+ {
+ Endpoint endpoint = EndpointAssociation.getEndpoint();
+ Exchange exchange = message.getExchange();
+ exchange.put(Endpoint.class, endpoint);
+ }
+
+}
Property changes on:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/interceptor/EndpointAssociationInterceptor.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF