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) {


Reply via email to