Author: jochen
Date: Wed Jun 14 14:40:48 2006
New Revision: 414392

URL: http://svn.apache.org/viewvc?rev=414392&view=rev
Log: (empty)

Added:
    webservices/xmlrpc/trunk/src/site/apt/advanced.apt
Modified:
    webservices/xmlrpc/trunk/src/site/site.xml

Added: webservices/xmlrpc/trunk/src/site/apt/advanced.apt
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/src/site/apt/advanced.apt?rev=414392&view=auto
==============================================================================
--- webservices/xmlrpc/trunk/src/site/apt/advanced.apt (added)
+++ webservices/xmlrpc/trunk/src/site/apt/advanced.apt Wed Jun 14 14:40:48 2006
@@ -0,0 +1,83 @@
+           --------------------
+           Advanced Programming
+           --------------------
+
+  The Apache XML-RPC library offers some advanced techniques, which
+  are being described on this page.
+
+Dynamic proxies
+
+  Dynamic proxies are an extremely comfortable way of Client programming.
+  Basically, the idea is as follows: All handlers on the server side are
+  splitted into interface and implementation. The client library contains
+  the same interfaces. Now, rather than using the
+  {{{apidocs/org/apache/xmlrpc/client/XmlRpcClient.html}XmlRpcClient}}
+  directly,
+  the programmer creates an instance of
+  {{{apidocs/org/apache/xmlrpc/client/util/ClientFactory.html}ClientFactory}},
+  which is configured with an
+  {{{apidocs/org/apache/xmlrpc/client/XmlRpcClient.html}XmlRpcClient}}.
+
+  The {{{apidocs/org/apache/xmlrpc/client/util/ClientFactory.html}factory}}
+  can take an interface as input and returns an implementation,
+  which internally calls the server by using the
+  {{{apidocs/org/apache/xmlrpc/client/XmlRpcClient.html}XmlRpcClient}}.
+
+  Perhaps some code shows more than words. First of all, let's create
+  an interface.
+
+-----------------------------------------------------------------------------------
+    package com.foo;
+
+    public interface Adder {
+      public int add(int pNum1, int pNum2);
+    }
+-----------------------------------------------------------------------------------
+
+  The server contains an implementation:
+
+-----------------------------------------------------------------------------------
+    package com.foo;
+
+    public class AdderImpl implements Adder {
+      public int add(int pNum1, int pNum2) {
+        return pNum1 + pNum2;
+      }
+    }
+-----------------------------------------------------------------------------------
+
+  And here is how the client would use this:
+
+-----------------------------------------------------------------------------------
+    import com.foo.Adder;
+    import org.apache.xmlrpc.client.XmlRpcClient;
+    import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
+    import org.apache.xmlrpc.client.util.ClientFactory;
+
+    XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
+    config.setServerUrl("http://127.0.0.1:8080/xmlrpc";);
+    XmlRpcClient client = new XmlRpcClient();
+    client.setConfig(config);
+    ClientFactory factory = new ClientFactory(client);
+    Adder adder = (Adder) factory.newInstance(Adder.class);
+    int sum = adder.add(2, 4);
+-----------------------------------------------------------------------------------
+
+* Exception handling
+
+  Currently, exceptions are a problem: If the server throws an exception
+  (for example an IOException), then the client receives an XmlRpcException.
+  Consequently, the generated implementation will attempt to throw the
+  XmlRpcException.
+
+  Unfortunately, the method signature will of course contain an IOException,
+  but rarely an XmlRpcException. As the XmlRpcException cannot be thrown,
+  it is converted into an UndeclaredThrowableException.
+
+  This is no problem, if you are prepared for runtime exceptions by enclosing
+  your code with proper exception handlers. (Of course, the exception handlers
+  may be in a calling method.) Only if you want to catch the exception (for
+  example, because you expect an error at a certain point), then you need
+  to consider, which exception is being trapped: If the method exposes
+  XmlRpcException, then you'll need to catch the XmlRpcException.
+  Otherwise, it's UndeclaredThrowableException.

Modified: webservices/xmlrpc/trunk/src/site/site.xml
URL: 
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/src/site/site.xml?rev=414392&r1=414391&r2=414392&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/src/site/site.xml (original)
+++ webservices/xmlrpc/trunk/src/site/site.xml Wed Jun 14 14:40:48 2006
@@ -16,6 +16,7 @@
       <item name="Client Classes"      href="/client.html"/>
       <item name="Server Side XML-RPC" href="/server.html"/>
       <item name="Vendor Extensions"   href="/extensions.html"/>
+      <item name="Advanced Techniques" href="/advanced.html"/>
       <item name="XML-RPC Types"       href="/types.html"/>
       <item name="Download"            href="/download.html"/>
       <item name="FAQ"                 href="/faq.html"/>



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

Reply via email to