Author: rfeng
Date: Wed Oct 11 14:28:18 2006
New Revision: 462960

URL: http://svn.apache.org/viewvc?view=rev&rev=462960
Log:
Bring up one-way WS(Thanks for Ignacio's contribution)

Added:
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java
   (with props)
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInMessageReceiver.java
   (with props)
Modified:
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Reference.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/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml

Added: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java?view=auto&rev=462960
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java
 (added)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java
 Wed Oct 11 14:28:18 2006
@@ -0,0 +1,68 @@
+/**
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as 
applicable.
+ *
+ *  Licensed 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.tuscany.binding.axis2;
+
+import java.lang.reflect.InvocationTargetException;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.client.OperationClient;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+
+public class Axis2OneWayTargetInvoker extends Axis2TargetInvoker {
+
+    protected static final OMElement RESPONSE = null;
+
+    public Axis2OneWayTargetInvoker(ServiceClient serviceClient,
+                                    QName wsdlOperationName,
+                                    Options options,
+                                    SOAPFactory soapFactory) {
+
+        super(serviceClient, wsdlOperationName, options, soapFactory);
+    }
+
+    public Object invokeTarget(final Object payload) throws 
InvocationTargetException {
+        try {
+            Object[] args = (Object[])payload;
+            OperationClient operationClient = createOperationClient(args);
+
+            operationClient.execute(true);
+
+            // REVIEW it seems ok to return null
+            return RESPONSE;
+        } catch (AxisFault e) {
+            throw new InvocationTargetException(e);
+        } catch (Throwable t) {
+            throw new Axis2BindingRunTimeException(t);
+        }
+    }
+
+    public Message invoke(Message msg) throws InvocationRuntimeException {
+        try {
+            Object resp = invokeTarget(msg.getBody());
+            msg.setBody(resp);
+        } catch (Throwable e) {
+            msg.setBodyWithFault(e);
+        }
+        return msg;
+    }
+}

Propchange: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2OneWayTargetInvoker.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Reference.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Reference.java?view=diff&rev=462960&r1=462959&r2=462960
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Reference.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Reference.java
 Wed Oct 11 14:28:18 2006
@@ -51,6 +51,7 @@
 
     private WebServicePortMetaData wsPortMetaData;
     private ServiceClient serviceClient;
+
     // private WorkContext workContext;
 
     @SuppressWarnings("unchecked")
@@ -75,7 +76,8 @@
     public TargetInvoker createTargetInvoker(ServiceContract contract, 
Operation operation) {
         Axis2TargetInvoker invoker;
         try {
-            invoker = createOperationInvoker(serviceClient, operation, 
wsPortMetaData, false);
+            boolean isOneWay = operation.isNonBlocking();
+            invoker = createOperationInvoker(serviceClient, operation, 
wsPortMetaData, false, isOneWay);
         } catch (AxisFault e) {
             throw new Axis2BindingRunTimeException(e);
         }
@@ -91,7 +93,8 @@
                 (Axis2AsyncTargetInvoker)createOperationInvoker(serviceClient,
                                                                 operation,
                                                                 wsPortMetaData,
-                                                                true);
+                                                                true,
+                                                                false);
             // FIXME: This makes the (BIG) assumption that there is only one
             // callback method
             // Relaxing this assumption, however, does not seem to be trivial,
@@ -143,7 +146,8 @@
     private Axis2TargetInvoker createOperationInvoker(ServiceClient 
serviceClient,
                                                       Operation m,
                                                       WebServicePortMetaData 
wsPortMetaData,
-                                                      boolean isAsync) throws 
AxisFault {
+                                                      boolean hasCallback,
+                                                      boolean isOneWay) throws 
AxisFault {
         SOAPFactory soapFactory = OMAbstractFactory.getSOAP11Factory();
         String portTypeNS = wsPortMetaData.getPortTypeName().getNamespaceURI();
 
@@ -161,16 +165,18 @@
         if (soapAction != null && soapAction.length() > 1) {
             options.setAction(soapAction);
         }
-        
-        options.setTimeOutInMilliSeconds(5* 60 *1000);
+
+        options.setTimeOutInMilliSeconds(5 * 60 * 1000);
 
         QName wsdlOperationQName = new QName(portTypeNS, wsdlOperationName);
 
         Axis2TargetInvoker invoker;
-        if (isAsync) {
+        if (hasCallback) {
             invoker =
                 new Axis2AsyncTargetInvoker(serviceClient, wsdlOperationQName, 
options, soapFactory,
                                             inboundWire);
+        } else if (isOneWay) {
+            invoker = new Axis2OneWayTargetInvoker(serviceClient, 
wsdlOperationQName, options, soapFactory);
         } else {
             invoker = new Axis2TargetInvoker(serviceClient, 
wsdlOperationQName, options, soapFactory);
         }

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=462960&r1=462959&r2=462960
==============================================================================
--- 
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
 Wed Oct 11 14:28:18 2006
@@ -75,7 +75,7 @@
     private WorkContext workContext;
 
     private Map<MessageId, InvocationContext> invCtxMap = new 
HashMap<MessageId, InvocationContext>();
-    
+
     private String serviceName;
 
     public Axis2Service(String theName,
@@ -137,7 +137,7 @@
 
         axisService.setName(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);
@@ -155,14 +155,21 @@
             org.apache.tuscany.spi.model.Operation<?> op = 
serviceContract.getOperations().get(operationName);
 
             MessageReceiver msgrec = null;
+            boolean opIsNonBlocking = op.isNonBlocking();
             if (serviceContract.getCallbackName() != null) {
                 msgrec = new Axis2ServiceInOutAsyncMessageReceiver(this, op, 
workContext);
+            } else if (opIsNonBlocking) {
+                msgrec = new Axis2ServiceInMessageReceiver(this, op);
             } else {
                 msgrec = new Axis2ServiceInOutSyncMessageReceiver(this, op);
             }
 
             AxisOperation axisOp = axisService.getOperation(operationQN);
-            
axisOp.setMessageExchangePattern(WSDL20_2004Constants.MEP_URI_IN_OUT);
+            if (opIsNonBlocking) {
+                
axisOp.setMessageExchangePattern(WSDL20_2004Constants.MEP_URI_IN_ONLY);
+            } else {
+                
axisOp.setMessageExchangePattern(WSDL20_2004Constants.MEP_URI_IN_OUT);
+            }
             axisOp.setMessageReceiver(msgrec);
         }
 
@@ -216,7 +223,7 @@
             return body;
         }
     }
-    
+
     protected Object getFromAddress() {
         return this.serviceName;
     }
@@ -267,7 +274,7 @@
         public org.apache.tuscany.spi.model.Operation<?> operation;
 
         public SOAPFactory soapFactory;
-        
+
         public CountDownLatch doneSignal;
 
         public InvocationContext(MessageContext messageCtx,

Added: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInMessageReceiver.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInMessageReceiver.java?view=auto&rev=462960
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInMessageReceiver.java
 (added)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInMessageReceiver.java
 Wed Oct 11 14:28:18 2006
@@ -0,0 +1,67 @@
+/*
+ * 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.tuscany.binding.axis2;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.receivers.AbstractInMessageReceiver;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+
+public class Axis2ServiceInMessageReceiver extends AbstractInMessageReceiver {
+
+    protected Operation<?> operation;
+
+    private Axis2Service axis2Service;
+
+    public Axis2ServiceInMessageReceiver(Axis2Service service, Operation<?> 
operation) {
+        this.axis2Service = service;
+        this.operation = operation;
+    }
+
+    public Axis2ServiceInMessageReceiver() {
+
+    }
+
+    @Override
+    public void invokeBusinessLogic(MessageContext inMC) throws AxisFault {
+        try {
+            OMElement requestOM = 
inMC.getEnvelope().getBody().getFirstElement();
+            Object[] args = new Object[] {requestOM};
+
+            axis2Service.invokeTarget(operation, args);
+
+        } catch (InvocationTargetException e) {
+            Throwable t = e.getCause();
+            if (t instanceof Exception) {
+                throw AxisFault.makeFault((Exception)t);
+            }
+            throw new InvocationRuntimeException(e);
+        } catch (Throwable t) {
+            if (t instanceof Exception) {
+                throw AxisFault.makeFault((Exception)t);
+            }
+            throw new Axis2BindingRunTimeException(t);
+        }
+
+    }
+}

Propchange: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInMessageReceiver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInMessageReceiver.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

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=462960&r1=462959&r2=462960
==============================================================================
--- 
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
 Wed Oct 11 14:28:18 2006
@@ -93,6 +93,8 @@
     <!--Note : You can ovride this for particular service by adding the same 
element with your requirement-->
     <messageReceivers>
         <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only";
+                         
class="org.apache.tuscany.binding.axis2.Axis2ServiceInMessageReceiver"/>
+        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only";
                          
class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
         <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out";
                          
class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>



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

Reply via email to