You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by de...@apache.org on 2005/02/17 11:01:16 UTC

svn commit: r154148 - in webservices/axis/trunk/java/dev/scratch/prototype2/src: java/org/apache/axis/ java/org/apache/axis/clientapi/ java/org/apache/axis/context/ java/org/apache/axis/transport/http/ test/org/apache/axis/clientapi/ test/org/apache/axis/engine/

Author: deepal
Date: Thu Feb 17 02:01:12 2005
New Revision: 154148

URL: http://svn.apache.org/viewcvs?view=rev&rev=154148
Log:
Changed Call API , to handle any transport , but WSDL is not there in M1 all the method can not be used. 

Added two new method to callback class too. to check and set status of the request

Modified:
    webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/Constants.java
    webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Call.java
    webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Callback.java
    webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Correlator.java
    webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Invoker.java
    webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/context/MessageContext.java
    webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/transport/http/HTTPTransportReciver.java
    webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/clientapi/TestSendReceiveAsync.java
    webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/engine/EchoRawXMLTest.java

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/Constants.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/Constants.java?view=diff&r1=154147&r2=154148
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/Constants.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/Constants.java Thu Feb 17 02:01:12 2005
@@ -32,5 +32,6 @@
 
     public static final String TRANSPORT_TCP = "tcp";
     public static final String TRANSPORT_HTTP = "http";
+    public static final String TRANSPORT_SMTP= "smtp";
 
 }

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Call.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Call.java?view=diff&r1=154147&r2=154148
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Call.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Call.java Thu Feb 17 02:01:12 2005
@@ -1,10 +1,5 @@
 package org.apache.axis.clientapi;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URL;
-import java.net.URLConnection;
-
 import org.apache.axis.Constants;
 import org.apache.axis.addressing.EndpointReference;
 import org.apache.axis.context.MessageContext;
@@ -20,6 +15,12 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.net.URL;
+import java.net.URLConnection;
+
 /**
  * Copyright 2001-2004 The Apache Software Foundation.
  * <p/>
@@ -42,13 +43,18 @@
     private EngineRegistry registry;
     protected Log log = LogFactory.getLog(getClass());
     private EndpointReference targetEPR;
-    private boolean blocked;
-    private String transport;
+    private boolean useSeparateListener;
+    //only used in SendReciveAync , to get the response
+    private String Listenertransport;
+    //the type of transport that the request should be send throgh
+    private String transport ;
     private String action;
 
     public Call() {
         //TODO look for the Client XML and creatre a Engine registy
         this.registry = new EngineRegistryImpl(new AxisGlobal());
+        Listenertransport = null;
+        transport= Constants.TRANSPORT_HTTP;
     }
 
     public void setTo(EndpointReference EPR) {
@@ -56,15 +62,31 @@
 
     }
 
+    public void setTransportType(String transport) throws AxisFault {
+        if((Constants.TRANSPORT_HTTP.equals(transport) || Constants.TRANSPORT_SMTP.equals(transport)
+                || Constants.TRANSPORT_TCP.equals(transport) )) {
+            this.transport = transport;
+        } else {
+            throw new AxisFault("Selected transport dose not suppot ( " + transport  + " )");
+        }
+    }
+
     /**
      * todo
      * inoder to have asyn support for tansport , it shoud call this method
      *
-     * @param transport
+     * @param Listenertransport
      */
