Author: thomas.diesler(a)jboss.com
Date: 2007-12-06 06:46:07 -0500 (Thu, 06 Dec 2007)
New Revision: 5200
Modified:
stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/DescriptorDeploymentAspect.java
stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/InvokerJSE.java
stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/metadata/services/DDEndpoint.java
stack/cxf/trunk/src/test/resources/test-excludes-jboss500.txt
Log:
[JBWS-1746] Add support for configurable invoker in cxf.xml
Modified:
stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/DescriptorDeploymentAspect.java
===================================================================
---
stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/DescriptorDeploymentAspect.java 2007-12-06
11:42:59 UTC (rev 5199)
+++
stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/DescriptorDeploymentAspect.java 2007-12-06
11:46:07 UTC (rev 5200)
@@ -23,18 +23,17 @@
//$Id: XFireServicesDeployer.java 3802 2007-07-05 16:44:32Z thomas.diesler(a)jboss.com $
+import java.util.HashMap;
+import java.util.Map;
+
import org.jboss.logging.Logger;
import org.jboss.wsf.spi.deployment.Deployment;
-import org.jboss.wsf.spi.deployment.Deployment.DeploymentType;
import org.jboss.wsf.spi.deployment.DeploymentAspect;
import org.jboss.wsf.spi.deployment.Endpoint;
-import org.jboss.wsf.stack.cxf.metadata.services.DDBean;
+import org.jboss.wsf.spi.deployment.Deployment.DeploymentType;
import org.jboss.wsf.stack.cxf.metadata.services.DDBeans;
import org.jboss.wsf.stack.cxf.metadata.services.DDEndpoint;
-import java.util.HashMap;
-import java.util.Map;
-
/**
* A deployer that generates cxf.xml
*
@@ -77,13 +76,11 @@
if (depType == DeploymentType.JAXWS_EJB3)
{
- //ddep.setServiceFactory(ServiceFactoryBeanEJB3.class.getName());
ddep.setInvoker(invokerEJB3);
}
if (depType == DeploymentType.JAXWS_JSE)
{
- //ddep.setServiceFactory(ServiceFactoryBeanJSE.class.getName());
ddep.setInvoker(invokerJSE);
}
@@ -91,18 +88,6 @@
dd.addEndpoint(ddep);
}
- if (depType == DeploymentType.JAXWS_EJB3)
- {
- DDBean bean = new DDBean("InvokerBeanEJB3", invokerEJB3);
- dd.addBean(bean);
- }
-
- if (depType == DeploymentType.JAXWS_JSE)
- {
- DDBean bean = new DDBean("InvokerBeanJSE", invokerJSE);
- dd.addBean(bean);
- }
-
dep.addAttachment(DDBeans.class, dd);
String propKey = "org.jboss.ws.webapp.ContextParameterMap";
Modified: stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/InvokerJSE.java
===================================================================
--- stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/InvokerJSE.java 2007-12-06
11:42:59 UTC (rev 5199)
+++ stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/InvokerJSE.java 2007-12-06
11:46:07 UTC (rev 5200)
@@ -25,11 +25,21 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.MessageContext.Scope;
+
import org.apache.cxf.frontend.MethodDispatcher;
import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.jaxws.context.WebServiceContextImpl;
+import org.apache.cxf.jaxws.context.WrappedMessageContext;
+import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.MessageContentsList;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.invoker.Invoker;
import org.apache.cxf.service.model.BindingOperationInfo;
@@ -38,6 +48,7 @@
import org.jboss.wsf.spi.invocation.Invocation;
import org.jboss.wsf.spi.invocation.InvocationContext;
import org.jboss.wsf.spi.invocation.InvocationHandler;
+import org.jboss.wsf.spi.invocation.WebServiceContextJSE;
/**
* An CXF invoker for JSE
@@ -49,6 +60,28 @@
{
public Object invoke(Exchange exchange, Object o)
{
+ // set up the webservice request context
+ MessageContext msgCtx =
ContextPropertiesMapping.createWebServiceContext(exchange);
+
+ Map<String, Scope> scopes = CastUtils.cast((Map<?,
?>)msgCtx.get(WrappedMessageContext.SCOPES));
+ Map<String, Object> handlerScopedStuff = new HashMap<String,
Object>();
+ if (scopes != null)
+ {
+ for (Map.Entry<String, Scope> scope : scopes.entrySet())
+ {
+ if (scope.getValue() == Scope.HANDLER)
+ {
+ handlerScopedStuff.put(scope.getKey(), msgCtx.get(scope.getKey()));
+ }
+ }
+ for (String key : handlerScopedStuff.keySet())
+ {
+ msgCtx.remove(key);
+ }
+ }
+
+ WebServiceContextImpl.setMessageContext(msgCtx);
+
BindingOperationInfo bop = exchange.get(BindingOperationInfo.class);
MethodDispatcher md =
(MethodDispatcher)exchange.get(Service.class).get(MethodDispatcher.class.getName());
Method m = md.getMethod(bop);
@@ -61,8 +94,8 @@
Invocation inv = invHandler.createInvocation();
InvocationContext invContext = inv.getInvocationContext();
- //inv.getInvocationContext().addAttachment(WebServiceContext.class, new
WebServiceContextJSE(context));
- //invContext.addAttachment(MessageContext.class, context);
+ inv.getInvocationContext().addAttachment(WebServiceContext.class, new
WebServiceContextJSE(msgCtx));
+ invContext.addAttachment(MessageContext.class, msgCtx);
inv.setJavaMethod(m);
inv.setArgs(params);
@@ -78,7 +111,18 @@
handleException(ex);
}
- return retObj;
+ for (Map.Entry<String, Object> key : handlerScopedStuff.entrySet())
+ {
+ msgCtx.put(key.getKey(), key.getValue());
+ msgCtx.setScope(key.getKey(), Scope.HANDLER);
+ }
+
+ //update the webservice response context
+ ContextPropertiesMapping.updateWebServiceContext(exchange, msgCtx);
+ //clear the WebServiceContextImpl's ThreadLocal variable
+ WebServiceContextImpl.clear();
+
+ return new MessageContentsList(retObj);
}
private Object getTargetBean(Endpoint ep) throws InstantiationException,
IllegalAccessException
@@ -87,7 +131,7 @@
return beanClass.newInstance();
}
- private void handleException(Exception ex)
+ private void handleException(Exception ex)
{
Throwable th = ex;
if (ex instanceof InvocationTargetException)
Modified:
stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/metadata/services/DDEndpoint.java
===================================================================
---
stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/metadata/services/DDEndpoint.java 2007-12-06
11:42:59 UTC (rev 5199)
+++
stack/cxf/trunk/src/main/java/org/jboss/wsf/stack/cxf/metadata/services/DDEndpoint.java 2007-12-06
11:46:07 UTC (rev 5200)
@@ -38,7 +38,6 @@
private String address;
private String implementor;
private String invoker;
- private String serviceFactory;
public DDEndpoint(String id, String address, String implementor)
{
@@ -52,30 +51,17 @@
this.invoker = invoker;
}
- public void setServiceFactory(String serviceFactory)
- {
- this.serviceFactory = serviceFactory;
- }
-
public void writeTo(Writer writer) throws IOException
{
writer.write("<jaxws:endpoint id='" + id + "'");
writer.write(" address='" + address + "'");
writer.write(" implementor='" + implementor + "'");
writer.write(">");
- //writer.write("<jaxws:implementor><bean class='" +
implementor + "'/></jaxws:implementor>");
// [JBWS-1746] Add support for configurable invoker in cxf.xml
- /*
- writer.write("<jaxws:properties>");
if (invoker != null)
- writer.write("<entry key='serviceFactory.invoker'
value-ref='" + invoker + "'/>");
- writer.write("</jaxws:properties>");
- */
+ writer.write("<jaxws:invoker><bean class='" + invoker +
"'/></jaxws:invoker>");
- //if (serviceFactory != null)
- // writer.write("<jaxws:serviceFactory><bean class='" +
serviceFactory + "'/></jaxws:serviceFactory>");
-
writer.write("</jaxws:endpoint>");
}
@@ -85,6 +71,7 @@
str.append("\n id=" + id);
str.append("\n address=" + address);
str.append("\n implementor=" + implementor);
+ str.append("\n invoker=" + invoker);
return str.toString();
}
}
\ No newline at end of file
Modified: stack/cxf/trunk/src/test/resources/test-excludes-jboss500.txt
===================================================================
--- stack/cxf/trunk/src/test/resources/test-excludes-jboss500.txt 2007-12-06 11:42:59 UTC
(rev 5199)
+++ stack/cxf/trunk/src/test/resources/test-excludes-jboss500.txt 2007-12-06 11:46:07 UTC
(rev 5200)
@@ -11,7 +11,7 @@
#
###################################################################
-# [JBWS-1746] Add support for configurable invoker in cxf.xml
+# [CXF-817] Add support for configurable invoker in cxf.xml
org/jboss/test/ws/jaxws/samples/context/WebServiceContextEJBTestCase.*
org/jboss/test/ws/jaxws/samples/webservice/WebServiceEJB3TestCase.*
org/jboss/test/ws/jaxws/samples/swaref/**