You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2009/12/23 10:11:19 UTC

svn commit: r893441 - in /openejb/trunk/openejb3/server/openejb-cxf: ./ src/main/java/org/apache/openejb/server/cxf/ src/main/java/org/apache/openejb/server/cxf/ejb/ src/main/java/org/apache/openejb/server/cxf/pojo/

Author: jlmonteiro
Date: Wed Dec 23 09:11:18 2009
New Revision: 893441

URL: http://svn.apache.org/viewvc?rev=893441&view=rev
Log:
OPENEJB-977: upgrade CXF bundle to the latest available distribution. Currently, the latest one is 2.2.5. It probably needs some more tests but all previous tests/sample work. Thanks Jean-Sebastien. Great job!

Added:
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbMessageContext.java
Modified:
    openejb/trunk/openejb3/server/openejb-cxf/pom.xml
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfCatalogUtils.java
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpDestination.java
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpTransportFactory.java
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/WsdlQueryHandler.java
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbEndpoint.java
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbMethodInvoker.java
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java
    openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java

Modified: openejb/trunk/openejb3/server/openejb-cxf/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/pom.xml?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/pom.xml (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/pom.xml Wed Dec 23 09:11:18 2009
@@ -78,7 +78,7 @@
     <dependency>
       <groupId>org.apache.cxf</groupId>
       <artifactId>cxf-bundle</artifactId>
-      <version>2.0.9</version>
+      <version>2.2.5</version>
       <exclusions>
         <exclusion>
           <groupId>aopalliance</groupId>

Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfCatalogUtils.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfCatalogUtils.java?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfCatalogUtils.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfCatalogUtils.java Wed Dec 23 09:11:18 2009
@@ -52,7 +52,7 @@
         try {
             catalog.loadCatalog(catalogURL);
             logger.debug("Loaded " + catalogURL + " catalog.");
-            bus.setExtension(catalog.getCatalog(), Catalog.class);
+            bus.setExtension(catalog, OASISCatalogManager.class);
         } catch (IOException e) {
             logger.warning("Failed to load catalog file: " + catalogURL, e);
         }

Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java Wed Dec 23 09:11:18 2009
@@ -26,14 +26,13 @@
 import org.apache.cxf.jaxws.support.JaxWsImplementorInfo;
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
 import org.apache.cxf.service.Service;
+import org.apache.cxf.service.model.BindingInfo;
 import org.apache.openejb.core.webservices.HandlerResolverImpl;
 import org.apache.openejb.core.webservices.PortData;
-import org.w3c.dom.Element;
 
 import javax.xml.transform.Source;
 import javax.xml.ws.Binding;
 import javax.xml.ws.Endpoint;
-import javax.xml.ws.EndpointReference;
 import javax.xml.ws.handler.Handler;
 import javax.xml.ws.http.HTTPBinding;
 import javax.xml.ws.soap.SOAPBinding;
@@ -45,182 +44,192 @@
 import java.util.concurrent.Executor;
 
 public abstract class CxfEndpoint extends Endpoint {
-    protected Bus bus;
+	protected Bus bus;
 
-    protected PortData port;
-
-    protected Context context;
-
-    protected Object implementor;
-
-    protected Server server;
-
-    protected Service service;
-
-    protected JaxWsImplementorInfo implInfo;
-
-    protected JaxWsServiceFactoryBean serviceFactory;
-
-    protected HandlerResolverImpl handlerResolver;
-
-    public CxfEndpoint(Bus bus, PortData port, Context context, Object implementor) {
-        this.bus = bus;
-        this.port = port;
-        this.implementor = implementor;
-        this.context = context;
-    }
-
-    protected URL getWsdlURL(URL configurationBaseUrl, String wsdlFile) {
-        URL wsdlURL = null;
-        if (wsdlFile != null && wsdlFile.trim().length() > 0) {
-            wsdlFile = wsdlFile.trim();
-            try {
-                wsdlURL = new URL(wsdlFile);
-            } catch (MalformedURLException e) {
-                // Not a URL, try as a resource
-                wsdlURL = getImplementorClass().getResource("/" + wsdlFile);
-
-                if (wsdlURL == null && configurationBaseUrl != null) {
-                    // Cannot get it as a resource, try with
-                    // configurationBaseUrl
-                    try {
-                        wsdlURL = new URL(configurationBaseUrl, wsdlFile);
-                    } catch (MalformedURLException ee) {
-                        // ignore
-                    }
-                }
-            }
-        }
-        return wsdlURL;
-    }
-
-    protected Class getImplementorClass() {
-        return this.implementor.getClass();
-    }
-
-    protected org.apache.cxf.endpoint.Endpoint getEndpoint() {
-        return getServer().getEndpoint();
-    }
-
-    public boolean isSOAP11() {
-        return SOAPBinding.SOAP11HTTP_BINDING.equals(implInfo.getBindingType()) ||
-                SOAPBinding.SOAP11HTTP_MTOM_BINDING.equals(implInfo.getBindingType());
-    }
-
-    public ServerImpl getServer() {
-        return (ServerImpl) server;
-    }
-
-    public Binding getBinding() {
-        return ((JaxWsEndpointImpl) getEndpoint()).getJaxwsBinding();
-    }
-
-    public void setExecutor(Executor executor) {
-        service.setExecutor(executor);
-    }
-
-    public Executor getExecutor() {
-        return service.getExecutor();
-    }
-
-    public Object getImplementor() {
-        return implementor;
-    }
-
-    public List<Source> getMetadata() {
-        return null;
-    }
-
-    public Map<String, Object> getProperties() {
-        return null;
-    }
-
-    public boolean isPublished() {
-        return server != null;
-    }
-
-    public void publish(Object arg0) {
-    }
-
-    public void publish(String address) {
-        doPublish(address);
-    }
-
-    public void setMetadata(List<Source> arg0) {
-    }
-
-    public void setProperties(Map<String, Object> arg0) {
-    }
-
-    @SuppressWarnings({"UnusedDeclaration"})
-    public EndpointReference getEndpointReference(Element... referenceParameters) {
-        throw new UnsupportedOperationException("JaxWS 2.1 APIs are not supported");
-    }
-
-    @SuppressWarnings({"UnusedDeclaration"})
-    public <T extends EndpointReference> T getEndpointReference(Class<T> clazz, Element... referenceParameters) {
-        throw new UnsupportedOperationException("JaxWS 2.1 APIs are not supported");
-    }
-
-    private static class NoInitJaxWsServerFactoryBean extends JaxWsServerFactoryBean {
-        public NoInitJaxWsServerFactoryBean() {
-            // disable CXF resource injection
-            doInit = false;
-        }
-    }
-
-    protected void doPublish(String address) {
-        JaxWsServerFactoryBean svrFactory = new NoInitJaxWsServerFactoryBean();
-        svrFactory.setBus(bus);
-        svrFactory.setAddress(address);
-        svrFactory.setServiceFactory(serviceFactory);
-        svrFactory.setStart(false);
-        svrFactory.setServiceBean(implementor);
-
-        if (HTTPBinding.HTTP_BINDING.equals(implInfo.getBindingType())) {
-            svrFactory.setTransportId("http://cxf.apache.org/bindings/xformat");
-        }
-
-        server = svrFactory.create();
-
-        init();
-
-        // todo do we need to call this?
-        getEndpoint();
-
-        if (getBinding() instanceof SOAPBinding) {
-            ((SOAPBinding) getBinding()).setMTOMEnabled(port.isMtomEnabled());
-        }
-
-        server.start();
-    }
-
-    protected void init() {
-    }
-
-    /**
-     * Set appropriate handlers for the port/service/bindings.
-     */
-    protected void initHandlers() throws Exception {
-        PortInfoImpl portInfo = new PortInfoImpl(implInfo.getBindingType(), serviceFactory.getEndpointName(), service.getName());
-
-        handlerResolver = new HandlerResolverImpl(port.getHandlerChains(), port.getInjections(), context);
-        List<Handler> chain = handlerResolver.getHandlerChain(portInfo);
-
-        getBinding().setHandlerChain(chain);
-    }
-
-    protected void destroyHandlers() {
-        if (this.handlerResolver != null) {
-            handlerResolver.destroyHandlers();
-            handlerResolver = null;
-        }
-    }
-
-    public void stop() {
-        // shutdown server
-        if (this.server != null) {
-            this.server.stop();
-        }
-    }
-}
+	protected PortData port;
+	
+	protected Context context;
+
+	protected Object implementor;
+
+	protected Server server;
+
+	protected Service service;
+
+	protected JaxWsImplementorInfo implInfo;
+
+	protected JaxWsServiceFactoryBean serviceFactory;
+
+	protected HandlerResolverImpl handlerResolver;
+	
+	protected HttpTransportFactory httpTransportFactory;
+
+	public CxfEndpoint(Bus bus, PortData port, Context context,
+			Object implementor, HttpTransportFactory httpTransportFactory) {
+		this.bus = bus;
+		this.port = port;
+		this.context = context;
+		this.implementor = implementor;
+		this.httpTransportFactory = httpTransportFactory;
+		this.bus.setExtension(this, CxfEndpoint.class);
+	}
+
+	protected URL getWsdlURL(URL configurationBaseUrl, String wsdlFile) {
+		URL wsdlURL = null;
+		if (wsdlFile != null && wsdlFile.trim().length() > 0) {
+			wsdlFile = wsdlFile.trim();
+			try {
+				wsdlURL = new URL(wsdlFile);
+			} catch (MalformedURLException e) {
+				// Not a URL, try as a resource
+				wsdlURL = getImplementorClass().getResource("/" + wsdlFile);
+
+				if (wsdlURL == null && configurationBaseUrl != null) {
+					// Cannot get it as a resource, try with
+					// configurationBaseUrl
+					try {
+						wsdlURL = new URL(configurationBaseUrl, wsdlFile);
+					} catch (MalformedURLException ee) {
+						// ignore
+					}
+				}
+			}
+		}
+		return wsdlURL;
+	}
+
+	protected Class getImplementorClass() {
+		return this.implementor.getClass();
+	}
+
+	protected org.apache.cxf.endpoint.Endpoint getEndpoint() {
+		return ((ServerImpl) getServer()).getEndpoint();
+	}
+
+	public boolean isSOAP11() {
+		return SOAPBinding.SOAP11HTTP_BINDING.equals(implInfo.getBindingType()) || 
+			SOAPBinding.SOAP11HTTP_MTOM_BINDING.equals(implInfo.getBindingType());
+	}
+
+	public boolean isHTTP() {
+		return HTTPBinding.HTTP_BINDING.equals(implInfo.getBindingType());
+	}
+
+	public ServerImpl getServer() {
+		return (ServerImpl) server;
+	}
+
+	public Binding getBinding() {
+		return ((JaxWsEndpointImpl) getEndpoint()).getJaxwsBinding();
+	}
+
+	public void setExecutor(Executor executor) {
+		service.setExecutor(executor);
+	}
+
+	public Executor getExecutor() {
+		return service.getExecutor();
+	}
+
+	public Object getImplementor() {
+		return implementor;
+	}
+	
+	public List<Source> getMetadata() {
+		return null;
+	}
+
+	public Map<String, Object> getProperties() {
+		return null;
+	}
+
+	public boolean isPublished() {
+		return server != null;
+	}
+
+	public void publish(Object arg0) {
+	}
+
+	public void publish(String address) {
+		doPublish(address);
+	}
+
+	public void setMetadata(List<Source> arg0) {
+	}
+
+	public void setProperties(Map<String, Object> arg0) {
+	}
+
+	private class NoInitJaxWsServerFactoryBean extends JaxWsServerFactoryBean {
+		public NoInitJaxWsServerFactoryBean() {
+			// disable CXF resource injection
+			doInit = false;
+		}
+		
+		@Override
+		protected BindingInfo createBindingInfo() {
+			BindingInfo bindingInfo = super.createBindingInfo();
+			
+			if(httpTransportFactory != null) {
+				httpTransportFactory.registerDestinationFactory();
+			}
+			
+			return bindingInfo;
+		}
+	}
+
+	protected void doPublish(String address) {
+		JaxWsServerFactoryBean svrFactory = new NoInitJaxWsServerFactoryBean();
+		svrFactory.setBus(bus);
+		svrFactory.setAddress(address);
+		svrFactory.setServiceFactory(serviceFactory);
+		svrFactory.setStart(false);
+		svrFactory.setServiceBean(implementor);
+
+		if (HTTPBinding.HTTP_BINDING.equals(implInfo.getBindingType())) {
+			svrFactory.setTransportId("http://cxf.apache.org/bindings/xformat");
+		}
+
+		server = svrFactory.create();
+
+		init();
+
+		// todo do we need to call this?
+		getEndpoint();
+
+		if (getBinding() instanceof SOAPBinding) {
+			((SOAPBinding) getBinding()).setMTOMEnabled(port.isMtomEnabled());
+		}
+
+		server.start();
+	}
+
+	protected void init() {
+	}
+
+	/**
+	 * Set appropriate handlers for the port/service/bindings.
+	 */
+	protected void initHandlers() throws Exception {
+		PortInfoImpl portInfo = new PortInfoImpl(implInfo.getBindingType(), serviceFactory.getEndpointName(), service.getName());
+
+		handlerResolver = new HandlerResolverImpl(port.getHandlerChains(), port.getInjections(), context);
+		List<Handler> chain = handlerResolver.getHandlerChain(portInfo);
+
+		getBinding().setHandlerChain(chain);
+	}
+
+	protected void destroyHandlers() {
+		if (this.handlerResolver != null) {
+			handlerResolver.destroyHandlers();
+			handlerResolver = null;
+		}
+	}
+
+	public void stop() {
+		// shutdown server
+		if (this.server != null) {
+			this.server.stop();
+		}
+	}
+}
\ No newline at end of file

Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java Wed Dec 23 09:11:18 2009
@@ -19,51 +19,36 @@
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
-import org.apache.cxf.security.SecurityContext;
 import org.apache.cxf.bus.extension.ExtensionManagerBus;
 import org.apache.cxf.service.model.EndpointInfo;
