Author: jochen
Date: Fri May 12 14:22:12 2006
New Revision: 405878

URL: http://svn.apache.org/viewcvs?rev=405878&view=rev
Log:
Added the TimingOutCallback, which allows to abort a request, if the server 
doesn't reply within a given time.

Added:
    
webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/java/org/apache/xmlrpc/TimingOutCallback.java
    
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/TimingOutCallback.java
Modified:
    webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/changes.xml
    webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml
    webservices/xmlrpc/trunk/src/changes/changes.xml
    webservices/xmlrpc/trunk/src/site/fml/faq.fml

Modified: webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/changes.xml
URL: 
http://svn.apache.org/viewcvs/webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/changes.xml?rev=405878&r1=405877&r2=405878&view=diff
==============================================================================
--- webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/changes.xml (original)
+++ webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/changes.xml Fri May 12 
14:22:12 2006
@@ -17,6 +17,11 @@
         Made XMLWriter public and added methods for supplying a custom
         XMLWriter.
       </action> 
+      <action dev="jochen" type="enhancement" due-to="Ken Weiner"
+          due-to-email="[EMAIL PROTECTED]" issue="XMLRPC-56">
+        Added the TimingOutCallback, which allows to abort a request,
+        if the server doesn't reply within a given time.
+      </action>
     </release>
     <release version="2.0.1" date="28-Dec-2005">
       <action dev="jochen" type="fix" issue="XMLRPC-68"

Added: 
webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/java/org/apache/xmlrpc/TimingOutCallback.java
URL: 
http://svn.apache.org/viewcvs/webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/java/org/apache/xmlrpc/TimingOutCallback.java?rev=405878&view=auto
==============================================================================
--- 
webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/java/org/apache/xmlrpc/TimingOutCallback.java
 (added)
+++ 
webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/java/org/apache/xmlrpc/TimingOutCallback.java
 Fri May 12 14:22:12 2006
@@ -0,0 +1,71 @@
+package org.apache.xmlrpc;
+
+import java.net.URL;
+
+
+/**
+ * <p>A callback object that can wait up to a specified amount
+ * of time for the XML-RPC response. Suggested use is as follows:
+ * </p>
+ * <pre>
+ *   // Wait for 10 seconds.
+ *   TimingOutCallback callback = new TimingOutCallback(10 * 1000);
+ *   XmlRpcClient client = new XmlRpcClient(url);
+ *   client.executeAsync(methodName, aVector, callback);
+ *   try {
+ *       return callback.waitForResponse();
+ *   } catch (TimeoutException e) {
+ *       System.out.println("No response from server.");
+ *   } catch (Exception e) {
+ *       System.out.println("Server returned an error message.");
+ *   }
+ * </pre>
+ */
+public class TimingOutCallback implements AsyncCallback {
+    public static class TimeoutException extends XmlRpcException {
+        private static final long serialVersionUID = 4875266372372105081L;
+
+        public TimeoutException(int code, String message) {
+            super(code, message);
+        }
+    }
+
+    private final long timeout;
+    private Object result;
+    private Exception exception;
+    private boolean responseSeen;
+
+    /** Waits the specified number of milliseconds for a response.
+     */
+    public TimingOutCallback(long pTimeout) {
+        timeout = pTimeout;
+    }
+
+    public synchronized void handleError(Exception pException, URL pUrl, 
String pMethod) {
+        responseSeen = true;
+        exception = pException;
+        notify();
+    }
+
+    public synchronized void handleResult(Object pResult, URL pUrl, String 
pMethod) {
+        responseSeen = true;
+        result = pResult;
+        notify();
+    }
+
+    /** Called to wait for the response.
+     * @throws InterruptedException The thread was interrupted.
+     * @throws TimeoutException No response was received after waiting the 
specified time.
+     * @throws Exception An error was returned by the server.
+     */
+    public synchronized Object waitForResponse() throws Exception {
+        wait(timeout);
+        if (!responseSeen) {
+            throw new TimeoutException(0, "No response after waiting for " + 
timeout + " milliseconds.");
+        }
+        if (exception != null) {
+            throw exception;
+        }
+        return result;
+    }
+}

Modified: webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml
URL: 
http://svn.apache.org/viewcvs/webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml?rev=405878&r1=405877&r2=405878&view=diff
==============================================================================
--- webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml 
(original)
+++ webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml Fri May 
12 14:22:12 2006
@@ -1,6 +1,6 @@
 <faqs title="XML-RPC Version 2 FAQ">
   <part id="Customizing the request">
-    <faq>
+    <faq id="basic_authentication">
       <question>How do I do basic authentication? The method 
XmlRpcClient.setBasicAuthentication
         is deprecated?</question>
       <answer>
@@ -26,10 +26,31 @@
         ]]></source>
       </answer>
     </faq>
+
+    <faq id="timeout_callback">
+      <question>Is it possible to specify a timeout, after which the
+        client stops waiting for the servers response?</question>
+      <answer>
+        <p>Yes, use the class TimingOutCallback.</p>
+        <source><![CDATA[
+    // Wait for 10 seconds.
+    TimingOutCallback callback = new TimingOutCallback(10 * 1000);
+    XmlRpcClient client = new XmlRpcClient(url);
+    client.executeAsync(methodName, aVector, callback);
+    try {
+        return callback.waitForResponse();
+    } catch (TimeoutException e) {
+        System.out.println("No response from server.");
+    } catch (Exception e) {
+        System.out.println("Server returned an error message.");
+    }
+        ]]></source>
+      </answer>
+    </faq>
   </part>
 
   <part id="Customizing Output">
