annotate apache-xmlrpc-3.1.3/docs/advanced.html @ 191:b2f0cd0cff6c default tip

Added tag Version-1.0 for changeset 79046b4e5990
author Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
date Tue, 29 Nov 2011 15:52:44 +0900
parents db5f735fd2b4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
151
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
2
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
3
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
4
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
5
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
6
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
7
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
8
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
9
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
10
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
11
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
12
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
13 <html xmlns="http://www.w3.org/1999/xhtml">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
14 <head>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
15 <title>ws-xmlrpc - Advanced Programming Topics</title>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
16 <style type="text/css" media="all">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
17 @import url("./css/maven-base.css");
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
18 @import url("./css/maven-theme.css");
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
19 @import url("./css/site.css");
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
20 </style>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
21 <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
22 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
23 </head>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
24 <body class="composite">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
25 <div id="banner">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
26 <a href="" id="bannerLeft">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
27
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
28 <img src="images/xmlrpc-logo.gif" alt="" />
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
29
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
30 </a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
31 <div class="clear">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
32 <hr/>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
33 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
34 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
35 <div id="breadcrumbs">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
36
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
37
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
38
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
39
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
40
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
41
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
42
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
43
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
44 <div class="xleft">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
45 Last Published: 2010-02-06
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
46 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
47 <div class="xright"> <a href="http://www.apache.org/" class="externalLink">Apache</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
48 |
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
49 <a href="../">Webservices</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
50 |
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
51 <a href="">XML-RPC</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
52
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
53
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
54
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
55
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
56
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
57
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
58
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
59
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
60 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
61 <div class="clear">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
62 <hr/>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
63 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
64 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
65 <div id="leftColumn">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
66 <div id="navcolumn">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
67
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
68
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
69
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
70
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
71
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
72
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
73
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
74
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
75 <h5>XML-RPC</h5>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
76 <ul>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
77
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
78 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
79 <a href="index.html">Overview</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
80 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
81
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
82 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
83 <a href="download.html">Download</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
84 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
85
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
86 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
87 <a href="changes-report.html">Changes</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
88 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
89
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
90 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
91 <a href="mail-lists.html">Mailing Lists</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
92 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
93
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
94 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
95 <a href="contributing.html">Contributing</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
96 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
97
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
98 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
99 <a href="xmlrpc2">XML-RPC 2</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
100 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
101
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
102 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
103 <a href="links.html">Links</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
104 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
105 </ul>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
106 <h5>Documentation</h5>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
107 <ul>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
108
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
109 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
110 <a href="client.html">Client Classes</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
111 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
112
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
113 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
114 <a href="server.html">Server Side XML-RPC</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
115 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
116
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
117 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
118 <a href="extensions.html">Vendor Extensions</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
119 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
120
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
121 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
122 <a href="ssl.html">SSL</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
123 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
124
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
125 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
126 <a href="introspection.html">Introspection</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
127 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
128
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
129 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
130 <strong>Advanced Techniques</strong>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
131 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
132
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
133 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
134 <a href="types.html">XML-RPC Types</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
135 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
136
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
137 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
138 <a href="faq.html">FAQ</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
139 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
140
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
141 <li class="none">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
142 <a href="apidocs/index.html">Javadocs</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
143 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
144 </ul>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
145 <h5>Project Documentation</h5>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
146 <ul>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
147
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
148
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
149
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
150
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
151
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
152
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
153
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
154
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
155
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
156
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
157
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
158
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
159
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
160
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
161
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
162
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
163
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
164
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
165
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
166
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
167
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
168
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
169
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
170
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
171
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
172
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
173
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
174 <li class="collapsed">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
175 <a href="project-info.html">Project Information</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
176 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
177
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
178
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
179
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
180
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
181
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
182
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
183
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
184
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
185
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
186 <li class="collapsed">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
187 <a href="project-reports.html">Project Reports</a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
188 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
189 </ul>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
190 <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
191 <img alt="Built by Maven" src="./images/logos/maven-feather.png"></img>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
192 </a>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
193
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
194
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
195
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
196
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
197
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
198
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
199
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
200
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
201 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
202 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
203 <div id="bodyColumn">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
204 <div id="contentBox">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
205 <p>This page describes some advanced topics.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
206 <div class="section"><h2>Dynamic proxies</h2>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
207 <p>Dynamic proxies are an extremely comfortable way of Client programming. Basically, the idea is as follows: All request processors on the server side are splitted into interface and implementation. The interfaces are shared between client and server, typically within some common jar file. Now, rather than using the <a href="apidocs/org/apache/xmlrpc/client/XmlRpcClient.html">XmlRpcClient</a> directly, the programmer creates an instance of <a href="apidocs/org/apache/xmlrpc/client/util/ClientFactory.html">ClientFactory</a>, which is configured with an <a href="apidocs/org/apache/xmlrpc/client/XmlRpcClient.html">XmlRpcClient</a>.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
208 <p>The <a href="apidocs/org/apache/xmlrpc/client/util/ClientFactory.html">factory</a> can take an interface as input and returns an implementation, which internally calls the server by using the <a href="apidocs/org/apache/xmlrpc/client/XmlRpcClient.html">XmlRpcClient</a>.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
209 <p>Perhaps some code shows more than words. First of all, let's create a request processor interface.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
210 <div class="source"><pre> package com.foo;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
211
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
212 public interface Adder {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
213 public int add(int pNum1, int pNum2);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
214 } </pre>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
215 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
216 <p>The server contains the request processors implementation:</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
217 <div class="source"><pre> package com.foo;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
218
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
219 public class AdderImpl implements Adder {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
220 public int add(int pNum1, int pNum2) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
221 return pNum1 + pNum2;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
222 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
223 } </pre>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
224 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
225 <p>And here is how the client would use this:</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
226 <div class="source"><pre> import com.foo.Adder;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
227 import java.net.URL;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
228 import org.apache.xmlrpc.client.XmlRpcClient;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
229 import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
230 import org.apache.xmlrpc.client.util.ClientFactory;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
231
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
232 XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
233 config.setServerURL(new URL(&quot;http://127.0.0.1:8080/xmlrpc&quot;));
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
234 XmlRpcClient client = new XmlRpcClient();
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
235 client.setConfig(config);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
236 ClientFactory factory = new ClientFactory(client);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
237 Adder adder = (Adder) factory.newInstance(Adder.class);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
238 int sum = adder.add(2, 4); </pre>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
239 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
240 <div class="section"><h3>Exception handling</h3>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
241 <p>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.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
242 <p>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.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
243 <p>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.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
244 <p>It is recommended to use the property enabledForExceptions. If this property is set, then the server will attempt to convert the exception into a byte array, which is transmitted to the client. The client will be able to convert the byte array back into an exception and throw that, as if it came right out of the client. Note, that this approach may cause security and privacy issues, because the serialized exception may, in theory, contain arbitrary objects.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
245 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
246 <div class="section"><h3>Cookie handling</h3>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
247 <p>Cookie has not yet been generalized. In other words, it depends on the transport.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
248 <ul><li>The XmlRpcLiteHttpTransport doesn't have support for cookies. * The XmlRpcSunHttpTransport requires hand written code for setting and getting the cookies or using a cookie library. (The latter is recommended, of course.) In either way, you've got to use a custom transport and overwrite the methods newURLConnection(URL), initHttpHeaders(XmlRpcRequest), and close():<div class="source"><pre> import java.net.URLConnection;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
249 import org.apache.xmlrpc.client.XmlRpcClient;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
250 import org.apache.xmlrpc.client.XmlRpcSunHttpTransport;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
251 import org.apache.xmlrpc.client.XmlRpcTransport;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
252 import org.apache.xmlrpc.client.XmlRpcTransportFactory;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
253
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
254 final XmlRpcClient client = new XmlRpcClient();
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
255 XmlRpcTransportFactory factory = new XmlRpcTransportFactory(){
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
256 public XmlRpcTransport getTransport(){
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
257 private URLConnection conn;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
258 protected URLConnection newURLConnection(URL pURL) throws IOException {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
259 conn = super.newURLConnection(pURL);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
260 return conn;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
261 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
262 protected void initHttpHeaders(XmlRpcRequest pRequest) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
263 super.initHttpHeaders(pRequest);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
264 setCookies(conn);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
265 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
266 protected void close() throws XmlRpcClientException {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
267 getCookies(conn);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
268 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
269 private void setCookies(URLConnection pConn) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
270 // Implement me ...
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
271 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
272 private void getCookies(URLConnection pConn) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
273 // Implement me ...
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
274 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
275 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
276 };
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
277 client.setTransportFactory(factory); </pre>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
278 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
279 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
280 <li>The XmlRpcCommonsHttpTransport requires that the HttpClient is being reused. (By default, a new HttpClient is created for any connection.) To reuse the HttpClient, set it on the transport factory:<div class="source"><pre> import org.apache.commons.httpclient.HttpClient;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
281 import org.apache.commons.httpclient.HttpState;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
282 import org.apache.xmlrpc.client.XmlRpcClient;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
283 import org.apache.xmlrpc.client.XmlRpcCommonsTransport;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
284 import org.apache.xmlrpc.client.XmlRpcCommonsTransportFactory;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
285
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
286 final XmlRpcClient client = new XmlRpcClient();
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
287 final HttpClient httpClient = new HttpClient();
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
288 final XmlRpcCommonsTransportFactory factory = new XmlRpcCommonsTransportFactory(client);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
289 factory.setHttpClient(httpClient);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
290 client.setTransportFactory(factory);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
291 final HttpState httpState = client.getState(); </pre>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
292 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
293 <p>Cookies may now be read or set on the httpState object.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
294 <p>Note, that this means losing the XmlRpcClients multithreading abilities! The factory above is obviously bound to the HttpClient, which must be bound to a thread. If you need to set cookies initially, overwrite the transport method initHttpHeaders(XmlRpcRequest) as well.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
295 </li>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
296 </ul>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
297 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
298 <div class="section"><h3>Custom data types</h3>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
299 <p>Apache XML-RPC was built with extensibility in mind. In particular, it was written to support custom data types.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
300 <p>The data type handling is completely left to the <a href="apidocs/org/apache/xmlrpc/common/TypeFactory.html">TypeFactory</a>. In other words, adding support for custom data types is as simple as providing your own type factory. This is typically done by subclassing <a href="apidocs/org/apache/xmlrpc/common/TypeFactoryImpl.html">TypeFactoryImpl</a>.</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
301 <p>We'll illustrate the concept by creating a type factory, which uses a non-standard date format for transmitting date values. First of all, we've got to implement the subclass:</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
302 <div class="source"><pre> import java.text.DateFormat;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
303 import java.text.SimpleDateFormat;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
304 import org.apache.xmlrpc.common.TypeFactoryImpl;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
305 import org.apache.xmlrpc.common.XmlRpcController;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
306 import org.apache.xmlrpc.parser.DateParser;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
307 import org.apache.xmlrpc.parser.TypeParser;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
308 import org.apache.xmlrpc.serializer.DateSerializer;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
309 import org.apache.xmlrpc.serializer.TypeSerializer;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
310 import org.apache.ws.commons.util.NamespaceContextImpl;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
311
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
312 public class MyTypeFactory extends TypeFactoryImpl {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
313 public MyTypeFactory(XmlRpcController pController) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
314 super(pController);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
315 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
316
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
317 private DateFormat newFormat() {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
318 return new SimpleDateFormat(&quot;yyyy-MM-dd HH:mm:ss.SSS&quot;);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
319 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
320
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
321 public TypeParser getParser(XmlRpcStreamConfig pConfig, NamespaceContextImpl pContext, String pURI, String pLocalName) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
322 if (DateSerializer.DATE_TAG.equals(pLocalName)) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
323 return new DateParser(pFormat);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
324 } else {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
325 return super.getParser(pConfig, pContext, pURI, pLocalName);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
326 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
327 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
328
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
329 public TypeSerializer getSerializer(XmlRpcStreamConfig pConfig, Object pObject) throws SAXException {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
330 if (pObject instanceof Date) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
331 return new DateSerializer(newFormat());
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
332 } else {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
333 return super.getSerializer(pConfig, pObject);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
334 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
335 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
336 } </pre>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
337 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
338 <p>On the client side, we've got to tell the <a href="apidocs/org/apache/xmlrpc/client/XmlRpcClient.html">XmlRpcClient</a> to use the new factory. That's as simple as typing</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
339 <div class="source"><pre> XmlRpcClient client = new XmlRpcClient();
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
340 client.setTypeFactory(new MyTypeFactory()); </pre>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
341 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
342 <p>Things are a little bit more difficult on the server side. Basically all we need to do is setting the type factory on the <a href="apidocs/org/apache/xmlrpc/server/XmlRpcServer.html">XmlRpcServer</a>. The question is, how to obtain the server object. That depends on the environment. If you are using the XmlRpcServlet, then you've got to derive a subclass:</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
343 <div class="source"><pre> import org.apache.xmlrpc.webserver.XmlRpcServletServer;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
344 import org.apache.xmlrpc.webserver.XmlRpcServlet;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
345
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
346 public class MyXmlRpcServlet extends XmlRpcServlet {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
347 protected XmlRpcServletServer newXmlRpcServer(ServletConfig pConfig) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
348 XmlRpcServletServer server = super.newXmlRpcServer(pConfig);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
349 server.setTypeFactory(new MyTypeFactory(server));
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
350 return server;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
351 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
352 } </pre>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
353 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
354 <p>And, if you are using the <a href="apidocs/org/apache/xmlrpc/webserver/WebServer.html">WebServer</a>, you've got to override a similar method:</p>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
355 <div class="source"><pre> import java.net.InetAddress;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
356 import org.apache.xmlrpc.server.XmlRpcStreamServer;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
357 import org.apache.xmlrpc.webserver.WebServer;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
358
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
359 public class MyWebServer extends WebServer {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
360 public MyWebServer(int pPort) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
361 super(pPort);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
362 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
363
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
364 public MyWebServer(int pPort, InetAddress pAddr) {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
365 super(pPort, pAddr);
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
366 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
367
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
368 protected XmlRpcStreamServer newXmlRpcStreamServer() {
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
369 XmlRpcStreamServer server = new ConnectionServer();
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
370 server.setTypeFactory(new MyTypeFactory());
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
371 return server;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
372 }
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
373 } </pre>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
374 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
375 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
376 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
377
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
378 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
379 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
380 <div class="clear">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
381 <hr/>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
382 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
383 <div id="footer">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
384 <div class="xright">&#169;
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
385 2001-2010
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
386
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
387 The Apache Software Foundation
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
388
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
389
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
390
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
391
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
392
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
393
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
394
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
395
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
396 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
397 <div class="clear">
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
398 <hr/>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
399 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
400 </div>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
401 </body>
db5f735fd2b4 add xml-rpc.jar
e085711
parents:
diff changeset
402 </html>