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",