Topic: [原創] Apache XML-RPC 教學文章+ 示範程式

  Print this page

1.[原創] Apache XML-RPC 教學文章+ 示範程式 Copy to clipboard
Posted by: tzutolin
Posted on: 2004-05-10 16:17

[主题]
Apache XML-RPC 示范教学 (一)

[目的]
尝试创作, 分享学习经验

[下载连结]
http://ws.apache.org/xmlrpc/download.html

[简介]
Apache XML-RPC 为一组使用 Java 所写成的 XML-RPC 套件, Apache XML-RPC 的类别分为 Client 端以及 Server 端两大部分, 它是通过两套广为使用的协定 XML 以及 HTTP 来实作远端程序呼叫.

[使用教学 Client 篇]
在 Client 方面提供了两个主要的类别, 分别简述如下:

1. org.apache.xmlrpc.XmlRpcClient
此类别使用了 java.net.URLConnection 类别, 为标准的 HTTP Client.

2. org.apache.xmlrpc.XmlRpcClientLite
此类别实作了自订的轻量级 HTTP Client .

Tip:
假如您需要完整的 HTTP 协议支援 (例如: 代理服务器, 重新导向...等等功能), 请使用 XmlRpcClient 类别. 反过来说, 假如您的程序并不需要完整的 HTTP 协议支援, 而又需要考虑到效能问题时, 请您尝试上述两种 Client 类别: XmlRpcClient 及 XmlRpcClientLite. 因为在某些平台上 XmlRpcClient 可能会较快些, 而在某些平台上, XmlRpcClientLite 则表现的更为出色. 此两类别提供了同样的介面, 都包含了同步以及非同步的呼叫. 因此, 使用方法上大同小异, 请使用者不必担忧.

同步的 XML 远端程序呼叫:
Apache XML-RPC 在使用上非常的直观及简易. 以下唯一些示范的程序码, 各位也可以依样画葫芦.


//宣告一个简易的 XmlRpcClient (使用标准的 J2SDK 套件)
XmlRpcClient client = new XmlRpcClient ("http://knight.fcu.edu.tw:8080/XML-RPC");
//params 存放了您的方法中所使用到的参数
Vector params = new Vector ();
params.addElement ("您的参数");
//execute 方法将回传字传型态
String result = (String) client.execute ("方法名称", params);


Tip:
请各位朋友特别注意的是在当执行 execute 方法时可能会丢出 XmlRpcException 以及 IOException, 您必须再程序码中宣告当例外发生时候的处理方式.

非同步的 XML 远端程序呼叫:
Apache XML-RPC 支援非同步的远端程序呼叫. 它是经由 XML-RPC Client 类别中的 eexecuteAsync() 方法来达成. 使用该方法会启动另外一个执行绪来执行该方法的呼叫, 而 executeAsync 会立即回传, 而不像 execute 方法会等待处理结果. 假如您想要知道远端的执行结果, 或是想要在例外发生时被通知, 您可以传入一个实作 org.apache.xmlrpc.AsyncCallback 介面的物件类别. 此介面定义了两个方法:

public void handleResult (Object result, URL url, String method);
public void handleError (Exception exception, URL url, String method);

此两方法会视远端执行的状况而个别被呼叫.

[使用教学 Server 篇]
在 Server 这端, 您可以选择把函式库绑入现有的 server 框架软件, 或者使用此套件中内建的迷你 HTTP 服务器. 就让我们先来看看要如何使用 Server 端的相关类别, 并学习如何在 Server 上注册相对应的处理物件.

XML-RPC Handler Objects
Apache XML-RPC 套件在 Server 端也同样提供了两个类别供各位朋友使用, 分别简述如下:

1. org.apache.xmlrpc.XmlRpcServer
此类别为 Apache XML-RPC 中的标准 Server 类别, 可用于和现成的 Server 整合.
2. org.apache.xmlrpc.WebServer
此类别提供前面我提到的迷你 HTTP 服务器.

上面的两个 Server 端类别都提供下列方法以供您注册或注销当作 XML 远端成呼叫处理类别的 Java 物件.

addHandler (String name, Object handler);
removeHandler (String name);

Tip:
视您提供给 Server 的处理类别, 将会出现在列的情形:
假如您传给 XmlRpcServer 任何的 Java 物件, 它将会通过物件的自省机制 (object introspection) 尝试着去解析所有进来的程序呼叫. 举例来说: 通过寻找在处理类别之中的公用方法, 找出相对应于呼叫里头所要求的方法名称以及参数型态. 特别注意的是在 XML 远端程序呼叫的要求中的参数型态必须符合下列规定:

A.
XML-RPC 资料型态: <i4> or <int>
XML Parser 所产生的资料型态: java.lang.Integer
Client 所预期的资料型态: int

B.
XML-RPC 资料型态: <boolean>
XML Parser 所产生的资料型态: java.lang.Boolean
Client 所预期的资料型态: boolean

C.
XML-RPC 资料型态: <string>
XML Parser 所产生的资料型态: java.lang.String
Client 所预期的资料型态: java.lang.String

D.
XML-RPC 资料型态: <double>
XML Parser 所产生的资料型态: java.lang.Double
Client 所预期的资料型态: double

F.
XML-RPC 资料型态: <dateTime.iso8601>
XML Parser 所产生的资料型态: java.util.Date
Client 所预期的资料型态: java.util.Date

G.
XML-RPC 资料型态: <struct>
XML Parser 所产生的资料型态: java.util.Hashtable
Client 所预期的资料型态: java.util.Hashtable

H.
XML-RPC 资料型态: <array>
XML Parser 所产生的资料型态: java.util.Vector
Client 所预期的资料型态: java.util.Vector

G.
XML-RPC 资料型态: <base64>
XML Parser 所产生的资料型态: byte[ ]
Client 所预期的资料型态: byte[ ]


否则呼叫将会失败. 同样地, 所回传的结果型态也必须被此 XML 远端程序呼叫套件所支援. 而若您传入实作 org.apache.xmlrpc.XmlRpcHandler 或 org.apache.xmlrpc.AuthenticatedXmlRpcHandler 介面的程序处理物件给 XmlRpcServer 时, execute() 方法将会在每次远端程序呼叫时被呼叫. 因此您能够完全的控制如何来处理 XML 远端程序呼叫要求, 也让您能够对输入和输出的参数来作检查以及转换, 以及进行错误处理...等等.

未完, 请待续篇

Best regards,
tzutolin

2.Re:[原創] Apache XML-RPC 教學文章+ 示範程式 [Re: tzutolin] Copy to clipboard
Posted by: tzutolin
Posted on: 2004-05-10 18:09

繁體請看這裡
http://www.javaworld.com.tw/jute/post/view?bid=35&id=48227&sty=1&tpg=1&age=0

3.Re:[原創] Apache XML-RPC 教學文章+ 示範程式 [Re: tzutolin] Copy to clipboard
Posted by: Biubiu
Posted on: 2004-05-11 12:50

不错,赞一个先。

4.Re:[原創] Apache XML-RPC 教學文章+ 示範程式 [Re: tzutolin] Copy to clipboard
Posted by: itren
Posted on: 2004-05-17 12:44

有研究 PHP的吗?


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923