You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2007/06/05 16:39:23 UTC
svn commit: r544505 - in
/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2:
./ ejb/ pojo/
Author: gawor
Date: Tue Jun 5 07:39:21 2007
New Revision: 544505
URL: http://svn.apache.org/viewvc?view=rev&rev=544505
Log:
initial ws support for ejb-based endpoints for axis2
Added:
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBEndpointController.java (with props)
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBInterceptor.java (with props)
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java (with props)
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBProviderDispatcher.java (with props)
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBServiceDispatcher.java (with props)
Modified:
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/AxisServiceGenerator.java
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBWebServiceContainer.java
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBWebServiceGBean.java
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContainer.java
geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContainerFactoryGBean.java
Modified: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java?view=diff&rev=544505&r1=544504&r2=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java Tue Jun 5 07:39:21 2007
@@ -74,6 +74,7 @@
protected org.apache.geronimo.jaxws.PortInfo portInfo;
protected ConfigurationContext configurationContext;
protected JNDIResolver jndiResolver;
+ protected Class endpointClass;
private AxisService service;
private URL configurationBaseUrl;
private WSDLQueryHandler wsdlQueryHandler;
@@ -87,23 +88,28 @@
this.endpointClassName = endpointClassName;
this.portInfo = portInfo;
this.configurationBaseUrl = configurationBaseUrl;
+ this.jndiResolver = new ServerJNDIResolver(context);
-
+ init();
+ }
+
+ public void init() {
try {
+ this.endpointClass = classLoader.loadClass(this.endpointClassName);
configurationContext = ConfigurationContextFactory.createDefaultConfigurationContext();
//check to see if the wsdlLocation property is set in portInfo,
//if not checking if wsdlLocation exists in annotation
//if already set, annotation should not overwrite it.
if (portInfo.getWsdlFile() == null || portInfo.getWsdlFile().equals("")){
- Class clazz = classLoader.loadClass(endpointClassName);
//getwsdllocation from annotation if it exists
- if (JAXWSUtils.containsWsdlLocation(clazz, classLoader))
- portInfo.setWsdlFile(JAXWSUtils.getServiceWsdlLocation(clazz, classLoader));
+ if (JAXWSUtils.containsWsdlLocation(this.endpointClass, classLoader)) {
+ portInfo.setWsdlFile(JAXWSUtils.getServiceWsdlLocation(this.endpointClass, classLoader));
+ }
}
if(portInfo.getWsdlFile() != null && !portInfo.getWsdlFile().equals("")){ //WSDL file Has been provided
- AxisServiceGenerator serviceGen = new AxisServiceGenerator();
+ AxisServiceGenerator serviceGen = createServiceGenerator();
service = serviceGen.getServiceFromWSDL(portInfo, endpointClassName, configurationBaseUrl, classLoader);
}else { //No WSDL, Axis2 will handle it. Is it ?
@@ -119,9 +125,12 @@
throw new RuntimeException(e);
}
- this.wsdlQueryHandler = new WSDLQueryHandler(this.service);
- jndiResolver = new ServerJNDIResolver(context);
+ this.wsdlQueryHandler = new WSDLQueryHandler(this.service);
}
+
+ protected AxisServiceGenerator createServiceGenerator() {
+ return new AxisServiceGenerator();
+ }
public void getWsdl(Request request, Response response) throws Exception {
doService(request, response);
Modified: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/AxisServiceGenerator.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/AxisServiceGenerator.java?view=diff&rev=544505&r1=544504&r2=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/AxisServiceGenerator.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/AxisServiceGenerator.java Tue Jun 5 07:39:21 2007
@@ -45,6 +45,7 @@
import org.apache.axis2.description.Parameter;
import org.apache.axis2.description.WSDL11ToAxisServiceBuilder;
import org.apache.axis2.description.WSDLToAxisServiceBuilder;
+import org.apache.axis2.engine.MessageReceiver;
import org.apache.axis2.jaxws.description.DescriptionFactory;
import org.apache.axis2.jaxws.description.EndpointDescription;
import org.apache.axis2.jaxws.description.ServiceDescription;
@@ -72,11 +73,16 @@
private static String WSDL_ENCODING = "UTF-8";
+ private MessageReceiver messageReceiver;
+
public AxisServiceGenerator(){
- super();
+ this.messageReceiver = new JAXWSMessageReceiver();
}
-
+ public void setMessageReceiver(MessageReceiver messageReceiver) {
+ this.messageReceiver = messageReceiver;
+ }
+
public AxisService getServiceFromWSDL(PortInfo portInfo, String endpointClassName, URL configurationBaseUrl, ClassLoader classLoader) throws Exception {
Definition wsdlDefinition = getWSDLDefinition(portInfo, configurationBaseUrl, classLoader);
@@ -154,7 +160,7 @@
for(Iterator<AxisOperation> opIterator = service.getOperations() ; opIterator.hasNext() ;){
AxisOperation operation = opIterator.next();
- operation.setMessageReceiver(JAXWSMessageReceiver.class.newInstance());
+ operation.setMessageReceiver(this.messageReceiver);
String MEP = operation.getMessageExchangePattern();
if (!WSDLUtil.isOutputPresentForMEP(MEP)) {
List<MethodDescriptionComposite> mdcList = dbc.getMethodDescriptionComposite(operation.getName().toString());
@@ -196,51 +202,50 @@
}
}
- protected Definition getWSDLDefinition(PortInfo portInfo, URL configurationBaseUrl, ClassLoader classLoader) throws IOException, WSDLException {
+ protected Definition getWSDLDefinition(PortInfo portInfo,
+ URL configurationBaseUrl,
+ ClassLoader classLoader)
+ throws IOException, WSDLException {
String wsdlFile = portInfo.getWsdlFile();
- Definition wsdlDefinition = null;
if (wsdlFile == null || wsdlFile.equals("")) {
- log.debug("A WSDL file was not supplied.");
- return null;
- } else {
- URL wsdlURL = getWsdlURL(wsdlFile, configurationBaseUrl, classLoader);
- InputStream wsdlStream;
- try {
- wsdlStream = wsdlURL.openStream();
- if(wsdlStream == null){
- throw new IOException("unable to read descriptor " + wsdlURL);
- }
- else {
- WSDLFactory factory = WSDLFactory.newInstance();
- WSDLReader reader = factory.newWSDLReader();
- reader.setFeature("javax.wsdl.importDocuments", true);
- reader.setFeature("javax.wsdl.verbose", false);
- wsdlDefinition = reader.readWSDL(wsdlURL.toString());
- wsdlStream.close();
- }
- } catch (RuntimeException e) {
- throw new RuntimeException("invalid WSDL provided " + wsdlURL);
- }
- return wsdlDefinition;
+ throw new IOException("WSDL file was not supplied.");
}
+
+ Definition wsdlDefinition = null;
+ URL wsdlURL = getWsdlURL(wsdlFile, configurationBaseUrl, classLoader);
+ InputStream wsdlStream = null;
+ try {
+ wsdlStream = wsdlURL.openStream();
+ WSDLFactory factory = WSDLFactory.newInstance();
+ WSDLReader reader = factory.newWSDLReader();
+ reader.setFeature("javax.wsdl.importDocuments", true);
+ reader.setFeature("javax.wsdl.verbose", false);
+ wsdlDefinition = reader.readWSDL(wsdlURL.toString());
+ } catch (RuntimeException e) {
+ throw new RuntimeException("invalid WSDL provided " + wsdlURL);
+ } finally {
+ if (wsdlStream != null) {
+ wsdlStream.close();
+ }
+ }
+ return wsdlDefinition;
+
}
public static URL getWsdlURL(String wsdlFile, URL configurationBaseUrl, ClassLoader classLoader) {
URL wsdlURL = null;
if (wsdlFile != null) {
-
try {
wsdlURL = new URL(wsdlFile);
} catch (MalformedURLException e) {
// Not a URL, try as a resource
- wsdlURL = classLoader.getResource("/" + wsdlFile);
+ wsdlURL = classLoader.getResource(wsdlFile);
if (wsdlURL == null && configurationBaseUrl != null) {
// Cannot get it as a resource, try with
// configurationBaseUrl
try {
- wsdlURL = new URL(configurationBaseUrl.toString()
- + wsdlFile);
+ wsdlURL = new URL(configurationBaseUrl, wsdlFile);
} catch (MalformedURLException ee) {
// ignore
}
@@ -249,4 +254,6 @@
}
return wsdlURL;
}
+
+
}
Added: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBEndpointController.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBEndpointController.java?view=auto&rev=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBEndpointController.java (added)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBEndpointController.java Tue Jun 5 07:39:21 2007
@@ -0,0 +1,45 @@
+/*
+ * 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.geronimo.axis2.ejb;
+
+import javax.interceptor.InvocationContext;
+import javax.xml.ws.Provider;
+
+import org.apache.axis2.jaxws.server.EndpointController;
+import org.apache.axis2.jaxws.server.dispatcher.EndpointDispatcher;
+
+public class EJBEndpointController extends EndpointController {
+
+ private InvocationContext invContext;
+
+ public EJBEndpointController(InvocationContext invContext) {
+ this.invContext = invContext;
+ }
+
+ @Override
+ protected EndpointDispatcher getEndpointDispatcher(Class serviceImplClass, Object serviceInstance)
+ throws Exception {
+ if (Provider.class.isAssignableFrom(serviceImplClass)) {
+ return new EJBProviderDispatcher(this.invContext);
+ } else {
+ return new EJBServiceDispatcher(this.invContext);
+ }
+ }
+
+}
Propchange: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBEndpointController.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBInterceptor.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBInterceptor.java?view=auto&rev=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBInterceptor.java (added)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBInterceptor.java Tue Jun 5 07:39:21 2007
@@ -0,0 +1,115 @@
+/**
+ * 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.geronimo.axis2.ejb;
+
+import javax.interceptor.AroundInvoke;
+import javax.xml.ws.Binding;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.WSDL2Constants;
+import org.apache.axis2.engine.AxisEngine;
+import org.apache.axis2.jaxws.core.InvocationContext;
+import org.apache.axis2.jaxws.core.InvocationContextFactory;
+import org.apache.axis2.jaxws.core.MessageContext;
+import org.apache.axis2.jaxws.message.util.MessageUtils;
+import org.apache.axis2.jaxws.server.JAXWSMessageReceiver;
+import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004_Constants;
+import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2006Constants;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class EJBInterceptor {
+
+ private static final Log LOG = LogFactory.getLog(EJBInterceptor.class);
+
+ private MessageContext requestMsgCtx;
+
+ public EJBInterceptor(MessageContext requestCtx) {
+ this.requestMsgCtx = requestCtx;
+ }
+
+ @AroundInvoke
+ public Object intercept(javax.interceptor.InvocationContext invContext) throws Exception {
+
+ AxisOperation operation = this.requestMsgCtx.getAxisMessageContext().getAxisOperation();
+ String mep = operation.getMessageExchangePattern();
+
+ EJBEndpointController controller = new EJBEndpointController(invContext);
+
+ Binding binding = (Binding)this.requestMsgCtx.getAxisMessageContext().getProperty(JAXWSMessageReceiver.PARAM_BINDING);
+ InvocationContext ic = InvocationContextFactory.createInvocationContext(binding);
+ ic.setRequestMessageContext(this.requestMsgCtx);
+
+ controller.invoke(ic);
+
+ MessageContext responseMsgCtx = ic.getResponseMessageContext();
+
+ //If there is a fault it could be Robust In-Only
+ if (!isMepInOnly(mep) || hasFault(responseMsgCtx)) {
+ // If this is a two-way exchange, there should already be a
+ // JAX-WS MessageContext for the response. We need to pull
+ // the Message data out of there and set it on the Axis2
+ // MessageContext.
+ org.apache.axis2.context.MessageContext axisResponseMsgCtx =
+ responseMsgCtx.getAxisMessageContext();
+
+ MessageUtils.putMessageOnMessageContext(responseMsgCtx.getMessage(),
+ axisResponseMsgCtx);
+
+ OperationContext opCtx = axisResponseMsgCtx.getOperationContext();
+ opCtx.addMessageContext(axisResponseMsgCtx);
+
+ // If this is a fault message, we want to throw it as an
+ // exception so that the transport can do the appropriate things
+ if (responseMsgCtx.getMessage().isFault()) {
+ throw new AxisFault("An error was detected during JAXWS processing",
+ axisResponseMsgCtx);
+ } else {
+ //Create the AxisEngine for the reponse and send it.
+ AxisEngine engine =
+ new AxisEngine(axisResponseMsgCtx.getConfigurationContext());
+ engine.send(axisResponseMsgCtx);
+ }
+ }
+
+ // TODO: convert response into object?
+ return null;
+ }
+
+ private boolean hasFault(MessageContext responseMsgCtx) {
+ if (responseMsgCtx == null || responseMsgCtx.getMessage() == null) {
+ return false;
+ }
+ return responseMsgCtx.getMessage().isFault();
+ }
+
+ private boolean isMepInOnly(String mep) {
+ boolean inOnly = mep.equals(WSDL20_2004_Constants.MEP_URI_ROBUST_IN_ONLY) ||
+ mep.equals(WSDL20_2004_Constants.MEP_URI_IN_ONLY) ||
+ mep.equals(WSDL2Constants.MEP_URI_IN_ONLY) ||
+ mep.equals(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY) ||
+ mep.equals(WSDL20_2006Constants.MEP_URI_ROBUST_IN_ONLY) ||
+ mep.equals(WSDL20_2006Constants.MEP_URI_IN_ONLY);
+ return inOnly;
+ }
+
+}
Propchange: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBInterceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java?view=auto&rev=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java (added)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java Tue Jun 5 07:39:21 2007
@@ -0,0 +1,140 @@
+/**
+ * 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.geronimo.axis2.ejb;
+
+import java.lang.reflect.Method;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.jaxws.ExceptionFactory;
+import org.apache.axis2.jaxws.core.MessageContext;
+import org.apache.axis2.jaxws.description.EndpointDescription;
+import org.apache.axis2.jaxws.description.EndpointInterfaceDescription;
+import org.apache.axis2.jaxws.description.OperationDescription;
+import org.apache.axis2.jaxws.handler.ProtectedMessageContext;
+import org.apache.axis2.jaxws.i18n.Messages;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.RpcContainer;
+
+public class EJBMessageReceiver implements MessageReceiver {
+
+ private static final Log LOG = LogFactory.getLog(EJBMessageReceiver.class);
+
+ private DeploymentInfo deploymentInfo;
+ private Class serviceImplClass;
+
+ public EJBMessageReceiver(Class serviceImplClass, DeploymentInfo deploymentInfo) {
+ this.serviceImplClass = serviceImplClass;
+ this.deploymentInfo = deploymentInfo;
+ }
+
+ public void receive(org.apache.axis2.context.MessageContext axisMsgCtx) throws AxisFault {
+ MessageContext requestMsgCtx = new MessageContext(axisMsgCtx);
+
+ // init some bits
+ requestMsgCtx.setOperationName(requestMsgCtx.getAxisMessageContext().getAxisOperation().getName());
+ requestMsgCtx.setEndpointDescription(getEndpointDescription(requestMsgCtx));
+ requestMsgCtx.setOperationDescription(getOperationDescription(requestMsgCtx));
+
+ // TODO: will need to handle Provider.invoke() method here
+
+ Method method = getJavaMethod(requestMsgCtx, this.serviceImplClass);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Invoking '" + method.getName() + "' method.");
+ }
+
+ EJBInterceptor interceptor = new EJBInterceptor(requestMsgCtx);
+
+ ProtectedMessageContext jaxwsContext = new ProtectedMessageContext(requestMsgCtx);
+
+ Object[] arguments = { jaxwsContext, interceptor };
+
+ RpcContainer container = (RpcContainer) this.deploymentInfo.getContainer();
+
+ Class callInterface = this.deploymentInfo.getServiceEndpointInterface();
+
+ method = getMostSpecificMethod(method, callInterface);
+
+ try {
+ Object res = container.invoke(this.deploymentInfo.getDeploymentID(), callInterface, method, arguments, null);
+ // TODO: update response message with new response value?
+ } catch (Exception e) {
+ throw AxisFault.makeFault(e);
+ }
+ }
+
+ private static Method getMostSpecificMethod(Method method, Class<?> targetClass) {
+ if (method != null && targetClass != null) {
+ try {
+ method = targetClass.getMethod(method.getName(), method.getParameterTypes());
+ } catch (NoSuchMethodException ex) {
+ // Perhaps the target class doesn't implement this method:
+ // that's fine, just use the original method
+ }
+ }
+ return method;
+ }
+
+ private Method getJavaMethod(MessageContext mc, Class serviceImplClass) {
+ OperationDescription opDesc = mc.getOperationDescription();
+ if (opDesc == null) {
+ throw ExceptionFactory.makeWebServiceException("Operation Description was not set");
+ }
+
+ Method returnMethod = opDesc.getMethodFromServiceImpl(serviceImplClass);
+ if (returnMethod == null) {
+ throw ExceptionFactory
+ .makeWebServiceException(Messages.getMessage("JavaBeanDispatcherErr1"));
+ }
+
+ return returnMethod;
+ }
+
+ private OperationDescription getOperationDescription(MessageContext mc) {
+ EndpointDescription ed = mc.getEndpointDescription();
+ EndpointInterfaceDescription eid = ed.getEndpointInterfaceDescription();
+
+ OperationDescription[] ops = eid.getDispatchableOperation(mc.getOperationName());
+ if (ops == null || ops.length == 0) {
+ throw ExceptionFactory.makeWebServiceException(
+ "No operation found. WSDL Operation name: " + mc.getOperationName());
+ }
+ if (ops.length > 1) {
+ throw ExceptionFactory.makeWebServiceException(
+ "More than one operation found. Overloaded WSDL operations are not supported. WSDL Operation name: " +
+ mc.getOperationName());
+ }
+ OperationDescription op = ops[0];
+ return op;
+ }
+
+ private EndpointDescription getEndpointDescription(MessageContext mc) {
+ AxisService axisSvc = mc.getAxisMessageContext().getAxisService();
+
+ Parameter param = axisSvc.getParameter(EndpointDescription.AXIS_SERVICE_PARAMETER);
+
+ EndpointDescription ed = (EndpointDescription) param.getValue();
+ return ed;
+ }
+
+}
Propchange: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBProviderDispatcher.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBProviderDispatcher.java?view=auto&rev=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBProviderDispatcher.java (added)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBProviderDispatcher.java Tue Jun 5 07:39:21 2007
@@ -0,0 +1,44 @@
+/*
+ * 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.geronimo.axis2.ejb;
+
+import javax.interceptor.InvocationContext;
+import javax.xml.ws.Provider;
+
+import org.apache.axis2.jaxws.core.MessageContext;
+import org.apache.axis2.jaxws.server.dispatcher.ProviderDispatcher;
+
+public class EJBProviderDispatcher extends ProviderDispatcher {
+
+ private InvocationContext invContext;
+
+ public EJBProviderDispatcher(InvocationContext invContext) {
+ super(null, null);
+ this.invContext = invContext;
+ }
+
+ @Override
+ protected Object invokeProvider(MessageContext ctx,
+ Provider provider,
+ Object input) throws Exception {
+ this.invContext.setParameters(new Object[] {input});
+ return this.invContext.proceed();
+ }
+
+}
Propchange: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBProviderDispatcher.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBServiceDispatcher.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBServiceDispatcher.java?view=auto&rev=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBServiceDispatcher.java (added)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBServiceDispatcher.java Tue Jun 5 07:39:21 2007
@@ -0,0 +1,46 @@
+/*
+ * 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.geronimo.axis2.ejb;
+
+import java.lang.reflect.Method;
+
+import javax.interceptor.InvocationContext;
+
+import org.apache.axis2.jaxws.core.MessageContext;
+import org.apache.axis2.jaxws.server.dispatcher.JavaBeanDispatcher;
+
+public class EJBServiceDispatcher extends JavaBeanDispatcher {
+
+ private InvocationContext invContext;
+
+ public EJBServiceDispatcher(InvocationContext invContext) {
+ super(null, null);
+ this.invContext = invContext;
+ }
+
+ @Override
+ protected Object invokeService(MessageContext ctx,
+ Method method,
+ Object obj,
+ Object args[]) throws Exception {
+ this.invContext.setParameters(args);
+ return this.invContext.proceed();
+ }
+
+}
Propchange: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBServiceDispatcher.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBWebServiceContainer.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBWebServiceContainer.java?view=diff&rev=544505&r1=544504&r2=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBWebServiceContainer.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBWebServiceContainer.java Tue Jun 5 07:39:21 2007
@@ -19,7 +19,9 @@
import org.apache.axis2.util.JavaUtils;
import org.apache.geronimo.axis2.Axis2WebServiceContainer;
+import org.apache.geronimo.axis2.AxisServiceGenerator;
import org.apache.geronimo.jaxws.PortInfo;
+import org.apache.openejb.DeploymentInfo;
import javax.naming.Context;
import java.net.URL;
@@ -30,15 +32,26 @@
public class EJBWebServiceContainer extends Axis2WebServiceContainer {
private String contextRoot = null;
+ private DeploymentInfo deploymnetInfo;
public EJBWebServiceContainer(PortInfo portInfo,
- String endpointClassName,
- ClassLoader classLoader,
- Context context,
- URL configurationBaseUrl) {
+ String endpointClassName,
+ ClassLoader classLoader,
+ Context context,
+ URL configurationBaseUrl,
+ DeploymentInfo deploymnetInfo) {
super(portInfo, endpointClassName, classLoader, context, configurationBaseUrl);
+ this.deploymnetInfo = deploymnetInfo;
}
+ @Override
+ protected AxisServiceGenerator createServiceGenerator() {
+ AxisServiceGenerator serviceGenerator = super.createServiceGenerator();
+ serviceGenerator.setMessageReceiver(new EJBMessageReceiver(this.endpointClass, this.deploymnetInfo));
+ return serviceGenerator;
+ }
+
+ @Override
protected void initContextRoot(Request request) {
String servicePath = portInfo.getLocation();
Modified: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBWebServiceGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBWebServiceGBean.java?view=diff&rev=544505&r1=544504&r2=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBWebServiceGBean.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ejb/EJBWebServiceGBean.java Tue Jun 5 07:39:21 2007
@@ -17,7 +17,10 @@
package org.apache.geronimo.axis2.ejb;
-import org.apache.geronimo.axis2.Axis2WebServiceContainer;
+import java.net.URL;
+
+import javax.naming.Context;
+
import org.apache.geronimo.gbean.GBeanInfo;
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
@@ -26,9 +29,7 @@
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.openejb.EjbDeployment;
import org.apache.geronimo.webservices.SoapHandler;
-
-import javax.naming.Context;
-import java.net.URL;
+import org.apache.openejb.DeploymentInfo;
/**
* @version $Rev$ $Date$
@@ -37,6 +38,7 @@
private SoapHandler soapHandler;
private String location;
+ private EJBWebServiceContainer container;
public EJBWebServiceGBean(EjbDeployment ejbDeploymentContext,
PortInfo portInfo,
@@ -52,24 +54,25 @@
return;
}
+ this.soapHandler = soapHandler;
this.location = portInfo.getLocation();
assert this.location != null : "null location received";
String beanClassName = ejbDeploymentContext.getBeanClass().getName();
- Context context = ejbDeploymentContext.getComponentContext();
-
+ Context context = ejbDeploymentContext.getComponentContext();
ClassLoader classLoader = ejbDeploymentContext.getClassLoader();
+ DeploymentInfo deploymnetInfo = ejbDeploymentContext.getDeploymentInfo();
- //TODO: need to invoke the EJB container and forward the call to the EJB container.
-
- Axis2WebServiceContainer container =
- new EJBWebServiceContainer(portInfo, beanClassName, classLoader, context, configurationBaseUrl);
+ this.container =
+ new EJBWebServiceContainer(portInfo, beanClassName, classLoader,
+ context, configurationBaseUrl, deploymnetInfo);
+ this.container.init();
if (soapHandler != null) {
soapHandler.addWebService(this.location,
virtualHosts,
- container,
+ this.container,
securityRealmName,
realmName,
transportGuarantee,
@@ -85,7 +88,10 @@
public void doStop() throws Exception {
if (this.soapHandler != null) {
this.soapHandler.removeWebService(this.location);
- }
+ }
+ if (this.container != null) {
+ this.container.destroy();
+ }
}
public void doFail() {
Modified: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContainer.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContainer.java?view=diff&rev=544505&r1=544504&r2=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContainer.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContainer.java Tue Jun 5 07:39:21 2007
@@ -78,7 +78,7 @@
setMsgContextProperties(msgContext, service, response, request);
annotationProcessor = new JAXWSAnnotationProcessor(this.jndiResolver,
new POJOWebServiceContext(msgContext));
- init();
+ initHandlers();
try {
HTTPTransportUtils.processHTTPPostRequest(
msgContext,
@@ -88,7 +88,7 @@
soapAction,
request.getURI().getPath());
} finally {
- stop();
+ stopHandlers();
}
}
@@ -100,7 +100,7 @@
super.setMsgContextProperties(msgContext, service, response, request);
}
- protected void init() {
+ protected void initHandlers() {
// configure and inject handlers
try {
configureHandlers();
@@ -134,7 +134,7 @@
chain = handlerResolver.getHandlerChain(null);
}
- public void stop() {
+ public void stopHandlers() {
// call handlers preDestroy
for (Handler handler : chain) {
this.annotationProcessor.invokePreDestroy(handler);
Modified: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContainerFactoryGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContainerFactoryGBean.java?view=diff&rev=544505&r1=544504&r2=544505
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContainerFactoryGBean.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContainerFactoryGBean.java Tue Jun 5 07:39:21 2007
@@ -73,7 +73,9 @@
}
public WebServiceContainer getWebServiceContainer() {
- return new POJOWebServiceContainer(portInfo, endpointClassName, classLoader, context, configurationBaseUrl);
+ POJOWebServiceContainer container = new POJOWebServiceContainer(portInfo, endpointClassName, classLoader, context, configurationBaseUrl);
+ container.init();
+ return container;
}
public static final GBeanInfo GBEAN_INFO;