-import org.apache.cxf.transport.DestinationFactoryManager;
 import org.apache.openejb.core.webservices.PortData;
 import org.apache.openejb.server.httpd.HttpRequest;
 import org.apache.openejb.server.httpd.HttpResponse;
 import org.apache.openejb.server.httpd.HttpListener;
-import org.apache.openejb.server.httpd.HttpRequestImpl;
 import org.apache.openejb.server.webservices.saaj.SaajUniverse;
-import org.apache.openejb.util.Base64;
-import org.apache.openejb.spi.SecurityService;
-import org.apache.openejb.loader.SystemInstance;
 
-import javax.security.auth.login.LoginException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
-import java.security.Principal;
 
 public abstract class CxfWsContainer implements HttpListener {
     protected final Bus bus;
     protected final PortData port;
     protected HttpDestination destination;
     protected CxfEndpoint endpoint;
-
+    protected HttpTransportFactory httpTransportFactory;
 
     public CxfWsContainer(Bus bus, PortData port) {
         this.bus = bus;
         this.port = port;
-
+        
         List<String> ids = new ArrayList<String>();
         ids.add("http://schemas.xmlsoap.org/wsdl/soap/");
 
-        DestinationFactoryManager factoryManager = bus.getExtension(DestinationFactoryManager.class);
-        HttpTransportFactory factory = new HttpTransportFactory(bus);
-        factory.setTransportIds(ids);
-
-        factoryManager.registerDestinationFactory("http://cxf.apache.org/transports/http/configuration", factory);
-        factoryManager.registerDestinationFactory("http://cxf.apache.org/bindings/xformat", factory);
-        factoryManager.registerDestinationFactory("http://www.w3.org/2003/05/soap/bindings/HTTP/", factory);
-        factoryManager.registerDestinationFactory("http://schemas.xmlsoap.org/soap/http", factory);
-        factoryManager.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/http/", factory);
-        factoryManager.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/soap/http", factory);
+        httpTransportFactory = new HttpTransportFactory(bus);
+        httpTransportFactory.setTransportIds(ids);
+        httpTransportFactory.registerDestinationFactory();
     }
 
     public void start() {

Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpDestination.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpDestination.java?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpDestination.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpDestination.java Wed Dec 23 09:11:18 2009
@@ -18,6 +18,8 @@
 package org.apache.openejb.server.cxf;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.binding.Binding;
+import org.apache.cxf.message.ExchangeImpl;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
 import org.apache.cxf.security.SecurityContext;
@@ -27,8 +29,8 @@
 import org.apache.cxf.transport.Destination;
 import org.apache.cxf.transport.MessageObserver;
 import org.apache.cxf.transport.http.AbstractHTTPDestination;
+import org.apache.cxf.transport.http.HTTPSession;
 import org.apache.cxf.ws.addressing.EndpointReferenceType;
-import org.apache.openejb.server.webservices.WsConstants;
 import org.apache.openejb.server.httpd.HttpRequest;
 import org.apache.openejb.server.httpd.HttpResponse;
 
@@ -51,9 +53,15 @@
 public class HttpDestination extends AbstractHTTPDestination {
     private MessageObserver messageObserver;
     private boolean passSecurityContext = false;
+    private CxfEndpoint endpoint;
 
     public HttpDestination(Bus bus, ConduitInitiator conduitInitiator, EndpointInfo endpointInfo) throws IOException {
         super(bus, conduitInitiator, endpointInfo, true);
+        this.endpoint = bus.getExtension(CxfEndpoint.class);
+    }
+    
+    private Binding getBinding() {
+        return this.endpoint.getEndpoint().getBinding();
     }
 
     public void setPassSecurityContext(boolean passSecurityContext) {
@@ -77,13 +85,13 @@
         message.put(HttpResponse.class, response);
 
         final HttpServletRequest servletRequest = (HttpServletRequest) request.getAttribute(HttpRequest.SERVLET_REQUEST);
-        message.put(MessageContext.SERVLET_REQUEST, servletRequest);
+        message.put(HTTP_REQUEST, servletRequest);
 
         HttpServletResponse servletResponse = (HttpServletResponse) request.getAttribute(HttpRequest.SERVLET_RESPONSE);
-        message.put(MessageContext.SERVLET_RESPONSE, servletResponse);
+        message.put(HTTP_RESPONSE, servletResponse);
 
         ServletContext servletContext = (ServletContext) request.getAttribute(HttpRequest.SERVLET_CONTEXT);
-        message.put(MessageContext.SERVLET_CONTEXT, servletContext);
+        message.put(HTTP_CONTEXT, servletContext);
 
         if (this.passSecurityContext && servletRequest != null) {
             message.put(SecurityContext.class, new SecurityContext() {
@@ -107,6 +115,10 @@
         if (servletRequest != null) {
             message.put(Message.ENCODING, getCharacterEncoding(servletRequest.getCharacterEncoding()));
         }
+        
+        ExchangeImpl exchange = new ExchangeImpl();
+        exchange.setInMessage(getBinding().createMessage(message));
+        exchange.setSession(new HTTPSession(servletRequest));
 
         getMessageObserver().onMessage(message);
     }

Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpTransportFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpTransportFactory.java?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpTransportFactory.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpTransportFactory.java Wed Dec 23 09:11:18 2009
@@ -21,14 +21,16 @@
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.Destination;
 import org.apache.cxf.transport.DestinationFactory;
+import org.apache.cxf.transport.DestinationFactoryManager;
 import org.apache.cxf.transport.http.AbstractHTTPTransportFactory;
 
 import java.io.IOException;
 
 public class HttpTransportFactory extends AbstractHTTPTransportFactory implements DestinationFactory {
     public HttpTransportFactory() {
+    	super();
     }
-
+  
     public HttpTransportFactory(Bus bus) {
         setBus(bus);
     }
@@ -38,5 +40,18 @@
         configure(destination);
         return destination;
     }
+    
+    /**
+     * Registers our destination factory
+     */
+    public void registerDestinationFactory() {
+        DestinationFactoryManager factoryManager = bus.getExtension(DestinationFactoryManager.class);
 
+        factoryManager.registerDestinationFactory("http://cxf.apache.org/transports/http/configuration", this);
+        factoryManager.registerDestinationFactory("http://cxf.apache.org/bindings/xformat", this);
+        factoryManager.registerDestinationFactory("http://www.w3.org/2003/05/soap/bindings/HTTP/", this);
+        factoryManager.registerDestinationFactory("http://schemas.xmlsoap.org/soap/http", this);
+        factoryManager.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/http/", this);
+        factoryManager.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/soap/http", this);
+    }
 }

Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/WsdlQueryHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/WsdlQueryHandler.java?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/WsdlQueryHandler.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/WsdlQueryHandler.java Wed Dec 23 09:11:18 2009
@@ -22,9 +22,9 @@
 import org.apache.cxf.tools.common.extensions.soap.SoapAddress;
 import org.apache.cxf.tools.util.SOAPBindingUtil;
 import org.apache.cxf.transport.http.WSDLQueryHandler;
+import org.apache.cxf.wsdl.http.AddressType;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.LogCategory;
-import org.xmlsoap.schemas.wsdl.http.AddressType;
 
 import javax.wsdl.Definition;
 import javax.wsdl.Port;

Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbEndpoint.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbEndpoint.java?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbEndpoint.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbEndpoint.java Wed Dec 23 09:11:18 2009
@@ -18,7 +18,6 @@
 package org.apache.openejb.server.cxf.ejb;
 
 import org.apache.cxf.Bus;
-import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor;
 import org.apache.cxf.binding.soap.SoapBinding;
 import org.apache.cxf.binding.soap.interceptor.MustUnderstandInterceptor;
 import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
@@ -33,15 +32,11 @@
 import org.apache.openejb.server.cxf.ConfigureCxfSecurity;
 import org.apache.openejb.server.cxf.CxfEndpoint;
 import org.apache.openejb.server.cxf.CxfServiceConfiguration;
+import org.apache.openejb.server.cxf.HttpTransportFactory;
 import org.apache.openejb.server.cxf.JaxWsImplementorInfoImpl;
-import org.apache.openejb.server.cxf.ServerPasswordHandler;
-import org.apache.ws.security.handler.WSHandlerConstants;
-import org.apache.ws.security.WSConstants;
 
 import javax.xml.ws.WebServiceException;
 import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
 
 /**
  * A web service endpoint which invokes an EJB container.
@@ -49,8 +44,8 @@
 public class EjbEndpoint extends CxfEndpoint {
     private final DeploymentInfo deploymentInfo;
 
-    public EjbEndpoint(Bus bus, PortData portData, DeploymentInfo deploymentInfo) {
-        super(bus, portData, deploymentInfo.getJndiEnc(), deploymentInfo.getBeanClass());
+    public EjbEndpoint(Bus bus, PortData portData, DeploymentInfo deploymentInfo, HttpTransportFactory httpTransportFactory) {
+        super(bus, portData, deploymentInfo.getJndiEnc(), deploymentInfo.getBeanClass(), httpTransportFactory);
         this.deploymentInfo = deploymentInfo;
 
         String bindingURI = JaxWsUtils.getBindingURI(portData.getBindingID());

Added: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbMessageContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbMessageContext.java?rev=893441&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbMessageContext.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbMessageContext.java Wed Dec 23 09:11:18 2009
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.server.cxf.ejb;
+
+import javax.xml.ws.EndpointReference;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
+
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.jaxws.context.WrappedMessageContext;
+import org.apache.cxf.message.Message;
+import org.apache.openejb.core.webservices.AddressingSupport;
+import org.w3c.dom.Element;
+
+public class EjbMessageContext extends WrappedMessageContext implements AddressingSupport {
+
+    public EjbMessageContext(Message m, Scope defScope) {
+        super(m, defScope);
+    }
+
+    public EndpointReference getEndpointReference(Element... referenceParameters) {
+        org.apache.cxf.message.Message msg = getWrappedMessage();
+        Endpoint ep = msg.getExchange().get(Endpoint.class);
+
+        W3CEndpointReferenceBuilder builder = new W3CEndpointReferenceBuilder();
+        builder.address(ep.getEndpointInfo().getAddress());
+        builder.serviceName(ep.getService().getName());
+        builder.endpointName(ep.getEndpointInfo().getName());
+
+        if (referenceParameters != null) {
+            for (Element referenceParameter : referenceParameters) {
+                builder.referenceParameter(referenceParameter);
+            }
+        }
+
+        return builder.build();
+    }
+
+    public <T extends EndpointReference> T getEndpointReference(Class<T> clazz, Element... referenceParameters) {
+        if (W3CEndpointReference.class.isAssignableFrom(clazz)) {
+            return clazz.cast(getEndpointReference(referenceParameters));
+        } else {
+            throw new WebServiceException("Endpoint reference type not supported: " + clazz);
+        }
+    }
+
+}

Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbMethodInvoker.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbMethodInvoker.java?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbMethodInvoker.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbMethodInvoker.java Wed Dec 23 09:11:18 2009
@@ -17,36 +17,39 @@
  */
 package org.apache.openejb.server.cxf.ejb;
 
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import javax.interceptor.InvocationContext;
 import javax.xml.ws.WebFault;
-import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.MessageContext.Scope;
 
 import org.apache.cxf.Bus;
-import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker;
 import org.apache.cxf.jaxws.context.WebServiceContextImpl;
-import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.FaultMode;
-import org.apache.cxf.service.invoker.AbstractInvoker;
+import org.apache.cxf.message.MessageContentsList;
+import org.apache.cxf.service.invoker.Factory;
 import org.apache.openejb.ApplicationException;
 import org.apache.openejb.DeploymentInfo;
-import org.apache.openejb.RpcContainer;
 import org.apache.openejb.InterfaceType;
+import org.apache.openejb.RpcContainer;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 
-public class EjbMethodInvoker extends AbstractInvoker {
+public class EjbMethodInvoker extends AbstractJAXWSMethodInvoker {
+
     private static final Logger log = Logger.getInstance(LogCategory.CXF, EjbMethodInvoker.class);
 
+    private static final String HANDLER_PROPERTIES = "HandlerProperties";
+
     private DeploymentInfo deploymentInfo;
     private Bus bus;
 
     public EjbMethodInvoker(Bus bus, DeploymentInfo deploymentInfo) {
+        super((Factory) null);
         this.bus = bus;
         this.deploymentInfo = deploymentInfo;
     }
@@ -55,122 +58,118 @@
         return null;
     }
 
-    protected Object invoke(Exchange exchange, Object serviceObject, Method m, List<Object> params) {
+    public void releaseServiceObject(Exchange ex, Object obj) {
+        // do nothing
+    }
+
+    protected Object invoke(Exchange exchange, Object serviceObject, Method m,
+            List<Object> params) {
         Object result = null;
 
         InvocationContext invContext = exchange.get(InvocationContext.class);
         if (invContext == null) {
             log.debug("PreEJBInvoke");
-            result = preEjbInvoke(exchange, m, params);
+            result = preEjbInvoke(exchange, serviceObject, m, params);
         } else {
-            log.debug("EJBInvoke");
-            result = ejbInvoke(exchange, m, params);
+            log.debug("EJBInvoke"); // calls performInvocation()
+            result = super.invoke(exchange, serviceObject, m, params);
         }
 
         return result;
     }
 
-    private Object preEjbInvoke(Exchange exchange, Method method, List<Object> params) {
+    protected Object performInvocation(Exchange exchange, Object serviceObject,
+            Method m, Object[] paramArray) throws Exception {
+        InvocationContext invContext = exchange.get(InvocationContext.class);
+        invContext.setParameters(paramArray);
+        Object res = invContext.proceed();
+
+        EjbMessageContext ctx = (EjbMessageContext) invContext.getContextData();
+
+        Map<String, Object> handlerProperties = (Map<String, Object>) exchange
+                .get(HANDLER_PROPERTIES);
+        addHandlerProperties(ctx, handlerProperties);
+
+        updateWebServiceContext(exchange, ctx);
+
+        return res;
+    }
+
+    private Object preEjbInvoke(Exchange exchange, Object serviceObject,
+            Method method, List<Object> params) {
 
-        MessageContext ctx = ContextPropertiesMapping.createWebServiceContext(exchange);
+        EjbMessageContext ctx = new EjbMessageContext(exchange.getInMessage(),
+                Scope.APPLICATION);
         WebServiceContextImpl.setMessageContext(ctx);
-        
+
+        Map<String, Object> handlerProperties = removeHandlerProperties(ctx);
+        exchange.put(HANDLER_PROPERTIES, handlerProperties);
+
         try {
-            
-            EjbInterceptor interceptor = new EjbInterceptor(params, method, this.bus, exchange);
-            Object[] arguments = {ctx, interceptor};
+            EjbInterceptor interceptor = new EjbInterceptor(params, method,
+                    this.bus, exchange);
+            Object[] arguments = { ctx, interceptor };
 
-            RpcContainer container = (RpcContainer) this.deploymentInfo.getContainer();
+            RpcContainer container = (RpcContainer) this.deploymentInfo
+                    .getContainer();
 
-            Class callInterface = this.deploymentInfo.getServiceEndpointInterface();
+            Class callInterface = this.deploymentInfo
+                    .getServiceEndpointInterface();
             method = getMostSpecificMethod(method, callInterface);
-            Object res = container.invoke(this.deploymentInfo.getDeploymentID(), InterfaceType.SERVICE_ENDPOINT, callInterface, method, arguments, null);
+            Object res = container.invoke(
+                    this.deploymentInfo.getDeploymentID(),
+                    InterfaceType.SERVICE_ENDPOINT, callInterface, method,
+                    arguments, null);
 
             if (exchange.isOneWay()) {
                 return null;
             }
 
-            List<Object> retList = new ArrayList<Object>(1);
-            if (!method.getReturnType().getName().equals("void")) {
-                retList.add(res);
-            }
-            
-            return retList;
-         
-        // OPENEJB-965: must check if the application exception is a web fault.
+            return new MessageContentsList(res);
         } catch (ApplicationException e) {
             // when no handler is defined, EjbInterceptor will directly delegate
             // to #directEjbInvoke. So if an application exception is thrown by
-            // the end user, when must consider the ApplicationException as a 
+            // the end user, when must consider the ApplicationException as a
             // web fault if it contains the @WebFault exception
             Throwable t = e.getCause();
             if (t != null) {
-        	if (	t.getClass().isAssignableFrom(RuntimeException.class) &&
-        		t.getClass().isAnnotationPresent(javax.ejb.ApplicationException.class)) {
-        	    // it's not a checked exception so it can not be a WebFault 
-		    throw (RuntimeException)t;
-		    
-		} else if (!t.getClass().isAnnotationPresent(WebFault.class)) {
-		    // not a web fault even if it's an EJB ApplicationException
-		    exchange.getInMessage().put(FaultMode.class, FaultMode.UNCHECKED_APPLICATION_FAULT);
-	            throw new Fault(t);
-		}
-        	
+                if (t.getClass().isAssignableFrom(RuntimeException.class)
+                        && t.getClass().isAnnotationPresent(
+                                javax.ejb.ApplicationException.class)) {
+                    // it's not a checked exception so it can not be a WebFault
+                    throw (RuntimeException) t;
+
+                } else if (!t.getClass().isAnnotationPresent(WebFault.class)) {
+                    // not a web fault even if it's an EJB ApplicationException
+                    exchange.getInMessage().put(FaultMode.class,
+                            FaultMode.UNCHECKED_APPLICATION_FAULT);
+                    throw createFault(t, method, params, false);
+                }
+
             } else { // may not occurs ...
-        	t = e;
+                t = e;
             }
             // TODO may be we can change to FaultMode.CHECKED_APPLICATION_FAULT
-            exchange.getInMessage().put(FaultMode.class, FaultMode.UNCHECKED_APPLICATION_FAULT);
-            throw new Fault(t);
+            exchange.getInMessage().put(FaultMode.class,
+                    FaultMode.UNCHECKED_APPLICATION_FAULT);
+            throw createFault(t, method, params, false);
         } catch (Exception e) {
-            exchange.getInMessage().put(FaultMode.class, FaultMode.UNCHECKED_APPLICATION_FAULT);
-            throw new Fault(e);
+            exchange.getInMessage().put(FaultMode.class,
+                    FaultMode.UNCHECKED_APPLICATION_FAULT);
+            throw createFault(e, method, params, false);
         } finally {
             WebServiceContextImpl.clear();
         }
     }
 
-    private Object ejbInvoke(Exchange exchange, Method m, List<Object> params) {
-        try {
-            Object res = directEjbInvoke(exchange, m, params);
-
-            if (exchange.isOneWay()) {
-                return null;
-            }
-
-            List<Object> retList = new ArrayList<Object>(1);
-            if (!m.getReturnType().getName().equals("void")) {
-                retList.add(res);
-            }
-
-            return retList;
-        } catch (InvocationTargetException e) {
-            Throwable t = e.getCause();
-            if (t == null) {
-                t = e;
-            }
-            exchange.getInMessage().put(FaultMode.class, FaultMode.CHECKED_APPLICATION_FAULT);
-            throw new Fault(t);
-        } catch (Exception e) {
-            exchange.getInMessage().put(FaultMode.class, FaultMode.UNCHECKED_APPLICATION_FAULT);
-            throw new Fault(e);
-        }
-    }
-
-    public Object directEjbInvoke(Exchange exchange, Method m, List<Object> params) throws Exception {
-        InvocationContext invContext = exchange.get(InvocationContext.class);
+    public Object directEjbInvoke(Exchange exchange, Method m,
+            List<Object> params) throws Exception {
         Object[] paramArray;
         if (params != null) {
             paramArray = params.toArray();
         } else {
-            paramArray = new Object[]{};
+            paramArray = new Object[] {};
         }
-
-        invContext.setParameters(paramArray);
-        Object res = invContext.proceed();
-
-        ContextPropertiesMapping.updateWebServiceContext(exchange, (MessageContext) invContext.getContextData());
-
-        return res;
+        return performInvocation(exchange, null, m, paramArray);
     }
-}
+}
\ No newline at end of file

Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java Wed Dec 23 09:11:18 2009
@@ -32,7 +32,7 @@
     }
 
     protected EjbEndpoint createEndpoint() {
-        EjbEndpoint ep = new EjbEndpoint(bus, port, deploymentInfo);
+    	EjbEndpoint ep = new EjbEndpoint(bus, port, deploymentInfo, httpTransportFactory);
         return ep;
     }
 

Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java?rev=893441&r1=893440&r2=893441&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java Wed Dec 23 09:11:18 2009
@@ -35,7 +35,7 @@
     private InjectionProcessor<Object> injectionProcessor;
 
     public PojoEndpoint(Bus bus, PortData port, Context context, Class<?> instance) {
-        super(bus, port, context, instance);
+    	super(bus, port, context, instance, null);
 
         String bindingURI = null;
         if (port.getBindingID() != null) {