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