dblevins    2005/03/09 01:17:17

  Modified:    modules/core/src/java/org/openejb/server/xfire
                        WSContainer.java WSContainerGBean.java
  Log:

  First run of axis integration.  more to sew up yet.
  
  Revision  Changes    Path
  1.4       +36 -40    
openejb/modules/core/src/java/org/openejb/server/xfire/WSContainer.java
  
  Index: WSContainer.java
  ===================================================================
  RCS file: 
/scm/openejb/openejb/modules/core/src/java/org/openejb/server/xfire/WSContainer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- WSContainer.java  23 Feb 2005 18:13:27 -0000      1.3
  +++ WSContainer.java  9 Mar 2005 06:17:16 -0000       1.4
  @@ -56,14 +56,13 @@
   
   import org.apache.geronimo.core.service.InvocationResult;
   import org.apache.geronimo.webservices.MessageContextInvocationKey;
  -import org.apache.geronimo.webservices.WebServiceInvoker;
   import org.apache.geronimo.webservices.WebServiceContainer;
  +import org.apache.geronimo.webservices.SoapHandler;
   import org.apache.geronimo.gbean.GBeanLifecycle;
   import org.codehaus.xfire.MessageContext;
   import org.codehaus.xfire.XFireRuntimeException;
   import org.codehaus.xfire.fault.Soap11FaultHandler;
   import org.codehaus.xfire.fault.XFireFault;
  -import org.codehaus.xfire.handler.SoapHandler;
   import org.codehaus.xfire.java.DefaultJavaService;
   import org.codehaus.xfire.java.Invoker;
   import org.codehaus.xfire.java.JavaServiceHandler;
  @@ -74,23 +73,23 @@
   import org.openejb.EJBInvocationImpl;
   import org.openejb.proxy.ProxyInfo;
   
  -public class WSContainer implements Invoker, WebServiceInvoker, 