-    public void setListenerTransport(String transport, boolean blocked) {
-        this.blocked = blocked;
-        this.transport = transport;
+    public void setListenerTransport(String Listenertransport, boolean useSeparateListener) throws AxisFault {
+        if((Constants.TRANSPORT_HTTP.equals(transport) || Constants.TRANSPORT_SMTP.equals(transport)
+                || Constants.TRANSPORT_TCP.equals(transport) )) {
+            this.Listenertransport = Listenertransport;
+            this.useSeparateListener = useSeparateListener;
+        }  else {
+            throw new AxisFault("Selected transport dose not suppot ( " + transport  + " )");
+        }
+
+
     }
 
     /**
@@ -98,8 +120,8 @@
             out = urlConnect.getOutputStream();
             msgctx.setProperty(MessageContext.TRANSPORT_WRITER, out);
             msgctx.setProperty(
-                MessageContext.TRANSPORT_TYPE,
-                Constants.TRANSPORT_HTTP);
+                    MessageContext.TRANSPORT_TYPE,
+                    Constants.TRANSPORT_HTTP);
             msgctx.setTo(targetEPR);
 
             engine.send(msgctx);
@@ -119,65 +141,83 @@
     }
 
     public void send(SOAPEnvelope envelope) throws AxisFault {
-        try {
-            final AxisEngine engine = new AxisEngine(registry);
-
-            MessageContext msgctx = new MessageContext(registry, null, null);
-            msgctx.setEnvelope(envelope);
-
-            msgctx.setProperty(
-                MessageContext.TRANSPORT_TYPE,
-                Constants.TRANSPORT_HTTP);
-            msgctx.setTo(targetEPR);
-            engine.send(msgctx);
-
-            //todo dose the 202 response  come throgh the same connection
-            //This is purely HTTP specific.
-            //Handle the HTTP 202 respose
-            MessageContext response =
+        if (Constants.TRANSPORT_SMTP.equals(transport)){
+            throw new AxisFault("This invocation support only for bi-directional transport");
+        } else {
+            MessageContext request = null;
+            try {
+                final AxisEngine engine = new AxisEngine(registry);
+                request = new MessageContext(registry, null, null);
+                request.setEnvelope(envelope);
+
+                request.setProperty(
+                        MessageContext.TRANSPORT_TYPE,
+                        transport);
+                request.setTo(targetEPR);
+                engine.send(request);
+
+                //todo dose the 202 response  come throgh the same connection
+                //This is purely HTTP specific.
+                //Handle the HTTP 202 respose
+                /* MessageContext response =
                 new MessageContext(
-                    registry,
-                    msgctx.getProperties(),
-                    msgctx.getSessionContext());
-
-            response.setServerSide(false);
-            response.setProperty(
-                MessageContext.TRANSPORT_TYPE,
-                Constants.TRANSPORT_HTTP);
-            TransportReciver reciver = TransportReciverLocator.locate(response);
-            reciver.invoke(response);
-            //Check whether we got a soap fault  , we should check this only if the transport is bi directioanl
-            //then throw an exception
-        } catch (IOException e) {
-            throw AxisFault.makeFault(e);
+                registry,
+                request.getProperties(),
+                request.getSessionContext());*/
+
+                request.setServerSide(false);
+                request.setProperty(
+                        MessageContext.TRANSPORT_TYPE,
+                        transport);
+                TransportReciver reciver = TransportReciverLocator.locate(request);
+                reciver.invoke(request);
+                if(request.getProperty(MessageContext.TRANSPORT_SUCCEED)!= null){
+                    throw new AxisFault("Sent failed");
+                } else if (request.getEnvelope().getBody().hasFault()){
+                    throw  new AxisFault(request.getEnvelope().getBody().getFault().getFaultString());
+                }
+            } catch (IOException e) {
+                throw AxisFault.makeFault(e);
+            }finally{
+                Writer writer = (Writer)request.getProperty(MessageContext.TRANSPORT_WRITER);
+                if(writer != null){
+                    try {
+                        writer.close();
+                    } catch (IOException e) {
+                        throw  new AxisFault(e.getMessage());
+                    }
+                }
+            }
         }
 
     }
 
     public SOAPEnvelope sendReceive(SOAPEnvelope envelope) throws AxisFault {
+        if(Constants.TRANSPORT_SMTP.equals(transport)){
+            throw new AxisFault("This invocation support only for bi-directional transport");
+        }
         try {
-
             AxisEngine engine = new AxisEngine(registry);
             MessageContext msgctx = new MessageContext(registry, null, null);
             msgctx.setEnvelope(envelope);
 
             msgctx.setProperty(
-                MessageContext.TRANSPORT_TYPE,
-            Constants.TRANSPORT_HTTP);
+                    MessageContext.TRANSPORT_TYPE,
+                    transport);
             msgctx.setTo(targetEPR);
 
             engine.send(msgctx);
 
             MessageContext response =
-                new MessageContext(
-                    registry,
-                    msgctx.getProperties(),
-                    msgctx.getSessionContext());
+                    new MessageContext(
+                            registry,
+                            msgctx.getProperties(),
+                            msgctx.getSessionContext());
 
             response.setServerSide(false);
             response.setProperty(
-                MessageContext.TRANSPORT_TYPE,
-            Constants.TRANSPORT_HTTP);
+                    MessageContext.TRANSPORT_TYPE,
+                    transport);
             TransportReciver reciver = TransportReciverLocator.locate(response);
             reciver.invoke(response);
             SOAPEnvelope resenvelope = response.getEnvelope();