-    <faq>
+    <faq id="string_tags">
       <question>How do I get a client, which uses "string" tags?</question>
       <answer>
         <p>

Added: 
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/TimingOutCallback.java
URL: 
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/TimingOutCallback.java?rev=405878&view=auto
==============================================================================
--- 
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/TimingOutCallback.java
 (added)
+++ 
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/TimingOutCallback.java
 Fri May 12 14:22:12 2006
@@ -0,0 +1,77 @@
+package org.apache.xmlrpc.client;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.XmlRpcRequest;
+
+
+/**
+ * <p>A callback object that can wait up to a specified amount
+ * of time for the XML-RPC response. Suggested use is as follows:
+ * </p>
+ * <pre>
+ *   // Wait for 10 seconds.
+ *   TimingOutCallback callback = new TimingOutCallback(10 * 1000);
+ *   XmlRpcClient client = new XmlRpcClient(url);
+ *   client.executeAsync(methodName, aVector, callback);
+ *   try {
+ *       return callback.waitForResponse();
+ *   } catch (TimeoutException e) {
+ *       System.out.println("No response from server.");
+ *   } catch (Exception e) {
+ *       System.out.println("Server returned an error message.");
+ *   }
+ * </pre>
+ */
+public class TimingOutCallback implements AsyncCallback {
+    /** This exception is thrown, if the request times out.
+     */
+    public static class TimeoutException extends XmlRpcException {
+        private static final long serialVersionUID = 4875266372372105081L;
+
+        /** Creates a new instance with the given error code and
+         * error message.
+         */
+        public TimeoutException(int pCode, String message) {
+            super(pCode, message);
+        }
+    }
+
+    private final long timeout;
+    private Object result;
+    private Throwable error;
+    private boolean responseSeen;
+
+    /** Waits the specified number of milliseconds for a response.
+     */
+    public TimingOutCallback(long pTimeout) {
+        timeout = pTimeout;
+    }
+
+    /** Called to wait for the response.
+     * @throws InterruptedException The thread was interrupted.
+     * @throws TimeoutException No response was received after waiting the 
specified time.
+     * @throws Throwable An error was returned by the server.
+     */
+    public synchronized Object waitForResponse() throws Throwable {
+        wait(timeout);
+        if (!responseSeen) {
+            throw new TimeoutException(0, "No response after waiting for " + 
timeout + " milliseconds.");
+        }
+        if (error != null) {
+            throw error;
+        }
+        return result;
+    }
+
+    public synchronized void handleError(XmlRpcRequest pRequest, Throwable 
pError) {
+        responseSeen = true;
+        error = pError;
+        notify();
+    }
+
+    public void handleResult(XmlRpcRequest pRequest, Object pResult) {
+        responseSeen = true;
+        result = pResult;
+        notify();
+    }
+}

Modified: webservices/xmlrpc/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/src/changes/changes.xml?rev=405878&r1=405877&r2=405878&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/src/changes/changes.xml (original)
+++ webservices/xmlrpc/trunk/src/changes/changes.xml Fri May 12 14:22:12 2006
@@ -53,6 +53,11 @@
           due-to-email="[EMAIL PROTECTED]">
         Added support for initializable handlers.
       </action>
+      <action dev="jochen" type="enhancement" due-to="Ken Weiner"
+          due-to-email="[EMAIL PROTECTED]" issue="XMLRPC-56">
+        Added the TimingOutCallback, which allows to abort a request,
+        if the server doesn't reply within a given time.
+      </action>
     </release>
     <release version="3.0a1" date="17-Feb-2005">
       <action dev="jochen" type="enhancement">

Modified: webservices/xmlrpc/trunk/src/site/fml/faq.fml
URL: 
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/src/site/fml/faq.fml?rev=405878&r1=405877&r2=405878&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/src/site/fml/faq.fml (original)
+++ webservices/xmlrpc/trunk/src/site/fml/faq.fml Fri May 12 14:22:12 2006
@@ -32,6 +32,9 @@
           <li>Compressing the request doesn't mean that the response
             will also be compressed. You need to request response
             compression to achieve that.</li>
+          <li>Additionally, be aware of the following: Compression
+            depends on HTTP/1.1 features. In particular, you must
+            not use the LiteHttpTransport.</li>
         </ul>
       </answer>
     </faq>
@@ -49,7 +52,31 @@
             </li>
           <li>However, requesting compression doesn't necessarily mean,
             that the response *is* compressed. It depends on the server.</li>
+          <li>Additionally, be aware of the following: Compression
+            depends on HTTP/1.1 features. In particular, you must
+            not use the LiteHttpTransport.</li>
         </ul>
+      </answer>
+    </faq>
+
+    <faq id="timeout_callback">
+      <question>Is it possible to specify a timeout, after which the
+        client stops waiting for the servers response?</question>
+      <answer>
+        <p>Yes, use the class TimingOutCallback.</p>
+        <source><![CDATA[
+    // Wait for 10 seconds.
+    TimingOutCallback callback = new TimingOutCallback(10 * 1000);
+    XmlRpcClient client = new XmlRpcClient(url);
+    client.executeAsync(methodName, params, callback);
+    try {
+        return callback.waitForResponse();
+    } catch (TimeoutException e) {
+        System.out.println("No response from server.");
+    } catch (Exception e) {
+        System.out.println("Server returned an error message.");
+    }
+        ]]></source>
       </answer>
     </faq>
   </part>


Reply via email to