GBeanLifecycle {
  +public class WSContainer implements Invoker, WebServiceContainer, 
GBeanLifecycle {
   
       private final EJBContainer ejbContainer;
       private final URI location;
       private final URL wsdlURL;
       private final DefaultJavaService service;
  -    private final WebServiceContainer webServiceContainer;
  +    private final SoapHandler soapHandler;
   
       protected WSContainer() {
           this.ejbContainer = null;
           this.location = null;
           this.wsdlURL = null;
           this.service = null;
  -        this.webServiceContainer = null;
  +        this.soapHandler = null;
       }
   
  -    public WSContainer(EJBContainer ejbContainer, Definition definition, URI 
location, URL wsdlURL, String namespace, String encoding, String style, 
WebServiceContainer webServiceContainer) throws Exception {
  +    public WSContainer(EJBContainer ejbContainer, Definition definition, URI 
location, URL wsdlURL, String namespace, String encoding, String style, 
SoapHandler soapHandler) throws Exception {
           this.ejbContainer = ejbContainer;
           this.location = location;
           this.wsdlURL = wsdlURL;
  @@ -106,18 +105,18 @@
           service.setStyle(style);
           service.setUse(encoding);
           service.setWSDLURL(wsdlURL);
  -        service.setServiceHandler(new SoapHandler(new 
JavaServiceHandler(this)));
  +        service.setServiceHandler(new 
org.codehaus.xfire.handler.SoapHandler(new JavaServiceHandler(this)));
           service.setFaultHandler(new Soap11FaultHandler());
   
           LightWeightServiceConfigurator configurator = new 
LightWeightServiceConfigurator(definition, service);
           configurator.configure();
  -        this.webServiceContainer = webServiceContainer;
  -        if (webServiceContainer != null) {
  -            webServiceContainer.addWebService(location.getPath(), this);
  +        this.soapHandler = soapHandler;
  +        if (soapHandler != null) {
  +            soapHandler.addWebService(location.getPath(), this);
           }
       }
   
  -    public void invoke(InputStream in, OutputStream out, String uri) throws 
Exception {
  +    public void invoke(Request request, Response response) throws Exception {
           //  We have to set the context classloader or the StAX API
           //  won't be able to find it's implementation.
           Thread thread = Thread.currentThread();
  @@ -125,15 +124,31 @@
   
           try {
               thread.setContextClassLoader(getClass().getClassLoader());
  -            MessageContext context = new MessageContext("not-used", null, 
out, null, uri);
  -            context.setRequestStream(in);
  -            invoke(context);
  +            MessageContext context = new MessageContext("not-used", null, 
response.getOutputStream(), null, request.getPath());
  +            context.setRequestStream(request.getInputStream());
  +            org.codehaus.xfire.handler.SoapHandler handler = null;
  +            try {
  +                context.setService(service);
  +
  +                handler = (org.codehaus.xfire.handler.SoapHandler) 
service.getServiceHandler();
  +                handler.invoke(context);
  +            } catch (Exception e) {
  +                e.printStackTrace();
  +                if (e instanceof XFireRuntimeException) {
  +                    throw (XFireRuntimeException) e;
  +                } else if (handler != null) {
  +                    XFireFault fault = XFireFault.createFault(e);
  +                    handler.handleFault(fault, context);
  +                } else {
  +                    throw new XFireRuntimeException("Couldn't process 
message.", e);
  +                }
  +            }
           } finally {
               thread.setContextClassLoader(originalClassLoader);
           }
  -
       }
   
  +
       public void getWsdl(OutputStream out) throws Exception {
           InputStream in = null;
           try {
  @@ -151,26 +166,6 @@
   
       }
   
  -    public void invoke(MessageContext context) {
  -        SoapHandler handler = null;
  -        try {
  -            context.setService(service);
  -
  -            handler = (SoapHandler) service.getServiceHandler();
  -            handler.invoke(context);
  -        } catch (Exception e) {
  -            e.printStackTrace();
  -            if (e instanceof XFireRuntimeException) {
  -                throw (XFireRuntimeException) e;
  -            } else if (handler != null) {
  -                XFireFault fault = XFireFault.createFault(e);
  -                handler.handleFault(fault, context);
  -            } else {
  -                throw new XFireRuntimeException("Couldn't process message.", 
e);
  -            }
  -        }
  -    }
  -
       public Object invoke(Method m, Object[] params, MessageContext context) 
throws XFireFault {
           try {
               int index = ejbContainer.getMethodIndex(m);
  @@ -201,17 +196,18 @@
       }
   
       public void doStop() throws Exception {
  -        if (webServiceContainer != null) {
  -            webServiceContainer.removeWebService(location.getPath());
  +        if (soapHandler != null) {
  +            soapHandler.removeWebService(location.getPath());
           }
       }
   
       public void doFail() {
  -        if (webServiceContainer != null) {
  -            webServiceContainer.removeWebService(location.getPath());
  +        if (soapHandler != null) {
  +            soapHandler.removeWebService(location.getPath());
           }
       }
   
  +    // TODO Move this into org.openejb.server.soap and delete duplicate from 
Axis WSContainer
       private static class SimpleMessageContext implements 
javax.xml.rpc.handler.MessageContext {
   
           private final Map properties;
  
  
  
  1.4       +3 -2      
openejb/modules/core/src/java/org/openejb/server/xfire/WSContainerGBean.java
  
  Index: WSContainerGBean.java
  ===================================================================
  RCS file: 
/scm/openejb/openejb/modules/core/src/java/org/openejb/server/xfire/WSContainerGBean.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- WSContainerGBean.java     6 Mar 2005 02:49:41 -0000       1.3
  +++ WSContainerGBean.java     9 Mar 2005 06:17:16 -0000       1.4
  @@ -56,6 +56,7 @@
   import org.apache.geronimo.kernel.GBeanNotFoundException;
   import org.apache.geronimo.kernel.Kernel;
   import org.apache.geronimo.kernel.jmx.JMXUtil;
  +import org.apache.geronimo.webservices.SoapHandler;
   import org.apache.geronimo.webservices.WebServiceContainer;
   import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
   import org.codehaus.xfire.MessageContext;
  @@ -68,7 +69,7 @@
       static {
           GBeanInfoBuilder infoFactory = new 
GBeanInfoBuilder(WSContainer.class);
   
  -        infoFactory.addOperation("invoke", new 
Class[]{MessageContext.class});
  +        infoFactory.addOperation("invoke", new 
Class[]{WebServiceContainer.Request.class, WebServiceContainer.Response.class});
   
           infoFactory.addReference("EJBContainer", EJBContainer.class, 
NameFactory.STATELESS_SESSION_BEAN);
           infoFactory.addAttribute("definition", Definition.class, true);
  @@ -77,7 +78,7 @@
           infoFactory.addAttribute("namespace", String.class, true);
           infoFactory.addAttribute("encoding", String.class, true);
           infoFactory.addAttribute("style", String.class, true);
  -        infoFactory.addReference("WebServiceContainer", 
WebServiceContainer.class, NameFactory.GERONIMO_SERVICE);
  +        infoFactory.addReference("WebServiceContainer", SoapHandler.class, 
NameFactory.GERONIMO_SERVICE);
   
           infoFactory.setConstructor(new String[]{
               "EJBContainer",
  
  
  

Reply via email to