Sophie

Sophie

distrib > Mandriva > 9.1 > ppc > by-pkgid > cdf3204072325f4a06a79f420e013079 > files > 128

howto-text-ja-9.0-1mdk.noarch.rpm

XML-RPC HOWTO

Eric Kidd

Source Builders

eric.kidd@pobox.com

And Other Contributors

–ì–{_ˆê - “ú–{Œê–|–ó

            hng@ps.ksky.ne.jp
          

Copyright (C) 2001 by Eric Kidd

0.8.0, 2001-04-12

Revision History                                                       
Revision 0.8.0                           2001-04-12                    
Updated section on common interfaces. Added pointer to XML-RPC.Net     
information.                                                           
Revision 0.7.0                           2001-04-03                    
Added section on C++ proxy classes.                                    
Revision 0.6.0                           2001-02-02                    
Added sections on Ruby, K and common interfaces.                       
Revision 0.5.0                           2001-01-23                    
Initial version.                                                       

—lX‚ÈŒ¾Œê‚ŃNƒ‰ƒCƒAƒ“ƒg‚¨‚æ‚уT[ƒo‚ðŽÀ‘•‚·‚邽‚ß‚Ì XML-RPC ‚ÌŽg—p•û–@
‚ðq‚ׂ܂·B—á‘è‚̃vƒƒOƒ‰ƒ€‚Í Perl, Python, C, C++, Java, PHP ‚¨‚æ‚Ñ‘¼
‚ÌŒ¾Œê‚ÅŽ¦‚µ‚Ä‚¢‚Ü‚·BZope ‚â KDE 2.0 ‚ɂ‚¢‚Ä‚àˆµ‚Á‚Ä‚¢‚Ü‚·BXML-RPC
‚̃Tƒ|[ƒg‚Í‚·‚ׂẴIƒyƒŒ[ƒeƒBƒ“ƒOƒVƒXƒeƒ€‚Å—˜—p‚Å‚«‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

Table of Contents
1. Legal Notice
2. XML-RPC ‚Ƃ́H
   
    2.1. ‚ǂ̂悤‚É“®ì‚·‚é‚Ì‚©
    2.2. ƒTƒ|[ƒg‚³‚ê‚éƒf[ƒ^‚ÌŽí•Ê
    2.3. XML-RPC ‚Ì—ðŽj
   
3. XML-RPC ‘Α¼‚̃vƒƒgƒRƒ‹
   
    3.1. XML-RPC ‘Î CORBA
    3.2. XML-RPC ‘Î DCOM
    3.3. XML-RPC ‘Î SOAP
   
4. ˆê”Ê“I‚È XML-RPC ƒCƒ“ƒ^[ƒtƒF[ƒX
   
    4.1. ƒCƒ“ƒgƒƒXƒyƒNƒVƒ‡ƒ“ - ƒT[ƒo‚Ì API ‚ðŒ@‚èo‚·
    4.2. Boxcarring - “¯Žž‚É•¡”‚Ì—v‹‚ð‘—‚é
   
5. API ‚ÌŽ–—á - sumAndDifference
6. Perl ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û
   
    6.1. Perl ƒNƒ‰ƒCƒAƒ“ƒg
    6.2. “Æ—§Œ^ Perl ƒT[ƒo
    6.3. CGI ƒx[ƒX‚Ì Perl ƒT[ƒo
   
7. Python ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û
   
    7.1. Python ƒNƒ‰ƒCƒAƒ“ƒg
   
8. C ‚¨‚æ‚Ñ C++ ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û
   
    8.1. C ƒNƒ‰ƒCƒAƒ“ƒg
    8.2. C++ ƒNƒ‰ƒCƒAƒ“ƒg
    8.3. ‘ã‘ÖƒNƒ‰ƒX (Proxy Class) ‚Å‚Ì C++ ƒNƒ‰ƒCƒAƒ“ƒg
    8.4. CGI ƒx[ƒX‚Ì C ƒT[ƒo
   
9. Java ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û
   
    9.1. Java ƒNƒ‰ƒCƒAƒ“ƒg
    9.2. “Æ—§Œ^ Java ƒT[ƒo
   
10. PHP ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û
   
    10.1. PHP ƒNƒ‰ƒCƒAƒ“ƒg
    10.2. PHP ƒT[ƒo
   
11. Microsoft .NET ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û
12. Ruby ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û
   
    12.1. Ruby ƒNƒ‰ƒCƒAƒ“ƒg
    12.2. Ruby ƒT[ƒo
   
13. “ÆŽ©“I‚ÈŒ¾Œê‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û
   
    13.1. K ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û
   
14. XML-RPC ƒTƒ|[ƒg‚ª‘g‚ݍž‚܂ꂽƒAƒvƒŠƒP[ƒVƒ‡ƒ“
   
    14.1. Zope
    14.2. KDE 2.0
   
15. ‚±‚Ì•¶‘‚ɂ‚¢‚Ä
   
    15.1. ‚±‚Ì•¶‘‚̐V”Å
    15.2. XML-RPC HOWTO ‚ÌŠñeŽÒ
    15.3. ‘¼‚̏î•ñ‚Ì’ño
   
16. “ú–{Œê–ó‚ɂ‚¢‚Ä

1. Legal Notice

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License <http://
www.fsf.org/copyleft/fdl.html>, Version 1.1 or any later version
published by the Free Software Foundation with no Invariant Sections,
no Front-Cover Texts, and no Back-Cover Texts. You may obtain a copy of
the GNU Free Documentation License from the Free Software Foundation by
visiting their Web site <http://www.fsf.org/> or by writing to: Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.

This manual contains short example programs ("the Software").
Permission is hereby granted, free of charge, to any person obtaining a
copy of the Software, to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so,
subject to the following condition:

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

2. XML-RPC ‚Ƃ́H

XML-RPC <http://www.xmlrpc.com/> ‚Í HTTP ã‚ŃŠƒ‚[ƒgŽè‘±‚«ŒÄ‚яo‚µ‚ðs
‚¤‚½‚ß‚ÌŠÈ’P‚ÅŽèŒy‚È•û–@‚Å‚·BPerl, Java, Python, C, C++, PHP ‚⑽‚­‚Ì
‘¼‚̃vƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚ÅŽg—p‚Å‚«‚Ü‚·BUnix ‚Æ Windows, Macintosh ã‚Å—˜
—p‰Â”\‚Å‚·B

Perl ‚ŏ‘‚©‚ꂽ’Z‚¢ XML-RPC ƒNƒ‰ƒCƒAƒ“ƒg‚ðŽ¦‚µ‚Ü‚· (Ken MacLeod ‚Ì 
Frontier::Client <http://bitsko.slc.ut.us/~ken/xml-rpc/> ‚ðŽg—p‚µ‚Ü‚·)
B

use Frontier::Client;                                                     
$server = Frontier::Client->new(url => 'http://betty.userland.com/RPC2'); 
$name = $server->call('examples.getStateName', 41);                       
print "$name\n";                                                          

ŽÀs‚·‚é‚ƁA‚±‚̃vƒƒOƒ‰ƒ€‚̓Šƒ‚[ƒg‚̃T[ƒo‚ɐڑ±‚µAB–¼‚𓾂āA‚»‚ê
‚ð•\Ž¦‚µ‚Ü‚· (‚±‚Ì—á‚̏B”ԍ† 41 ‚Í South Dakota ‚Ì‚Í‚¸‚Å‚·)B

Python ‚Å‚Ì“¯‚¶ƒvƒƒOƒ‰ƒ€‚Å‚· (‚±‚ê‚Å‚Í Fredrik Lundh ‚Ì xmlrpclib
<http://www.pythonware.com/products/xmlrpc/> ‚ðŽg‚¢‚Ü‚·)B

python> import xmlrpclib                                               
python> server = xmlrpclib.Server("http://betty.userland.com/RPC2")    
python> server.examples.getStateName(41)                               
'South Dakota'                                                         

ˆÈ~‚̏͂ł́A—lX‚ÈŒ¾Œê‚Å XML-RPC ƒNƒ‰ƒCƒAƒ“ƒg‚¨‚æ‚уT[ƒo‚̏‘‚«•û‚ðŠw
‚Ñ‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

2.1. ‚ǂ̂悤‚É“®ì‚·‚é‚Ì‚©

XML-RPC ‚Í Dave Winer ‚ÌŒöŽ®Žd—l‘ <http://www.xmlrpc.com/spec>‚ŏڍׂÉ
à–¾‚³‚ê‚Ä‚¢‚Ü‚·B‹»–¡‚ª‚ ‚é‚È‚çA¥”ñ‚²——‚É‚È‚Á‚Ä‚­‚¾‚³‚¢BŠÈŒ‰‚Å–¾‰ð
‚È•¶‘‚Å‚·B

’ʐM‚·‚éã‚ŁAXML-RPC ‚Ì’l‚Í XML ‚ɃGƒ“ƒR[ƒh‚³‚ê‚Ü‚· -

  sample.sumAndDifference                                              
                                                                       
    5                                                                  
    3                                                                  
                                                                       

ã‹L‚͏璷‚Å‚·‚ªAŠÈ’P‚Ɉ³k‚Å‚«‚Ü‚·B‚Ü‚½A—\‘zˆÈã‚É‘¬‚¢‚Å‚· - Rick
Blair ‚Ì‘ª’è‚É‚æ‚ê‚΁AHannes Wallnfer ‚Ì Java ‚Å‚ÌŽÀ‘•‚ðŽg‚¤‚Æ XML-RPC
ŒÄ‚яo‚µ‚̉ž“šŽžŠÔ‚Í 3 ƒ~ƒŠ•b‚Å‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

2.2. ƒTƒ|[ƒg‚³‚ê‚éƒf[ƒ^‚ÌŽí•Ê

XML-RPC ‚͈ȉº‚̃f[ƒ^‚ÌŽí•Ê‚ðƒTƒ|[ƒg‚µ‚Ü‚·B

int
   
    •„†•t 32 ƒrƒbƒg®”
   
string
   
    ASCII •¶Žš—ñ‚Å‹óƒoƒCƒg‚à‹–‚³‚ê‚Ü‚·B(ŽÀÛ‚É‚Í‚½‚­‚³‚ñ‚Ì XML-RPC ‚Ì
    ŽÀ‘•‚ª Unicode ‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚Ü‚·BXML ‚ÌŠî–{‹@”\‚ÉŠ´ŽÓB)
   
boolean
   
    ^‚©‹U‚Ì‚Ç‚¿‚ç‚©
   
double
   
    ”{¸“x•‚“®¬”“_ŽÀ” (ŽÀÛ‚É‚Í‚¢‚­‚‚©‚ÌŽÀ‘•‚ÅŽg‚¦‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹
    ‚ñ)
   
dateTime.iso8601
   
    “ú•t‚ÆŽžBŽc”O‚È‚ª‚çAXML-RPC ‚̓^ƒCƒ€ƒ][ƒ“‚ÌŽg—p‚ð‹ÖŽ~‚µ‚Ä‚¢‚é
    ‚̂ŁA‚±‚ê‚Í‚Ù‚Æ‚ñ‚Ç–ð‚É—§‚¿‚Ü‚¹‚ñB
   
base64
   
    ”CˆÓ’·‚̐¶‚̃oƒCƒiƒŠƒf[ƒ^ - ’ʐMã Base64 ‚ðŽg—p‚µ‚ăGƒ“ƒR[ƒh‚³‚ê
    ‚Ü‚·B‚Æ‚Ä‚à–𗧂¿‚Ü‚· (‚¯‚ê‚Ç‚à‚¢‚­‚‚©‚ÌŽÀ‘•‚Å‚Í 0 ƒoƒCƒg‚̃f[ƒ^
    ŽóM‚ªs‚¦‚Ü‚¹‚ñ)B
   
array
   
    ’l‚̈ꎟŒ³”z—ñBŒÂX‚Ì’l‚Í‚Ç‚ñ‚ÈŽí•Ê‚Å‚à‚©‚Ü‚¢‚Ü‚¹‚ñ
   
struct
   
    ƒL[‚Æ’l‚̏W‚Ü‚èBƒL[‚Í•¶Žš—ñ‚Å‚· - ’l‚Í‚Ç‚ñ‚ÈŽí•Ê‚Å‚à‚©‚Ü‚¢‚Ü‚¹‚ñ
    B
   
„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

2.3. XML-RPC ‚Ì—ðŽj

XML-RPC ‚́Aæs‚·‚é“ñ‚‚̃vƒƒgƒRƒ‹‚©‚ç’…‘z‚𓾂Ă¢‚Ü‚·B‚»‚̈ê‚‚́A
anonymous RPC ‚Å‚ ‚èA‚±‚ê‚Í Dave Winer ‚É‚æ‚èÝŒv‚³‚êA‰ß‹Ž‚É DaveNet
‚ł̃GƒbƒZƒC <http://davenet.userland.com/1998/02/27/rpcOverHttpViaXml>
‚Æ‚µ‚Ä”­•\‚³‚ꂽ‚à‚Ì‚Å‚· (XML-RPC ƒT[ƒo‚ª /RPC2 ‰º‚ɃCƒ“ƒXƒg[ƒ‹‚³‚ê‚é
‚±‚Æ‚ª‘½‚¢‚Ì‚Í‚±‚Ì‚½‚ß‚Å‚·)B‚à‚¤ˆê‚‚́A‚æ‚èd—v‚È’…‘z‚́ASOAP ƒvƒƒg
ƒRƒ‹‚̏‰Šúƒhƒ‰ƒtƒg‚É‚æ‚é‚à‚Ì‚Å‚·B

‚æ‚èÚ‚µ‚¢ XML-RPC ‚Ì—ðŽj <http://www.xmlrpc.com/stories/
storyReader$555>‚Æ‚¢‚¤•¶‘‚ð Dave Winer ‚ª’ñ‹Ÿ‚µ‚Ä‚­‚ê‚Ä‚¢‚Ü‚·B‚±‚Ì•¶
‘‚ł́AXML-RPC ‚Æ SOAP ‚Æ‚ÌŠÖŒW‚ɂ‚¢‚Ä‚àà–¾‚³‚ê‚Ä‚¢‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

3. XML-RPC ‘Α¼‚̃vƒƒgƒRƒ‹

ƒŠƒ‚[ƒgŽè‘±‚«ŒÄ‚яo‚µ‚Í XML-RPC ‚ª—Bˆê‚Ì•û–@‚Å‚Í‚ ‚è‚Ü‚¹‚ñBl‹C‚Ì‚ ‚é
‘¼‚̃vƒƒgƒRƒ‹‚É‚Í CORBA, DCOM, SOAP ‚È‚Ç‚ª‚ ‚è‚Ü‚·BŠeƒvƒƒgƒRƒ‹‚É‚Í’·
Š‚Æ’ZŠ‚ª‚ ‚è‚Ü‚·B

‚±‚̏͂ł̈ӌ©‚ɂ́A(’˜ŽÒ‚Ì) –¾‚ç‚©‚È•ÎŒ©‚àŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·B‚Ç‚¤‚©A‚»‚Ì
“_‚ðl—¶‚µ‚Ä‚¨“Ç‚Ý‚­‚¾‚³‚¢B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

3.1. XML-RPC ‘Î CORBA

CORBA <http://www.corba.org/> ‚͐l‹C‚Ì‚ ‚éƒvƒƒgƒRƒ‹‚ŁA•ªŽUŒ^ƒIƒuƒWƒF
ƒNƒgŽwŒüƒAƒvƒŠƒP[ƒVƒ‡ƒ“Œü‚¯‚ɏ‘‚©‚ê‚Ä‚¢‚Ü‚·Bˆê”Ê“I‚É•¡”‚Ì‘w‚ðŽ‚ÂƒG
ƒ“ƒ^[ƒvƒ‰ƒCƒYƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÅŽg—p‚³‚ê‚Ü‚·BÅ‹ß‚ł́AƒAƒvƒŠƒP[ƒVƒ‡
ƒ“ŠÔ’ʐM—p‚É‚à Gnome <http://www.gnome.org/> ƒvƒƒWƒFƒNƒg‚É‚æ‚Á‚Ä‘I’肳
‚ê‚Ä‚¢‚Ü‚·B

CORBA ‚Í‘½‚­‚̃xƒ“ƒ_[‚₽‚­‚³‚ñ‚̃tƒŠ[ƒ\ƒtƒgƒEƒFƒAƒvƒƒWƒFƒNƒg‚É‚æ‚è
A‚æ‚­ƒTƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚·BCORBA ‚Í Java, C++ ‚Æ‚¤‚Ü‚­“®ì‚µA‘½‚­‚Ì‘¼
‚ÌŒ¾Œê‚©‚ç‚à—˜—p‰Â”\‚Å‚·B‚³‚ç‚É CORBA ‚Í—D‚ꂽ interface definition
language (IDL) ‚ð’ñ‹Ÿ‚µA“Ç‚Ý‚â‚·‚¢ƒIƒuƒWƒFƒNƒgŽwŒü API ‚ð’è‹`‚Å‚«‚é‚æ
‚¤‚É‚µ‚Ü‚·B

Žc”O‚È‚±‚ƂɁACORBA ‚Í‚Æ‚Ä‚à•¡ŽG‚Å‚·BŠwK‹Èü‚Í‹}Œù”z‚Æ‚È‚Á‚Ä‚¢‚āAŽÀ
‘•‚·‚é‚Ì‚É”ñí‚È“w—Í‚ð•K—v‚Æ‚µA‚©‚Ȃ荂“x‚ȃNƒ‰ƒCƒAƒ“ƒg‚ð•K—v‚Æ‚µ‚Ü‚·
B•ªŽUŒ^ƒEƒFƒuƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚æ‚è‚àƒGƒ“ƒ^[ƒvƒ‰ƒCƒY‚âƒfƒXƒNƒgƒbƒvƒAƒv
ƒŠƒP[ƒVƒ‡ƒ“‚Ɉê”Ô“K‚µ‚Ä‚¢‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

3.2. XML-RPC ‘Î DCOM

DCOM <http://www.microsoft.com/com/tech/DCOM.asp> ‚Í Microsoft ‚Ì CORBA
‚ɑ΂·‚é Microsoft ‚Ì“š‚¦‚Å‚·B‚·‚Å‚É COM ƒRƒ“ƒ|[ƒlƒ“ƒg‚ðŽg—p‚µ‚Ä‚¢‚Ä
Microsoft ˆÈŠO‚̃VƒXƒeƒ€‚Æ‚â‚èŽæ‚è‚·‚é•K—v‚ª‚È‚¯‚ê‚΁A‘f°‚炵‚¢‚à‚Ì‚Å
‚·B‚»‚¤‚Å‚È‚¯‚ê‚΁A‚ ‚Ü‚è–ð‚É—§‚½‚È‚¢‚Å‚µ‚傤B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

3.3. XML-RPC ‘Î SOAP

SOAP <http://www.w3.org/TR/SOAP/> ‚Í‚Æ‚Ä‚à XML-RPC ‚ÉŽ—‚Ä‚¢‚Ü‚·BXML •¶
‘‚̂܂܁AHTTP ã‚Ő®—ñ‚µ‚½Žè‘±‚«ŒÄ‚яo‚µ‚ðs‚¤“®ì‚àŽ—‚Ä‚¢‚Ü‚·BŽc”O‚È
‚ª‚ç SOAP ‚ÍŽd—l‚ÌŠm’è‚É”Y‚ñ‚Å‚¢‚é‚悤‚ÉŒ©‚¦‚Ü‚·B

SOAP ‚ÍŒ³X UserLand, DevelopMentor, Microsoft ‚Ì‹¤“¯§ì‚É‚æ‚èì¬‚³‚ê
‚Ü‚µ‚½BÅ‰‚ÌŒö‚̃ŠƒŠ[ƒX‚ÍŠî–{“I‚Ƀl[ƒ€ƒXƒy[ƒX‚Æ’·‚¢ƒGƒŒƒƒ“ƒg–¼‚ð
Ž‚ XML-RPC ‚Å‚µ‚½B‚µ‚©‚µ‚»‚ÌŒã SOAP ‚Í W3C ƒ[ƒLƒ“ƒOƒOƒ‹[ƒv‚Ɉø‚«
Œp‚ª‚ê‚Ü‚µ‚½B

Žc”O‚È‚±‚ƂɁAƒ[ƒLƒ“ƒOƒOƒ‹[ƒv‚Í SOAP‚É‚Æ‚Ä‚à‘½‚­‚Ì•s‰Â‰ð‚È‹@”\‚̒ljÁ
‚ðs‚Á‚Ä‚¢‚Ü‚·B‚±‚Ì•¶‘‚ÌŽ·•MŽž“_‚ŁASOAP ‚Í XML ƒXƒL[ƒ€AƒGƒ~ƒ…ƒŒ[
ƒVƒ‡ƒ“AŠï–­‚È•¡‡\‘¢‘Ì‚¨‚æ‚Ñ”z—ñA‚»‚µ‚ăJƒXƒ^ƒ€ƒ^ƒCƒv‚ðƒTƒ|[ƒg‚µ‚Ä
‚¢‚Ü‚·B‰Á‚¦‚āA‚¢‚­‚‚à‚Ì SOAP ‚ÌŠO•”Žd—l‚ÌŽÀ‘•‚à’è‹`‚³‚ê‚Ä‚¢‚Ü‚·B

Šî–{“I‚É XML-RPC ‚ªD‚«‚Å‚ ‚邯‚ê‚Ç‚à‚Á‚Æ‚½‚­‚³‚ñ‚Ì‹@”\‚ðŽ‚Á‚½ƒvƒƒgƒR
ƒ‹‚ð–]‚ޏꍇASOAP ‚𒲍¸‚·‚é‚Æ‚¢‚¢‚Å‚µ‚傤B :-)

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

4. ˆê”Ê“I‚È XML-RPC ƒCƒ“ƒ^[ƒtƒF[ƒX

‚¢‚­‚‚©‚Ì XML-RPC ƒT[ƒo‚̓rƒ‹ƒgƒCƒ“ƒƒ\ƒbƒh‚ð’ñ‹Ÿ‚µ‚Ü‚·B‚»‚ê‚ç‚Í
XML-RPC ‚»‚ꎩg‚Ì‚à‚Ì‚Å‚Í‚ ‚è‚Ü‚¹‚ñ‚ªA‚Æ‚Ä‚à•Ö—˜‚ȒljÁ‹@”\‚Å‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

4.1. ƒCƒ“ƒgƒƒXƒyƒNƒVƒ‡ƒ“ - ƒT[ƒo‚Ì API ‚ðŒ@‚èo‚·

Edd Dumbill ‚ÍŽŸ‚̃ƒ\ƒbƒh‚Ì‘g‚Ý‚ð’ñˆÄ <http://xmlrpc.usefulinc.com/doc
/reserved.html>‚µ‚Ü‚µ‚½B

array system.listMethods ()                                            
string system.methodHelp (string methodName)                           
array system.methodSignature (string methodName)                       

ƒT[ƒo‚ª‚±‚ê‚ç‚̃ƒ\ƒbƒh‚ðƒTƒ|[ƒg‚·‚éê‡A‚ ‚éƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“‚ð
ˆóŽš‚·‚邽‚߂ɃT[ƒo‚Ö–â‚¢‡‚킹‚ª‚Å‚«‚Ü‚· -

import xmlrpclib                                                            
server = xmlrpclib.Server("http://xmlrpc-c.sourceforge.net/api/sample.php") 
for method in server.system.listMethods():                                  
    print method                                                            
    print server.system.methodHelp(method)                                  
    print                                                                   

‚±‚ê‚ç‚̃ƒ\ƒbƒh‚Í PHP ‚¨‚æ‚Ñ CAMicrosoft .NET ‚ŏ‘‚©‚ꂽƒT[ƒo‚É‚æ‚è
ƒTƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚·B•”•ª“I‚ȃCƒ“ƒgƒƒXƒyƒNƒVƒ‡ƒ“‚̃Tƒ|[ƒg‚͍ŋ߂ɂÈ
‚Á‚Ä UserLand Frontier ‚É‚à‘g‚ݍž‚Ü‚ê‚Ä‚¢‚Ü‚·BPerl ‚¨‚æ‚Ñ Python, Java
—p‚̃Cƒ“ƒgƒƒXƒyƒNƒVƒ‡ƒ“‚̃Tƒ|[ƒg‚Í XML-RPC Hacks <http://
xmlrpc-c.sourceforge.net/hacks.php> ‚̃y[ƒW‚Å“üŽè‚Å‚«‚Ü‚·B‚Ç‚¤‚¼A‰“
—¶‚È‚­ƒCƒ“ƒgƒƒXƒyƒNƒVƒ‡ƒ“‚̃Tƒ|[ƒg‚ð‘¼‚Ì XML-RPC ƒT[ƒo‚ɒljÁ‚µ‚Ä‚­‚¾
‚³‚¢I

—lX‚ȃNƒ‰ƒCƒAƒ“ƒg‘¤‚̃c[ƒ‹ (ƒhƒLƒ…ƒƒ“ƒe[ƒVƒ‡ƒ“Aƒ‰ƒbƒp[¶¬“™“™)
‚à XML-RPC Hacks ‚̃y[ƒW‚ÅŒ©‚‚¯‚ç‚ê‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

4.2. Boxcarring - “¯Žž‚É•¡”‚Ì—v‹‚ð‘—‚é

‘½‚­‚̃tƒ@ƒ“ƒNƒVƒ‡ƒ“ƒR[ƒ‹‚ð‚·‚é XML-RPC ƒNƒ‰ƒCƒAƒ“ƒg‚ð‘‚¢‚Ä‚¢‚é‚È‚çA
ƒCƒ“ƒ^[ƒlƒbƒg‚̃oƒbƒNƒ{[ƒ“‚̃Œ[ƒeƒ“ƒV[ (‘Ò‚¿ŽžŠÔ) ‚ª’Z‚¢‚¨‚©‚°‚ŁA
‰ž“šŽžŠÔ‚ª‚©‚Ȃ葬‚¢‚±‚Æ‚ð‹C‚­‚©‚à‚µ‚ê‚Ü‚¹‚ñB‚¢‚­‚‚©‚̃T[ƒo‚ÍŽŸ‚Ì
‹@”\‚ðŽg‚¤‚±‚Æ‚Å•¡”‚Ì—v‹‚ðˆêŠ‡ˆ— (batching) ‚Å‚«‚Ü‚·B

array system.multicall (array calls)                                   

’ljÁî•ñ‚Í system.multicall RFC <http://www.xmlrpc.com/discuss/
msgReader$1208> ‚æ‚蓾‚Ä‚­‚¾‚³‚¢B

Œ»ÝA‚±‚̃ƒ\ƒbƒh‚Í C ‚¨‚æ‚Ñ UserLand Frontier ‚ŏ‘‚©‚ꂽƒT[ƒo‚ŃTƒ|
[ƒg‚³‚ê‚Ä‚¢‚Ü‚·BPython ‚¨‚æ‚Ñ Perl ‚ŏ‘‚©‚ꂽƒT[ƒo‚Í XML-RPC Hacks
<http://xmlrpc-c.sourceforge.net/hacks.php> ‚̃y[ƒW‚É‚ ‚éƒvƒƒOƒ‰ƒ€‚ð
—˜—p‚Å‚«‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

5. API ‚ÌŽ–—á - sumAndDifference

XML-RPC ‚̃fƒ‚‚ð‚·‚é‚½‚߂ɁA‰Â”\‚ÈŒÀ‚葽‚­‚ÌŒ¾Œê‚ňȉº‚ÉŽ¦‚µ‚Ü‚·B

struct sample.sumAndDifference (int x, int y)                          

‚±‚̊֐”‚͈ø‚«”‚Æ‚µ‚Ä“ñ‚‚̐®”‚ðŽó‚¯Žæ‚Á‚āA“ñ‚‚̃GƒŒƒƒ“ƒg‚ðŽ‚Â
XML-RPC <struct(\‘¢‘Ì)> ‚ð–ß‚µ‚Ü‚· -

sum
   
    “ñ‚‚̐®”‚̘a
   
difference
   
    “ñ‚‚̐®”‚̍·
   
ŽÀ—p“I‚È‚à‚Ì‚Å‚Í‚ ‚è‚Ü‚¹‚ñ‚ªA—§”h‚È—á‘è‚É‚È‚Á‚Ä‚¢‚Ü‚· :-)

‚±‚̊֐” (‚⑼‚Ì‚à‚Ì) ‚Í URL http://xmlrpc-c.sourceforge.net/api/
sample.php ‚ð—˜—p‚µ‚Ä‚¢‚Ü‚· (‚±‚Ì URL ‚̓uƒ‰ƒEƒU‚ł͉½‚à‚Å‚«‚¸AXML-RPC
ƒNƒ‰ƒCƒAƒ“ƒg‚Å—˜—p‚Å‚«‚Ü‚·)B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

6. Perl ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û

Ken MacLeod ‚Í Perl —p XML-RPC ‚ðŽÀ‘•‚µ‚Ä‚¢‚Ü‚·B”Þ‚Ì Frontier::RPC ƒ‚
ƒWƒ…[ƒ‹‚͔ނ̃EƒFƒuƒTƒCƒg <http://bitsko.slc.ut.us/~ken/xml-rpc/>‚à‚µ
‚­‚Í CPAN <http://www.cpan.org/> ‚ð’Ê‚¶‚Ä“üŽè‚Å‚«‚Ü‚·B

Frontier::RPC ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚ɂ́A•W€“I‚È‚â‚è•û‚ŃpƒbƒP[ƒW‚ðƒ_ƒE
ƒ“ƒ[ƒh‚µ‚ăRƒ“ƒpƒCƒ‹‚µ‚Ü‚· -

bash$ gunzip -c Frontier-RPC-0.07b1.tar.gz | tar xvf -                 
bash$ cd Frontier-RPC-0.07b1                                           
bash$ perl Makefile.PL                                                 
bash$ make                                                             
bash$ make test                                                        
bash$ su -c 'make install'                                             

(ƒEƒBƒ“ƒhƒEŠÂ‹«‚⃋[ƒgŒ ŒÀ‚Ì–³‚¢ê‡A‚킸‚©‚Ɉá‚Á‚½Žè‡‚Æ‚È‚é‚Å‚µ‚傤
BÚ×‚Í Perl ‚Ì•¶‘‚ðŽQl‚É‚µ‚Ä‚­‚¾‚³‚¢B)

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

6.1. Perl ƒNƒ‰ƒCƒAƒ“ƒg

ŽŸ‚̃vƒƒOƒ‰ƒ€‚Í Perl ‚©‚ç XML-RPC ƒT[ƒo‚̃R[ƒ‹‚Ì•û–@‚ðŽ¦‚µ‚Ü‚·B

use Frontier::Client;                                                  
                                                                       
# Make an object to represent the XML-RPC server.                      
$server_url = 'http://xmlrpc-c.sourceforge.net/api/sample.php';        
$server = Frontier::Client->new(url => $server_url);                   
                                                                       
# Call the remote server and get our result.                           
$result = $server->call('sample.sumAndDifference', 5, 3);              
$sum = $result->{'sum'};                                               
$difference = $result->{'difference'};                                 
                                                                       
print "Sum: $sum, Difference: $difference\n";                          

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

6.2. “Æ—§Œ^ Perl ƒT[ƒo

The following program shows how to write an XML-RPC server in Perl:

ŽŸ‚̃vƒƒOƒ‰ƒ€‚Í Perl ‚Å‚Ì XML-RPC ƒT[ƒo‚̏‘‚«•û‚ðŽ¦‚µ‚Ü‚·B

use Frontier::Daemon;                                                  
                                                                       
sub sumAndDifference {                                                 
    my ($x, $y) = @_;                                                  
    return {'sum' => $x + $y, 'difference' => $x - $y};                
}                                                                      
                                                                       
# Call me as http://localhost:8080/RPC2                                
$methods = {'sample.sumAndDifference' => \&sumAndDifference};          
Frontier::Daemon->new(LocalPort => 8080, methods => $methods)          
    or die "Couldn't start HTTP server: $!";                           

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

6.3. CGI ƒx[ƒX‚Ì Perl ƒT[ƒo

Frontier::RPC2 ‚Í CGI ƒx[ƒXƒT[ƒo—p‚̃Tƒ|[ƒg‚Í–{—ˆ”õ‚¦‚ç‚ê‚Ä‚¢‚Ü‚¹‚ñ
B‚µ‚©‚µ‘åä•vA•K—v‚È‚Ù‚Æ‚ñ‚Ç‚Ì‹@”\‚Í—pˆÓ‚³‚ê‚Ä‚¢‚Ü‚·B

ŽŸ‚̃vƒƒOƒ‰ƒ€ƒR[ƒh‚ð sumAndDifference.cgi ‚Æ‚µ‚āAƒEƒFƒuƒT[ƒo‚Ì
cgi-bin ƒfƒBƒŒƒNƒgƒŠ‚É•Û‘¶‚µ‚Ä‚­‚¾‚³‚¢ (Unix ƒVƒXƒeƒ€ã‚ŁAchmod +x
sumAndDifference.cgi ‚Æ“ü—Í‚µAŽÀs‘®«‚ð—^‚¦‚é•K—v‚ª‚ ‚é‚Å‚µ‚傤)B

#!/usr/bin/perl -w                                                          
                                                                            
use strict;                                                                 
use Frontier::RPC2;                                                         
                                                                            
sub sumAndDifference {                                                      
    my ($x, $y) = @_;                                                       
    return {'sum' => $x + $y, 'difference' => $x - $y};                     
}                                                                           
                                                                            
process_cgi_call({'sample.sumAndDifference' => \&sumAndDifference});        
                                                                            
                                                                            
#========================================================================== 
#  CGI Support                                                              
#========================================================================== 
#  Simple CGI support for Frontier::RPC2. You can copy this into your CGI   
#  scripts verbatim, or you can package it into a library.                  
#  (Based on xmlrpc_cgi.c by Eric Kidd .)                                   
                                                                            
# Process a CGI call.                                                       
sub process_cgi_call ($) {                                                  
    my ($methods) = @_;                                                     
                                                                            
    # Get our CGI request information.                                      
    my $method = $ENV{'REQUEST_METHOD'};                                    
    my $type = $ENV{'CONTENT_TYPE'};                                        
    my $length = $ENV{'CONTENT_LENGTH'};                                    
                                                                            
    # Perform some sanity checks.                                           
    http_error(405, "Method Not Allowed") unless $method eq "POST";         
    http_error(400, "Bad Request") unless $type eq "text/xml";              
    http_error(411, "Length Required") unless $length > 0;                  
                                                                            
    # Fetch our body.                                                       
    my $body;                                                               
    my $count = read STDIN, $body, $length;                                 
    http_error(400, "Bad Request") unless $count == $length;                
                                                                            
    # Serve our request.                                                    
    my $coder = Frontier::RPC2->new;                                        
    send_xml($coder->serve($body, $methods));                               
}                                                                           
                                                                            
# Send an HTTP error and exit.                                              
sub http_error ($$) {                                                       
    my ($code, $message) = @_;                                              
    print <<"EOD";                                                          
Status: $code $message                                                      
Content-type: text/html                                                     
                                                                            
                                                                            
$code $message                                                              
                                                                            
                                                                            
Unexpected error processing XML-RPC request.                                
                                                                            
                                                                            
EOD                                                                         
    exit 0;                                                                 
}                                                                           
                                                                            
# Send an XML document (but don't exit).                                    
sub send_xml ($) {                                                          
    my ($xml_string) = @_;                                                  
    my $length = length($xml_string);                                       
    print <<"EOD";                                                          
Status: 200 OK                                                              
Content-type: text/xml                                                      
                                                                            
EOD                                                                         
    # We want precise control over whitespace here.                         
    print $xml_string;                                                      
}                                                                           

‚ ‚È‚½Ž©g‚Ì CGI ƒXƒNƒŠƒvƒg‚Ƀ†[ƒeƒBƒŠƒeƒBƒ‹[ƒ`ƒ“‚ðƒRƒs[‚µ‚Ä‚à‚©‚Ü‚¢
‚Ü‚¹‚ñB

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

7. Python ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û

Fredrik Lundh ‚Í—D‚ꂽPython —p XML-RPC ƒ‰ƒCƒuƒ‰ƒŠ <http://
www.pythonware.com/products/xmlrpc/>‚ð’ñ‹Ÿ‚µ‚Ä‚¢‚Ü‚·B

ƒCƒ“ƒXƒg[ƒ‹‚·‚邽‚߂ɁAÅV”Å‚ðƒ_ƒEƒ“ƒ[ƒh‚µ‚Ä‚­‚¾‚³‚¢B *.py ƒtƒ@ƒC
ƒ‹‚ðŒÂl‚Ì Python ƒvƒƒOƒ‰ƒ€‚Æ‚µ‚āAŒÂl‚̃fƒBƒŒƒNƒgƒŠ‚É“Ë‚Áž‚ñ‚Å‚àA
ƒVƒXƒeƒ€‚Ì Python ƒfƒBƒŒƒNƒgƒŠ‚ɃCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚à‚©‚Ü‚¢‚Ü‚¹‚ñB

RedHat 6.2 ‚̃†[ƒU‚ÍŽŸ‚̂悤‚É“ü—Í‚µ‚Ü‚·B

bash$ mkdir xmlrpclib-0.9.8                                            
bash$ cd xmlrpclib-0.9.8                                               
bash$ unzip ../xmlrpc-0.9.8-990621.zip                                 
bash$ python                                                           
python> import xmlrpclib                                               
python> import xmlrpcserver                                            
python> Control-D                                                      
bash$ su -c 'cp *.py *.pyc /usr/lib/python1.5/'                        

ã‹L‚ł́APython ‚É“ñ‚Â‚Ì *.py ‚ðƒRƒ“ƒpƒCƒ‹‚³‚¹‚邽‚߂ɁA‚»‚ê‚ç‚ð
import ‚µ‚Ä‚¢‚Ü‚·B‘¼‚̃vƒ‰ƒbƒgƒtƒH[ƒ€‚Å‚Í Python ‚Ì•¶‘‚ðŽQl‚É‚µ‚Ä‚­
‚¾‚³‚¢B

‚³‚瑽‚­‚Ì Python ‚Å‚Ì—á‚ÉŠÖ‚µ‚ẮAO'Reilly network ‚Ì XML-RPC: It
Works Both Ways <http://www.oreillynet.com/pub/a/python/2001/01/17/
xmlrpcserver.html> ‚Ì‹LŽ–‚ð‚Ý‚Ä‚­‚¾‚³‚¢B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

7.1. Python ƒNƒ‰ƒCƒAƒ“ƒg

ŽŸ‚̃vƒƒOƒ‰ƒ€‚Í Python ‚©‚ç XML-RPC ƒT[ƒo‚̃R[ƒ‹‚Ì•û–@‚ðŽ¦‚µ‚Ü‚·B

import xmlrpclib                                                       
                                                                       
# Create an object to represent our server.                            
server_url = 'http://xmlrpc-c.sourceforge.net/api/sample.php';         
server = xmlrpclib.Server(server_url);                                 
                                                                       
# Call the server and get our result.                                  
result = server.sample.sumAndDifference(5, 3)                          
print "Sum:", result['sum']                                            
print "Difference:", result['difference']                              

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

8. C ‚¨‚æ‚Ñ C++ ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û

C/C++ —p XML-RPC ‚̃Rƒs[‚𓾂é‚ɂ́Axmlrpc-c ‚̃EƒFƒuƒTƒCƒg <http://
xmlrpc-c.sourceforge.net>‚ðŒ©‚Ä‚­‚¾‚³‚¢B

RPM Œ`Ž®‚Å‚·‚ׂĂ̂à‚Ì‚ðƒ_ƒEƒ“ƒ[ƒh‚·‚邱‚Æ‚àAƒ\[ƒX‚©‚玩•ª‚Ŋ‹«‚ð
\’z‚·‚邱‚Æ‚à‚Å‚«‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

8.1. C ƒNƒ‰ƒCƒAƒ“ƒg

ŽŸ‚̃vƒƒOƒ‰ƒ€ƒR[ƒh‚ð getSumAndDifference.c ‚Æ‚µ‚ătƒ@ƒCƒ‹‚É•Û‘¶‚µ‚Ä‚­
‚¾‚³‚¢B

#include                                                               
#include                                                               
#include                                                               
                                                                       
#define NAME       "XML-RPC getSumAndDifference C Client"              
#define VERSION    "0.1"                                               
#define SERVER_URL "http://xmlrpc-c.sourceforge.net/api/sample.php"    
                                                                       
void die_if_fault_occurred (xmlrpc_env *env)                           
{                                                                      
    /* Check our error-handling environment for an XML-RPC fault. */   
    if (env->fault_occurred) {                                         
        fprintf(stderr, "XML-RPC Fault: %s (%d)\n",                    
                env->fault_string, env->fault_code);                   
        exit(1);                                                       
    }                                                                  
}                                                                      
                                                                       
int main (int argc, char** argv)                                       
{                                                                      
    xmlrpc_env env;                                                    
    xmlrpc_value *result;                                              
    xmlrpc_int32 sum, difference;                                      
                                                                       
    /* Start up our XML-RPC client library. */                         
    xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, NAME, VERSION);         
    xmlrpc_env_init(&env);                                             
                                                                       
    /* Call our XML-RPC server. */                                     
    result = xmlrpc_client_call(&env, SERVER_URL,                      
                                "sample.sumAndDifference", "(ii)",     
                                (xmlrpc_int32) 5,                      
                                (xmlrpc_int32) 3);                     
    die_if_fault_occurred(&env);                                       
                                                                       
    /* Parse our result value. */                                      
    xmlrpc_parse_value(&env, result, "{s:i,s:i,*}",                    
                       "sum", &sum,                                    
                       "difference", &difference);                     
    die_if_fault_occurred(&env);                                       
                                                                       
    /* Print out our sum and difference. */                            
    printf("Sum: %d, Difference: %d\n", (int) sum, (int) difference);  
                                                                       
    /* Dispose of our result value. */                                 
    xmlrpc_DECREF(result);                                             
                                                                       
    /* Shutdown our XML-RPC client library. */                         
    xmlrpc_env_clean(&env);                                            
    xmlrpc_client_cleanup();                                           
                                                                       
    return 0;                                                          
}                                                                      

ƒRƒ“ƒpƒCƒ‹‚·‚邽‚ß‚Ì“ü—Í‚ðŽ¦‚µ‚Ü‚· -

bash$ CLIENT_CFLAGS=`xmlrpc-c-config libwww-client --cflags`                      
bash$ CLIENT_LIBS=`xmlrpc-c-config libwww-client --libs`                          
bash$ gcc $CLIENT_CFLAGS -o getSumAndDifference getSumAndDifference.c $CLIENT_LIBS

‚ ‚È‚½‚̃VƒXƒeƒ€‚Ì C ƒRƒ“ƒpƒCƒ‰‚Ì–¼‘O‚ª gcc ‚Å‚Í‚È‚¢‚©‚à‚µ‚ê‚È‚¢‚̂ŁA
ŽÀÛ‚Ì“ü—Í‚Å‚Í‚»‚ê‚ð‘ウ‚é•K—v‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

8.2. C++ ƒNƒ‰ƒCƒAƒ“ƒg

ŽŸ‚̃vƒƒOƒ‰ƒ€ƒR[ƒh‚ð getSumAndDifference2.cc ‚Æ‚µ‚ătƒ@ƒCƒ‹‚É•Û‘¶‚µ‚Ä
‚­‚¾‚³‚¢B

#include                                                                      
#include                                                                      
                                                                              
#define NAME       "XML-RPC getSumAndDifference C++ Client"                   
#define VERSION    "0.1"                                                      
#define SERVER_URL "http://xmlrpc-c.sourceforge.net/api/sample.php"           
                                                                              
static void get_sum_and_difference () {                                       
                                                                              
    // Build our parameter array.                                             
    XmlRpcValue param_array = XmlRpcValue::makeArray();                       
    param_array.arrayAppendItem(XmlRpcValue::makeInt(5));                     
    param_array.arrayAppendItem(XmlRpcValue::makeInt(3));                     
                                                                              
    // Create an object to resprent the server, and make our call.            
    XmlRpcClient server (SERVER_URL);                                         
    XmlRpcValue result = server.call("sample.sumAndDifference", param_array); 
                                                                              
    // Extract the sum and difference from our struct.                        
    XmlRpcValue::int32 sum = result.structGetValue("sum").getInt();           
    XmlRpcValue::int32 diff = result.structGetValue("difference").getInt();   
                                                                              
    cout << "Sum: " << sum << ", Difference: " << diff << endl;               
}                                                                             
                                                                              
int main (int argc, char **argv) {                                            
                                                                              
    // Start up our client library.                                           
    XmlRpcClient::Initialize(NAME, VERSION);                                  
                                                                              
    // Call our client routine, and watch out for faults.                     
    try {                                                                     
        get_sum_and_difference();                                             
    } catch (XmlRpcFault& fault) {                                            
        cerr << argv[0] << ": XML-RPC fault #" << fault.getFaultCode()        
             << ": " << fault.getFaultString() << endl;                       
        XmlRpcClient::Terminate();                                            
        exit(1);                                                              
    }                                                                         
                                                                              
    // Shut down our client library.                                          
    XmlRpcClient::Terminate();                                                
    return 0;                                                                 
}                                                                             

ƒRƒ“ƒpƒCƒ‹‚·‚邽‚ß‚Ì“ü—Í‚ðŽ¦‚µ‚Ü‚· -

bash$ CLIENT_CFLAGS=`xmlrpc-c-config c++ libwww-client --cflags`                     
bash$ CLIENT_LIBS=`xmlrpc-c-config c++ libwww-client --libs`                         
bash$ c++ $CLIENT_CFLAGS -o getSumAndDifference2 getSumAndDifference2.cc $CLIENT_LIBS

‚±‚̍ì‹Æ‚Ì‚½‚߂ɁA‚©‚È‚èÅ‹ß‚Ì C++ ƒRƒ“ƒpƒCƒ‰‚ª•K—v‚Æ‚È‚è‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

8.3. ‘ã‘ÖƒNƒ‰ƒX (Proxy Class) ‚Å‚Ì C++ ƒNƒ‰ƒCƒAƒ“ƒg

XML-RPC ƒT[ƒo‚ªƒCƒ“ƒgƒƒXƒyƒNƒVƒ‡ƒ“ API ‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚é‚È‚çAŽ©“®“I
‚É‚»‚̃T[ƒo—p‚Ì C++ ‘ã‘ÖƒNƒ‰ƒX‚𐶐¬‚Å‚«‚Ü‚·B‘ã‘ÖƒNƒ‰ƒX‚𐶐¬‚·‚邽‚ß
‚ɂ́AŽŸ‚̃Rƒ}ƒ“ƒh‚ð“ü—Í‚µ‚Ä‚»‚̏o—Í‚ðƒtƒ@ƒCƒ‹‚É•Û‘¶‚µ‚Ä‚­‚¾‚³‚¢B

bash$ xml-rpc-api2cpp \                                                
> http://xmlrpc-c.sourceforge.net/api/sample.php sample SampleProxy    

‚±‚ê‚Í sample ‚ÅŽn‚Ü‚é‚·‚ׂẴƒ\ƒbƒh—p‚̃‰ƒbƒp[‚ªŠÜ‚Ü‚ê‚Ä‚¢‚é
SampleProxy ‚Æ–¼‚¯‚ç‚ꂽ‘ã‘ÖƒNƒ‰ƒX‚𐶐¬‚µ‚Ü‚·B‚ ‚È‚½‚ª–]‚Þ•û–@‚Å‚±
‚̃Nƒ‰ƒX‚ðC³‚µ‚Ä‚à‚©‚Ü‚¢‚Ü‚¹‚ñB

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

8.4. CGI ƒx[ƒX‚Ì C ƒT[ƒo

ŽŸ‚̃vƒƒOƒ‰ƒ€ƒR[ƒh‚ð sumAndDifference.c ‚Æ‚µ‚ătƒ@ƒCƒ‹‚É•Û‘¶‚µ‚Ä‚­‚¾
‚³‚¢B

#include                                                                       
#include                                                                       
                                                                               
xmlrpc_value *                                                                 
sumAndDifference (xmlrpc_env *env, xmlrpc_value *param_array, void *user_data) 
{                                                                              
    xmlrpc_int32 x, y;                                                         
                                                                               
    /* Parse our argument array. */                                            
    xmlrpc_parse_value(env, param_array, "(ii)", &x, &y);                      
    if (env->fault_occurred)                                                   
        return NULL;                                                           
                                                                               
    /* Return our result. */                                                   
    return xmlrpc_build_value(env, "{s:i,s:i}",                                
                              "sum", x + y,                                    
                              "difference", x - y);                            
}                                                                              
                                                                               
int main (int argc, char **argv)                                               
{                                                                              
    /* Set up our CGI library. */                                              
    xmlrpc_cgi_init(XMLRPC_CGI_NO_FLAGS);                                      
                                                                               
    /* Install our only method (with a method signature and a help string). */ 
    xmlrpc_cgi_add_method_w_doc("sample.sumAndDifference",                     
                                &sumAndDifference, NULL,                       
                                "S:ii", "Add and subtract two integers.");     
                                                                               
    /* Call the appropriate method. */                                         
    xmlrpc_cgi_process_call();                                                 
                                                                               
    /* Clean up our CGI library. */                                            
    xmlrpc_cgi_cleanup();                                                      
}                                                                              

ƒRƒ“ƒpƒCƒ‹‚·‚邽‚ß‚Ì“ü—Í‚ðŽ¦‚µ‚Ü‚· -

bash$ CGI_CFLAGS=`xmlrpc-c-config cgi-server --cflags`                    
bash$ CGI_LIBS=`xmlrpc-c-config cgi-server --libs`                        
bash$ gcc $CGI_CFLAGS -o sumAndDifference.cgi sumAndDifference.c $CGI_LIBS

‚±‚ꂪI—¹‚µ‚½‚çAsumAndDifference.cgi ‚ðƒEƒFƒuƒT[ƒo‚Ì cgi-bin ƒfƒBƒŒ
ƒNƒgƒŠ‚ɃRƒs[‚µ‚Ä‚­‚¾‚³‚¢B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

9. Java ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û

Hannes Wallnfer ‚Í Java —p XML-RPC ‚Ì—D‚ꂽŽÀ‘• <http://helma.at/hannes
/xmlrpc/>‚ð’ñ‹Ÿ‚µ‚Ä‚¢‚Ü‚·B

ƒCƒ“ƒXƒg[ƒ‹‚́A”z•z•¨‚ðƒ_ƒEƒ“ƒ[ƒh‚µ‚āAunzip ‚µ‚āA CLASSPATH ‚É
*.jar ƒtƒ@ƒCƒ‹‚ð’ljÁ‚µ‚Ü‚·BUnix ƒVƒXƒeƒ€ã‚ŁAŽŸ‚Ì“ü—Í‚É‚æ‚肱‚̍ì‹Æ‚ª
s‚¦‚Ü‚·B

bash$ unzip xmlrpc-java.zip                                            
bash$ cd xmlrpc-java/lib                                               
bash$ CLASSPATH=`pwd`/openxml-1.2.jar:`pwd`/xmlrpc.jar:$CLASSPATH      

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

9.1. Java ƒNƒ‰ƒCƒAƒ“ƒg

ŽŸ‚̃vƒƒOƒ‰ƒ€ƒR[ƒh‚ð JavaClient.java ‚Æ‚µ‚ătƒ@ƒCƒ‹‚É•Û‘¶‚µ‚Ä‚­‚¾‚³‚¢
B

import java.util.Vector;                                                       
import java.util.Hashtable;                                                    
import helma.xmlrpc.*;                                                         
                                                                               
public class JavaClient {                                                      
                                                                               
    // The location of our server.                                             
    private final static String server_url =                                   
        "http://xmlrpc-c.sourceforge.net/api/sample.php";                      
                                                                               
    public static void main (String [] args) {                                 
        try {                                                                  
                                                                               
            // Create an object to represent our server.                       
            XmlRpcClient server = new XmlRpcClient(server_url);                
                                                                               
            // Build our parameter list.                                       
            Vector params = new Vector();                                      
            params.addElement(new Integer(5));                                 
            params.addElement(new Integer(3));                                 
                                                                               
            // Call the server, and get our result.                            
            Hashtable result =                                                 
                (Hashtable) server.execute("sample.sumAndDifference", params); 
            int sum = ((Integer) result.get("sum")).intValue();                
            int difference = ((Integer) result.get("difference")).intValue();  
                                                                               
            // Print out our result.                                           
            System.out.println("Sum: " + Integer.toString(sum) +               
                               ", Difference: " +                              
                               Integer.toString(difference));                  
                                                                               
        } catch (XmlRpcException exception) {                                  
            System.err.println("JavaClient: XML-RPC Fault #" +                 
                               Integer.toString(exception.code) + ": " +       
                               exception.toString());                          
        } catch (Exception exception) {                                        
            System.err.println("JavaClient: " + exception.toString());         
        }                                                                      
    }                                                                          
}                                                                              

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

9.2. “Æ—§Œ^ Java ƒT[ƒo

ŽŸ‚̃vƒƒOƒ‰ƒ€ƒR[ƒh‚ð JavaServer.java ‚Æ‚µ‚ătƒ@ƒCƒ‹‚É•Û‘¶‚µ‚Ä‚­‚¾‚³‚¢
B

import java.util.Hashtable;                                            
import helma.xmlrpc.*;                                                 
                                                                       
public class JavaServer {                                              
                                                                       
    public JavaServer () {                                             
        // Our handler is a regular Java object. It can have a         
        // constructor and member variables in the ordinary fashion.   
        // Public methods will be exposed to XML-RPC clients.          
    }                                                                  
                                                                       
    public Hashtable sumAndDifference (int x, int y) {                 
        Hashtable result = new Hashtable();                            
        result.put("sum", new Integer(x + y));                         
        result.put("difference", new Integer(x - y));                  
        return result;                                                 
    }                                                                  
                                                                       
    public static void main (String [] args) {                         
        try {                                                          
                                                                       
            // Invoke me as .                                          
            WebServer server = new WebServer(8080);                    
            server.addHandler("sample", new JavaServer());             
                                                                       
        } catch (Exception exception) {                                
            System.err.println("JavaServer: " + exception.toString()); 
        }                                                              
    }                                                                  
}                                                                      

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

10. PHP ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û

Edd Dumbill ‚Í PHP —p XML-RPC ‚ðŽÀ‘•‚µ‚Ä‚¢‚Ü‚·BUsefulInc XML-RPC ƒEƒF
ƒuƒTƒCƒg <http://xmlrpc.usefulinc.com/>‚©‚çƒ_ƒEƒ“ƒ[ƒh‚Å‚«‚Ü‚·B

”z•z•¨‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚ɂ́A‚»‚ê‚ð‰ð“€‚µ‚āA xmlrpc.inc ‚Æ
xmlrpcs.inc ‚ð‚ ‚È‚½‚Ì PHP ƒXƒNƒŠƒvƒg‚ª“ü‚Á‚Ä‚¢‚é‚Ì‚Æ“¯‚¶ƒfƒBƒŒƒNƒgƒŠ‚É
ƒRƒs[‚µ‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

10.1. PHP ƒNƒ‰ƒCƒAƒ“ƒg

ŽŸ‚̃XƒNƒŠƒvƒg‚̓EƒFƒuƒy[ƒW‚Ì’†‚É XML-RPC ƒR[ƒ‹‚ð‘g‚ݍž‚Þ•û–@‚ðŽ¦‚µ‚Ü
‚·B

                                                                       
                                                                       
                                                                       
XML-RPC PHP Demo                                                       
                                                                       
send($message);                                                        
                                                                       
// Process the response.                                               
if (!$result) {                                                        
    print "                                                            
                                                                       
Could not connect to HTTP server.                                      
                                                                       
                                                                       
";                                                                     
} elseif ($result->faultCode()) {                                      
    print "                                                            
                                                                       
XML-RPC Fault #" . $result->faultCode() . ": " .                       
        $result->faultString();                                        
} else {                                                               
    $struct = $result->value();                                        
    $sumval = $struct->structmem('sum');                               
    $sum = $sumval->scalarval();                                       
    $differenceval = $struct->structmem('difference');                 
    $difference = $differenceval->scalarval();                         
    print "                                                            
                                                                       
                                                                       
Sum: " . htmlentities($sum) .                                          
        ", Difference: " . htmlentities($difference) . "               
                                                                       
                                                                       
";                                                                     
}                                                                      
?>                                                                     
                                                                       

‚ ‚È‚½‚̃EƒFƒuƒT[ƒo‚ª PHP ƒXƒNƒŠƒvƒg‚ðŽÀs‚µ‚È‚¢ê‡A’ljÁî•ñ‚𓾂邽
‚ß‚É PHP ‚̃EƒFƒuƒTƒCƒg <http://www.php.net/>‚ðŒ©‚Ä‚­‚¾‚³‚¢B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

10.2. PHP ƒT[ƒo

ŽŸ‚̃XƒNƒŠƒvƒg‚Í PHP ‚ð—˜—p‚µ‚½ XML-RPC ƒT[ƒo‚ÌŽÀ‘•‚Ì•û–@‚ðŽ¦‚µ‚Ü‚·B

getParam(0);                                                           
    $x = $xval->scalarval();                                           
    $yval = $params->getParam(1);                                      
    $y = $yval->scalarval();                                           
                                                                       
    // Build our response.                                             
    $struct = array('sum' => new xmlrpcval($x + $y, 'int'),            
                    'difference' => new xmlrpcval($x - $y, 'int'));    
    return new xmlrpcresp(new xmlrpcval($struct, 'struct'));           
}                                                                      
                                                                       
// Declare our signature and provide some documentation.               
// (The PHP server supports remote introspection. Nifty!)              
$sumAndDifference_sig = array(array('struct', 'int', 'int'));          
$sumAndDifference_doc = 'Add and subtract two numbers';                
                                                                       
new xmlrpc_server(array('sample.sumAndDifference' =>                   
                        array('function' => 'sumAndDifference',        
                              'signature' => $sumAndDifference_sig,    
                              'docstring' => $sumAndDifference_doc))); 
?>                                                                     

‚ ‚È‚½‚͒ʏíA http://localhost/path/sumAndDifference.php ‚̂悤‚È‚à‚Ì
‚ðŒÄ‚яo‚·‚Å‚µ‚傤B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

11. Microsoft .NET ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û

Charles Cook ‚Í‚±‚Ì HOWTO —p‚Ì—D‚ꂽV‚µ‚¢Í‚ðŽ·•M’†‚Å‚·B‘e‚̓Iƒ“ƒ‰
ƒCƒ“ <http://www.cookcomputing.com/misc/howto.txt>‚ÅŒ©‚ç‚ê‚Ü‚·B‚»‚̃y
[ƒW‚ªŽp‚ðÁ‚µ‚½‚çALinux Documentation Project ‚Å XML-RPC HOWTO ‚̐V”Å
<http://www.linuxdoc.org/HOWTO/XML-RPC-HOWTO/index.html> ‚ð’T‚µ‚Ä‚­‚¾‚³
‚¢B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

12. Ruby ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û

(XML-RPC HOWTO ‚Ì‚±‚ÌÍ‚Í Michael Neumann ‚ª‹C‘O‚æ‚­’ñ‹Ÿ‚µ‚Ä‚­‚ê‚Ü‚µ‚½
B)

Ruby <http://www.ruby-lang.org/> ‚̓IƒuƒWƒFƒNƒgŽwŒüƒXƒNƒŠƒvƒgŒ¾Œê‚Å‚·B
Šù‚É“ú–{‚Å‚Í‘½‚­‚̈¤DŽÒ‚ª‚¨‚èA‘¼Š‚Å‚àl‹C‚ªo‚‚‚ ‚è‚Ü‚·B

Ruby ‚Å XML-RPC ‚ðŽg‚¤‚ɂ́A‰‚ß‚É‹g“c³l‚Ì xmlparser ƒ‚ƒWƒ…[ƒ‹
(James Clark ‚Ì expat parser —pƒ‰ƒbƒp[) ‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚È‚¯‚ê‚΂Ȃè‚Ü
‚¹‚ñB‚±‚ê‚Í Ruby Application Archive <http://www.ruby-lang.org/en/
raa.html> ‚ÅŒ©‚‚¯‚ç‚ê‚Ü‚·B

‚»‚µ‚ÄŽŸ‚̃Rƒ}ƒ“ƒh‚ðŽg‚Á‚Ä xmlrpc4r <http://www.s-direktnet.de/
homepages/neumann/xmlrpc4r/index.html> ‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹
‚ñB

bash$ tar -xvzf xmlrpc4r-1_2.tar.gz                                    
bash$ cd xmlrpc4r-1_2                                                  
bash$ su root -c "ruby install.rb"                                     

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

12.1. Ruby ƒNƒ‰ƒCƒAƒ“ƒg

’Pƒ‚È Ruby ƒNƒ‰ƒCƒAƒ“ƒg‚ðŽ¦‚µ‚Ü‚· -

require "xmlrpc/client"                                                     
                                                                            
# Make an object to represent the XML-RPC server.                           
server = XMLRPC::Client.new( "xmlrpc-c.sourceforge.net", "/api/sample.php") 
                                                                            
# Call the remote server and get our result                                 
result = server.call("sample.sumAndDifference", 5, 3)                       
                                                                            
sum = result["sum"]                                                         
difference = result["difference"]                                           
                                                                            
puts "Sum: #{sum}, Difference: #{difference}"                               

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

12.2. Ruby ƒT[ƒo

’Pƒ‚È Ruby ƒT[ƒo‚ðŽ¦‚µ‚Ü‚· -

require "xmlrpc/server"                                                
                                                                       
s = XMLRPC::CGIServer.new                                              
                                                                       
s.add_hanlder("sample.sumAndDifference") do |a,b|                      
  { "sum" => a + b, "difference" => a - b }                            
end                                                                    
                                                                       
s.serve                                                                

‚Ü‚½AŽŸ‚̂悤‚ɏ‘‚­‚±‚Æ‚à‚Å‚«‚Ü‚·B

require "xmlrpc/server"                                                
                                                                       
s = XMLRPC::CGIServer.new                                              
                                                                       
class MyHandler                                                        
  def sumAndDifference(a, b)                                           
    { "sum" => a + b, "difference" => a - b }                          
  end                                                                  
end                                                                    
                                                                       
s.add_handler("sample", MyHandler.new)                                 
s.serve                                                                

‚Ç‚¿‚ç‚̃T[ƒo‚à“Æ—§Œ^‚ÅŽÀs‚·‚é‚ɂ́AƒvƒƒOƒ‰ƒ€‚Ì“ñs–Ú‚ð

s = XMLRPC::Server.new(8080)                                           

‚ɏ‘‚«‚©‚¦‚Ä‚­‚¾‚³‚¢B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

13. “ÆŽ©“I‚ÈŒ¾Œê‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û

XML-RPC ‚ÌŽÀ‘•‚͈ȉº‚ÉŽ¦‚·“ÆŽ©“I‚ȃvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê‚¨‚æ‚ъ‹«‚Å—˜—p‚Å
‚«‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

13.1. K ‚Å‚Ì XML-RPC ‚ÌŽg‚¢•û

(XML-RPC HOWTO ‚Ì‚±‚ÌÍ‚Í Christian Langreiter ‚ª‹C‘O‚æ‚­’ñ‹Ÿ‚µ‚Ä‚­‚ê‚Ü
‚µ‚½B)

K <http://www.kx.com/> ‚͉ïŒvˆ—‚¨‚æ‚уf[ƒ^ƒx[ƒXŠJ”­‚ÅŽg‚í‚ê‚錾Œê‚Å
‚·BK —p XML-RPC ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚Í Kx ‚̃EƒFƒuƒTƒCƒg <http://
www.langreiter.com/k/kxr>‚©‚çƒ_ƒEƒ“ƒ[ƒh‚µ‚Ü‚·B‰ð“€‚µ‚Ä‚ ‚È‚½‚Ì .k ƒv
ƒƒOƒ‰ƒ€‚ð•ÛŽ‚µ‚Ä‚¢‚éƒfƒBƒŒƒNƒgƒŠ‚Ƀtƒ@ƒCƒ‹‚ðƒRƒs[‚µ‚Ü‚·B

’Z‚¢ƒNƒ‰ƒCƒAƒ“ƒg‚ðŽ¦‚µ‚Ü‚· -

\l kxr                                                                 
server:("localhost";"/cgi-bin/sumAndDifference.cgi");                  
.kxr.c[server;"sumAndDifference";2 3]                                  

‚»‚µ‚ăT[ƒo‚ðŽ¦‚µ‚Ü‚· -

\l kxrsc                                                               
.kxr.sm: ,("sumAndDifference";{.((`sum;+/x);(`difference;-/x))})       

‚³‚ç‚É‘½‚­‚̗Ⴊ”z•z•¨‚Ì’†‚É‚ ‚è‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

14. XML-RPC ƒTƒ|[ƒg‚ª‘g‚ݍž‚܂ꂽƒAƒvƒŠƒP[ƒVƒ‡ƒ“

‚¢‚­‚‚©‚̈ê”Ê“I‚È Linux ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Í XML-RPC ‚̃Tƒ|[ƒg‚ð‚µ‚Ä‚¢
‚Ü‚·B‚±‚ê‚ç‚ÍŠù‚É‘¼‚Ì‚Æ‚±‚ë‚Åà–¾‚ª‚³‚ê‚Ä‚¢‚é‚̂ŁA‚±‚±‚Å‚ÍŽå‚É‚»‚Ì‹L
Ž–‚ւ̃|ƒCƒ“ƒ^‚ðŽ¦‚µ‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

14.1. Zope

Zope ‚Å‚Ì XML-RPC ‚ÌŽg—p‚ÉŠÖ‚·‚é‹LŽ–‚ÍŽŸ‚ÉŽ¦‚·ƒEƒFƒu‚©‚ç“üŽè‚Å‚«‚Ü‚·B

 E Jon Udell ‚É‚æ‚é Zope ‚Å‚Ì XML-RPC ƒvƒƒOƒ‰ƒ~ƒ“ƒO <http://
    www.byte.com/column/BYT19991021S0014>
   
 E UserLand.Com ‚Ì Zope XML-RPC <http://linux.userland.com/stories/
    storyReader$18>
   
„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

14.2. KDE 2.0

KDE 2.0 ‚Í Kurt Ganroth ‚Ì kxmlrpc ƒf[ƒ‚ƒ“ <http://
kdecvs.stud.fh-heilbronn.de/cvsweb/kdebase/kxmlrpc/>‚ðŠÜ‚݁Aƒf[ƒ‚ƒ“‚Í
XML-RPC ‚ðŽg‚Á‚½ KDE ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì‚½‚ß‚Ì‚¨‘V—§‚Ä‚ð‚µ‚Ü‚·B

Python ‚ŏ‘‚©‚ꂽ’Z‚¢ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì—á <http://
kdecvs.stud.fh-heilbronn.de/cvsweb/kdebase/kxmlrpc/test/testxmlrpc.py?
rev=1.6&content-type=text/x-cvsweb-markup>‚ª‚ ‚è‚Ü‚·B‚»‚ê‚Í kxmlrpc ‚Ö
Ú‘±‚·‚éA KDE ‚̏ZŠ˜^‚𑀍삷‚éAKDE ƒgƒŒ[ƒ_‚ðŒŸõ‚·‚é‚Æ‚¢‚Á‚½•û–@‚ð
Ž¦‚µ‚Ü‚·B

‚ ‚È‚½‚ª‚»‚Ì‘¼‚É‹LŽ–‚âƒvƒƒOƒ‰ƒ€‚Ì—á‚ðŽ‚Á‚Ä‚¢‚éê‡A Section 15.3> ‚ð
Œ©‚Ä‚­‚¾‚³‚¢BŽ„’B‚Í KDE ‚ð‹Lq‚·‚éã‚Å‚à‚Á‚Æ‘½‚­‚̏î•ñ‚ðŽ‚¿‚½‚¢‚ÆŽv‚Á
‚Ä‚¢‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

15. ‚±‚Ì•¶‘‚ɂ‚¢‚Ä

‚±‚Ì•¶‘‚Í Linux Documentation Project <http://www.linuxdoc.org/> ‚ɏŠ
‘ ‚³‚ê‚Ä‚¢‚Ü‚·BDave Winer ‚¨‚æ‚Ñ—lX‚È XML-RPC ƒ‰ƒCƒuƒ‰ƒŠ‚Ì‚·‚ׂĂ̊Ç
—ŽÒ‚ÉŠ´ŽÓ‚µ‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

15.1. ‚±‚Ì•¶‘‚̐V”Å

‚±‚Ì•¶‘‚̐V”Å‚Í Linux Documentation Project <http://www.linuxdoc.org/
HOWTO/XML-RPC-HOWTO/index.html> ‚̃EƒFƒuƒTƒCƒg‚Å“üŽè‚Å‚«‚Ü‚·B

‚Ü‚½ŽŸ‚̃tƒH[ƒ}ƒbƒg‚Å‚à’ñ‹Ÿ‚³‚ê‚Ä‚¢‚Ü‚·B PDF <http://www.ibiblio.org/
pub/Linux/docs/HOWTO/other-formats/pdf/XML-RPC-HOWTO.pdf>, gzipped HTML
<http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html/
XML-RPC-HOWTO-html.tar.gz> ‚¨‚æ‚Ñ ASCII text <http://www.ibiblio.org/
pub/Linux/docs/HOWTO/XML-RPC-HOWTO>B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

15.2. XML-RPC HOWTO ‚ÌŠñeŽÒ

Ruby ‚ÉŠÖ‚·‚éÍ‚Í Michael Neumann (neumann AT s-direktnet DOT de) ‚É‚æ
‚èŠñe‚³‚ê‚Ü‚µ‚½BK ‚ÉŠÖ‚·‚éÍ‚Í Christian Langreiter (c DOT langreiter
AT synerge DOT at) ‚É‚æ‚èŠñe‚³‚ê‚Ü‚µ‚½B

[–󒍁Fã‹L‚Ì–¼‘O‚ÌŒã‚Ì () “à‚̓[ƒ‹ƒAƒhƒŒƒX‚ðŽ¦‚µ‚Ä‚¢‚Ü‚·BuATv‚́u
@vAuDOTv‚́u.v‚É’u‚«‚©‚¦‚āA‹ó”’‚ðœ‹Ž‚·‚ê‚΃[ƒ‹ƒAƒhƒŒƒX‚ª“¾‚ç‚ê
‚Ü‚·B]

ŠñeŽÒ‚Í‚»‚̏͂̎n‚ß‚É‹L“ü‚³‚ê‚Ä‚¢‚Ü‚·B

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

15.3. ‘¼‚̏î•ñ‚Ì’ño

•Ê‚ÌŒ¾Œê‚âŠÂ‹«‚ł̃Nƒ‰ƒCƒAƒ“ƒg‚âƒT[ƒo‚Ì—á‚ðŽ‚Á‚Ä‚¢‚éê‡A‚±‚Ì•¶‘‚É
’ljÁ‚µ‚½‚¢‚Æ‚Æ‚Ä‚àŽv‚Á‚Ä‚Ü‚·BV‚µ‚¢ƒGƒ“ƒgƒŠ‚ð’ljÁ‚·‚邽‚߂ɁAŽŸ‚ÉŽ¦‚·
î•ñ‚ª•K—v‚Å‚·B

 E XML-RPC ‚ðŽg—p‚µ‚½ŽÀ‘•‚Ì URL
   
 E ƒCƒ“ƒXƒg[ƒ‹Žè‡
   
 E Š®‘S‚ÈŽÀs‚Å‚«‚éƒvƒƒOƒ‰ƒ€
   
 E •K—v‚È‚çƒRƒ“ƒpƒCƒ‹Žè‡
   
•¶‘‚É‹LÚ‚µ‚Ä‚à‚©‚Ü‚í‚È‚¢ E-mail ƒAƒhƒŒƒX - —Ⴆ‚Î xmlrpc-c-devel ƒ[
ƒŠƒ“ƒOƒŠƒXƒg <http://xmlrpc-c.sourceforge.net/lists.php> ‚à‚µ‚­‚́A’¼Ú
‚Ì Eric Kidd <mailto:eric.kidd@pobox.com>B

î•ñ‚ð‚¨‘Ò‚¿‚µ‚Ä‚¢‚Ü‚·I

„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª„ª

16. “ú–{Œê–ó‚ɂ‚¢‚Ä

“ú–{Œê–ó‚Í Linux Japanese FAQ Project ‚ªs‚¢‚Ü‚µ‚½B–|–ó‚ÉŠÖ‚·‚邲ˆÓŒ©
‚Í JF ƒvƒƒWƒFƒNƒg <JF@linux.or.jp> ˆ¶‚ɘA—‚µ‚Ä‚­‚¾‚³‚¢B

0.8.0j

–|–ó:
   
    –ì–{_ˆê <hng@ps.ksky.ne.jp>
   
Z³:
   
       ç’U—TŽi‚³‚ñ <ysenda@pop01.odn.ne.jp>
       
       ŽR“cT–炳‚ñ <trueheart@anet.ne.jp>