Author: rfeng
Date: Thu Oct  5 17:25:05 2006
New Revision: 453436

URL: http://svn.apache.org/viewvc?view=rev&rev=453436
Log:
Adding service-side async invocation

Modified:
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutAsyncMessageReceiver.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutSyncMessageReceiver.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceServlet.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
 Thu Oct  5 17:25:05 2006
@@ -114,6 +114,7 @@
             // FIXME:  
             
inboundContract.setInterfaceClass(serviceDefinition.getServiceContract().getInterfaceClass());
             inboundContract.setDataBinding(OM_DATA_BINDING);
+            
inboundContract.setCallbackName(serviceDefinition.getServiceContract().getCallbackName());
 
             try {
                 wireService.checkCompatibility(inboundContract, 
outboundContract, true);
@@ -121,8 +122,9 @@
                 throw new Axis2BindingBuilderRuntimeException(e);
             }
             
-            Service service = new Axis2Service(serviceDefinition.getName(), 
inboundContract, parent, wireService, wsBinding,
+            Service service = new Axis2Service(serviceDefinition.getName(), 
outboundContract, parent, wireService, wsBinding,
                     servletHost, configContext, workContext);
+            service.setBindingServiceContract(inboundContract);
             
             return service;
             

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
 Thu Oct  5 17:25:05 2006
@@ -46,7 +46,6 @@
             inboundWire.getSourceCallbackInvocationChains(targetAddress);
         OutboundInvocationChain chain = 
sourceCallbackInvocationChains.get(operation);
         TargetInvoker invoker = chain.getTargetInvoker();
-        // System.out.println("Axis2CallbackInvocationHandler.invoke invoking 
super: " + args[0]);
         return invoke(chain, invoker, args);
     }
 

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
 Thu Oct  5 17:25:05 2006
@@ -57,7 +57,8 @@
 import org.osoa.sca.annotations.Destroy;
 
 /**
- * An implementation of a [EMAIL PROTECTED] ServiceExtension} configured with 
the Axis2 binding
+ * An implementation of a [EMAIL PROTECTED] ServiceExtension} configured with 
the Axis2
+ * binding
  * 
  * @version $Rev$ $Date$
  */
@@ -74,9 +75,14 @@
 
     private Map<MessageId, InvocationContext> invCtxMap = new 
HashMap<MessageId, InvocationContext>();
 