@@ -197,22 +237,22 @@
      * @param callback
      */
     public void sendReceiveAsync(
-        SOAPEnvelope envelope,
-        final Callback callback)
-        throws AxisFault {
+            SOAPEnvelope envelope,
+            final Callback callback)
+            throws AxisFault {
         try {
-            // URL url =new URL(targetEPR.getAddress());
             AxisEngine engine = new AxisEngine(registry);
             final MessageContext msgctx =
-                new MessageContext(registry, null, null);
+                    new MessageContext(registry, null, null);
             msgctx.setEnvelope(envelope);
 
-            msgctx.setProperty(MessageContext.TRANSPORT_TYPE,Constants.TRANSPORT_HTTP);
+            msgctx.setProperty(MessageContext.TRANSPORT_TYPE,transport);
             msgctx.setTo(targetEPR);
 
-            // only the transport blocked , client dose not hang
-            if (blocked) {
-                //TODO This shoudld be taken from a pool of inovkers.
+            if (useSeparateListener) {
+                if(Constants.TRANSPORT_SMTP.equals(transport)){
+                    throw new AxisFault("This invocation support only for bi-directional transport");
+                }
                 Invoker invoker = new Invoker(msgctx, engine, registry, callback);
                 Thread th = new Thread(invoker);
                 th.start();

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Callback.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Callback.java?view=diff&r1=154147&r2=154148
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Callback.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Callback.java Thu Feb 17 02:01:12 2005
@@ -21,6 +21,7 @@
  */
 public interface Callback {
     void onComplete(AsyncResult result);
-
     void reportError(Exception e);
+    boolean isComplete();
+    void setComplete(boolean complete);
 }

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Correlator.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Correlator.java?view=diff&r1=154147&r2=154148
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Correlator.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Correlator.java Thu Feb 17 02:01:12 2005
@@ -30,8 +30,8 @@
         return instance;
     }
 
-    public void addCorrelationInfo(String msgid, Callback callbackobj) {
-        correlationHash.put(msgid, callbackobj);
+    public void addCorrelationInfo(String msgid, Callback callbackObj) {
+        correlationHash.put(msgid, callbackObj);
     }
 
     public Callback getCorrelationInfo(String MessageID) {

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Invoker.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Invoker.java?view=diff&r1=154147&r2=154148
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Invoker.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/clientapi/Invoker.java Thu Feb 17 02:01:12 2005
@@ -11,7 +11,6 @@
  * governing permissions and limitations under the License.
  */
 
-import org.apache.axis.Constants;
 import org.apache.axis.context.MessageContext;
 import org.apache.axis.engine.AxisEngine;
 import org.apache.axis.engine.EngineRegistry;
@@ -52,8 +51,8 @@
             MessageContext resMsgContext = new MessageContext(registry, reqMsgContext.getProperties(),reqMsgContext.getSessionContext());
 
             resMsgContext.setServerSide(false);
-            resMsgContext.setProperty(MessageContext.TRANSPORT_TYPE,
-            Constants.TRANSPORT_HTTP);
+//            resMsgContext.setProperty(MessageContext.TRANSPORT_TYPE,
+//            Constants.TRANSPORT_HTTP);
             TransportReciver reciver =
                     TransportReciverLocator.locate(resMsgContext);
             reciver.invoke(resMsgContext);
@@ -63,6 +62,7 @@
             resMsgContext.setMessageID(messageID);
             callback =
                     correlator.getCorrelationInfo(resMsgContext.getMessageID());
+            callback.setComplete(true);
             callback.onComplete(result);
 
         } catch (Exception e) {

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/context/MessageContext.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/context/MessageContext.java?view=diff&r1=154147&r2=154148
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/context/MessageContext.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/context/MessageContext.java Thu Feb 17 02:01:12 2005
@@ -51,6 +51,8 @@
     public static final String TRANSPORT_WRITER = "TRANSPORT_WRITER";
     public static final String TRANSPORT_READER = "TRANSPORT_READER";
     public static final String TRANSPORT_IN = "TRANSPORT_IN";
+
+    public static final String TRANSPORT_SUCCEED = "TRANSPORT_SUCCEED";
     //public static final String REQUEST_URL = "REQUEST_URL";
 
     private boolean processingFault = false;

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/transport/http/HTTPTransportReciver.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/transport/http/HTTPTransportReciver.java?view=diff&r1=154147&r2=154148
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/transport/http/HTTPTransportReciver.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/transport/http/HTTPTransportReciver.java Thu Feb 17 02:01:12 2005
@@ -63,7 +63,7 @@
 
             } else {
                 if (HTTPConstants.RESPONSE_ACK_CODE_VAL.equals(map.get(HTTPConstants.RESPONSE_CODE))) {
-                    //This is Ack
+                    msgContext.setProperty(MessageContext.TRANSPORT_SUCCEED,HTTPConstants.RESPONSE_ACK_CODE_VAL);
                     return;
                 }
                 //TODO take care of other HTTP Headers

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/clientapi/TestSendReceiveAsync.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/clientapi/TestSendReceiveAsync.java?view=diff&r1=154147&r2=154148
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/clientapi/TestSendReceiveAsync.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/clientapi/TestSendReceiveAsync.java Thu Feb 17 02:01:12 2005
@@ -100,6 +100,7 @@
         call.setListenerTransport("http", true);
 
         Callback callback = new Callback() {
+            private boolean complete;
             public void onComplete(AsyncResult result) {
 
                 try {
@@ -116,6 +117,14 @@
 
             public void reportError(Exception e) {
                 e.printStackTrace();
+            }
+
+            public boolean isComplete() {
+                return complete;
+            }
+
+            public void setComplete(boolean complete) {
+                this.complete = complete;
             }
         };
         call.sendReceiveAsync(envelope, callback);

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/engine/EchoRawXMLTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/engine/EchoRawXMLTest.java?view=diff&r1=154147&r2=154148
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/engine/EchoRawXMLTest.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/engine/EchoRawXMLTest.java Thu Feb 17 02:01:12 2005
@@ -130,6 +130,14 @@
                 e.printStackTrace();
                 finish = true;
             }
+
+            public boolean isComplete() {
+                return false;
+            }
+
+            public void setComplete(boolean complete) {
+                
+            }
         };
 
         call.sendReceiveAsync(reqEnv, callback);