-    public Axis2Service(String theName, ServiceContract<?> serviceContract, 
CompositeComponent parent,
-            WireService wireService, WebServiceBinding binding, ServletHost 
servletHost,
-            ConfigurationContext configContext, WorkContext workContext) {
+    public Axis2Service(String theName,
+                        ServiceContract<?> serviceContract,
+                        CompositeComponent parent,
+                        WireService wireService,
+                        WebServiceBinding binding,
+                        ServletHost servletHost,
+                        ConfigurationContext configContext,
+                        WorkContext workContext) {
 
         super(theName, serviceContract.getInterfaceClass(), parent, 
wireService);
 
@@ -116,17 +122,18 @@
     private AxisService createAxisService(WebServiceBinding wsBinding) throws 
AxisFault {
         Definition definition = wsBinding.getWSDLDefinition();
         WebServicePortMetaData wsdlPortInfo =
-                new WebServicePortMetaData(definition, 
wsBinding.getWSDLPort(), null, false);
+            new WebServicePortMetaData(definition, wsBinding.getWSDLPort(), 
null, false);
 
         // TODO investigate if this is 20 wsdl what todo?
         WSDLToAxisServiceBuilder builder =
-                new WSDL11ToAxisServiceBuilder(definition, 
wsdlPortInfo.getServiceName(), wsdlPortInfo.getPort()
-                        .getName());
+            new WSDL11ToAxisServiceBuilder(definition, 
wsdlPortInfo.getServiceName(), wsdlPortInfo.getPort()
+                .getName());
         builder.setServerSide(true);
         AxisService axisService = builder.populateService();
 
         axisService.setName(this.getName());
-        axisService.setServiceDescription("Tuscany configured AxisService for 
service: '" + this.getName() + '\'');
+        axisService.setServiceDescription("Tuscany configured AxisService for 
service: '" + this.getName()
+            + '\'');
 
         // Use the existing WSDL
         Parameter wsdlParam = new Parameter(WSDLConstants.WSDL_4_J_DEFINITION, 
null);
@@ -137,14 +144,14 @@
 
         PortType wsdlPortType = wsdlPortInfo.getPortType();
         for (Object o : wsdlPortType.getOperations()) {
-            Operation wsdlOperation = (Operation) o;
+            Operation wsdlOperation = (Operation)o;
             String operationName = wsdlOperation.getName();
             QName operationQN = new QName(definition.getTargetNamespace(), 
operationName);
 
             org.apache.tuscany.spi.model.Operation<?> op = 
serviceContract.getOperations().get(operationName);
 
             MessageReceiver msgrec = null;
-            if (inboundWire.getCallbackReferenceName() != null) {
+            if (serviceContract.getCallbackName() != null) {
                 msgrec = new Axis2ServiceInOutAsyncMessageReceiver(this, op, 
workContext);
             } else {
                 msgrec = new Axis2ServiceInOutSyncMessageReceiver(this, op);
@@ -199,7 +206,7 @@
             }
             Object body = resp.getBody();
             if (resp.isFault()) {
-                throw new InvocationTargetException((Throwable) body);
+                throw new InvocationTargetException((Throwable)body);
             }
             return body;
         }
@@ -222,13 +229,13 @@
                 return m;
             }
         }
-        throw new BuilderConfigException("no operation named " + operationName 
+ " found on service interface: "
-                + serviceInterface.getName());
+        throw new BuilderConfigException("no operation named " + operationName
+            + " found on service interface: "
+            + serviceInterface.getName());
     }
 
-    public TargetInvoker createCallbackTargetInvoker(
-            ServiceContract contract,
-            org.apache.tuscany.spi.model.Operation operation) {
+    public TargetInvoker createCallbackTargetInvoker(ServiceContract contract,
+                                                     
org.apache.tuscany.spi.model.Operation operation) {
 
         return new Axis2ServiceCallbackTargetInvoker(workContext, this);
     }
@@ -252,8 +259,9 @@
 
         public SOAPFactory soapFactory;
 
-        public InvocationContext(MessageContext messageCtx, 
org.apache.tuscany.spi.model.Operation<?> operation,
-                SOAPFactory soapFactory) {
+        public InvocationContext(MessageContext messageCtx,
+                                 org.apache.tuscany.spi.model.Operation<?> 
operation,
+                                 SOAPFactory soapFactory) {
             this.inMessageContext = messageCtx;
             this.operation = operation;
             this.soapFactory = soapFactory;

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutAsyncMessageReceiver.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutAsyncMessageReceiver.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutAsyncMessageReceiver.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutAsyncMessageReceiver.java
 Thu Oct  5 17:25:05 2006
@@ -21,16 +21,18 @@
 import java.lang.reflect.InvocationTargetException;
 
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.receivers.AbstractMessageReceiver;
+import org.apache.axis2.receivers.AbstractInOutAsyncMessageReceiver;
 import org.apache.tuscany.binding.axis2.Axis2Service.InvocationContext;
 import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.wire.InvocationRuntimeException;
 import org.apache.tuscany.spi.wire.MessageId;
 
-public class Axis2ServiceInOutAsyncMessageReceiver extends 
AbstractMessageReceiver {
+public class Axis2ServiceInOutAsyncMessageReceiver extends 
AbstractInOutAsyncMessageReceiver {
 
     private Operation<?> operation;
 
@@ -38,47 +40,47 @@
 
     private Axis2Service service;
 
-    public Axis2ServiceInOutAsyncMessageReceiver(Axis2Service service, 
Operation operation,
-
-    WorkContext workContext) {
+    public Axis2ServiceInOutAsyncMessageReceiver(Axis2Service service,
+                                                 Operation operation,
+                                                 WorkContext workContext) {
         this.operation = operation;
         this.workContext = workContext;
         this.service = service;
     }
 
-    public final void receive(final MessageContext messageCtx) {
-
-        Runnable theadedTask = new Runnable() {
-            public void run() {
-                try {
-                    // Create a new message id and hand it to 
JDKInboundInvocationHandler
-                    // via work context
-                    MessageId messageId = new MessageId();
-                    workContext.setCurrentMessageId(messageId);
-                    // Now use message id as index to context to be used by 
callback target invoker
-                    InvocationContext invCtx =
-                            service.new InvocationContext(messageCtx, 
operation, getSOAPFactory(messageCtx));
-                    service.addMapping(messageId, invCtx);
-
-                    invokeBusinessLogic(messageCtx);
-                } catch (AxisFault e) {
-                    // log.error(e);
-                }
-            }
-        };
-        
messageCtx.getConfigurationContext().getThreadPool().execute(theadedTask);
+    public Axis2ServiceInOutAsyncMessageReceiver() {
     }
 
-    public void invokeBusinessLogic(MessageContext inMC) throws AxisFault {
-
+    @Override
+    public void invokeBusinessLogic(MessageContext inMC, MessageContext outMC) 
throws AxisFault {
         try {
+            // Create a new message id and hand it to
+            // JDKInboundInvocationHandler
+            // via work context
+            MessageId messageId = new MessageId();
+            workContext.setCurrentMessageId(messageId);
+            // Now use message id as index to context to be used by callback
+            // target invoker
+            InvocationContext invCtx = service.new InvocationContext(inMC, 
operation, getSOAPFactory(inMC));
+            service.addMapping(messageId, invCtx);
+
             OMElement requestOM = 
inMC.getEnvelope().getBody().getFirstElement();
-            Object[] args = new Object[] { requestOM };
-            service.invokeTarget(operation, args);
+            Object[] args = new Object[] {requestOM};
+
+            // FIXME: It seems that the AsyncTargetInvoker always returns null
+            OMElement responseOM = (OMElement)service.invokeTarget(operation, 
args);
+
+            SOAPEnvelope soapEnvelope = 
getSOAPFactory(inMC).getDefaultEnvelope();
+            if (responseOM != null) {
+                soapEnvelope.getBody().addChild(responseOM);
+            }
+            outMC.setEnvelope(soapEnvelope);
+            
outMC.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN, 
Constants.VALUE_TRUE);
+
         } catch (InvocationTargetException e) {
             Throwable t = e.getCause();
             if (t instanceof Exception) {
-                throw AxisFault.makeFault((Exception) t);
+                throw AxisFault.makeFault((Exception)t);
             }
             throw new InvocationRuntimeException(e);
         } catch (Exception e) {

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutSyncMessageReceiver.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutSyncMessageReceiver.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutSyncMessageReceiver.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutSyncMessageReceiver.java
 Thu Oct  5 17:25:05 2006
@@ -40,13 +40,17 @@
         this.operation = operation;
     }
 
+    public Axis2ServiceInOutSyncMessageReceiver() {
+
+    }
+
     @Override
     public void invokeBusinessLogic(MessageContext inMC, MessageContext outMC) 
throws AxisFault {
         try {
             OMElement requestOM = 
inMC.getEnvelope().getBody().getFirstElement();
-            Object[] args = new Object[] { requestOM };
+            Object[] args = new Object[] {requestOM};
 
-            OMElement responseOM = (OMElement) 
axis2Service.invokeTarget(operation, args);
+            OMElement responseOM = 
(OMElement)axis2Service.invokeTarget(operation, args);
 
             SOAPEnvelope soapEnvelope = 
getSOAPFactory(inMC).getDefaultEnvelope();
             soapEnvelope.getBody().addChild(responseOM);
@@ -54,12 +58,14 @@
             
outMC.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN, 
Constants.VALUE_TRUE);
 
         } catch (InvocationTargetException e) {
+            e.printStackTrace();
             Throwable t = e.getCause();
             if (t instanceof Exception) {
-                throw AxisFault.makeFault((Exception) t);
+                throw AxisFault.makeFault((Exception)t);
             }
             throw new InvocationRuntimeException(e);
         } catch (Exception e) {
+            e.printStackTrace();
             throw AxisFault.makeFault(e);
         }
 

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceServlet.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceServlet.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceServlet.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceServlet.java
 Thu Oct  5 17:25:05 2006
@@ -104,6 +104,10 @@
                     }
 
                     public URL getResource(String path) throws 
MalformedURLException {
+                        if("/".equals(path)) {
+                            // HACK: To avoid NPE
+                            return new URL("/axis2");
+                        }
                         return null;
                     }
 

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml
 Thu Oct  5 17:25:05 2006
@@ -61,6 +61,10 @@
                          
class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
         <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out";
                          
class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
+        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out";
+                         
class="org.apache.tuscany.binding.axis2.Axis2ServiceInOutAsyncMessageReceiver"/>
+        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out";
+                         
class="org.apache.tuscany.binding.axis2.Axis2ServiceInOutSyncMessageReceiver"/>
     </messageReceivers>
     <!-- ================================================= -->
     <!-- Transport Ins -->

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java
 Thu Oct  5 17:25:05 2006
@@ -103,7 +103,7 @@
         contract.setOperations(opMap);
         
EasyMock.expect(inboundWire.getServiceContract()).andReturn(contract).anyTimes();
         if (callback) {
-            
EasyMock.expect(inboundWire.getCallbackReferenceName()).andReturn("").anyTimes();
+            contract.setCallbackName("");
         }
         EasyMock.replay(inboundWire);
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to