xml-rpc 2.0および3.0の例
xml-rpc 2.0紹介:1、異なるオペレーティングシステム、異なる環境で実行する2、httpを伝送プロトコルとして使用する3、xmlを伝送情報として使用する符号化フォーマットxml-rpcは簡単で、軽量級のHTTPプロトコルによるRPC通信の仕様である.xml-rpcメッセージは、要求体がxmlであるHTTP-POST要求であり、呼び出された方法は、サーバ側で実行され、実行結果をxml形式で符号化して返される.xml-rpc 2.0例:サービス側クラス
コンフィギュレーション
テスト
rpc 3.0書き込みservletインスタンス:
サービス:
テスト:
rpc 3.0はservletを書かず、属性ファイルでjavabean 1を構成し、javabean 2を作成し、javabean 3を構成し、client呼び出しrpc 3.0は属性ファイルでサービスを構成するのに便利です
public class MyXmlRpcServer extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
XmlRpcServer xmlRpc=new XmlRpcServer();
xmlRpc.addHandler("myHandler", new MyHandler());
byte [] result=xmlRpc.execute(req.getInputStream());
resp.setContentType("text/xml");
resp.setContentLength(result.length);
OutputStream outputStream=resp.getOutputStream();
outputStream.write(result);
outputStream.flush();
outputStream.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
コンフィギュレーション
<servlet>
<servlet-name>MyXmlRpcServer</servlet-name>
<servlet-class>xiu.rpc.MyXmlRpcServer</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyXmlRpcServer</servlet-name>
<url-pattern>/MyXmlRpcServer</url-pattern>
</servlet-mapping>
テスト
public class MyXmlRpcClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
XmlRpcClient xmlrpc = new XmlRpcClient("http://127.0.0.1:8080/rpc/MyXmlRpcServer");
Vector params = new Vector();
params.addElement("Tom");
String result = (String) xmlrpc.execute("myHandler.sayHello",params);
System.out.println(result);
} catch (MalformedURLException e) {
System.out.println(e.toString());
} catch (XmlRpcException e) {
System.out.println(e.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
rpc 3.0書き込みservletインスタンス:
public class HelloHandler {
public String sayHello(String str){
return str;
}
}
サービス:
public class Server extends HttpServlet {
private XmlRpcServletServer xmlRpc;
public void init(ServletConfig config)throws ServletException{
super.init(config);
xmlRpc=new XmlRpcServletServer();
PropertyHandlerMapping phm=new PropertyHandlerMapping();
try {
phm.addHandler("HelloHandler", xiu.com.HelloHandler.class);
xmlRpc.setHandlerMapping(phm);
XmlRpcServerConfigImpl serverConfig=(XmlRpcServerConfigImpl)xmlRpc.getConfig();
serverConfig.setEnabledForExtensions(true);
serverConfig.setContentLengthOptional(false);
} catch (XmlRpcException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
xmlRpc.execute(req, resp);
}
}
テスト:
public class xmlRpcClient {
/**
* @param args
*/
public static void main(String[] args) {
XmlRpcClientConfigImpl config=new XmlRpcClientConfigImpl();
try {
config.setServerURL(new URL("http://127.0.0.1:8080/rpc3/xmlrpc"));
XmlRpcClient client=new XmlRpcClient();
client.setConfig(config);
Vector<String> param=new Vector<String>();
param.add("tom");
String result=(String) client.execute("HelloHandler.sayHello", param);
System.out.println("result:"+result);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (XmlRpcException e) {
e.printStackTrace();
}
}
}
<servlet>
<servlet-name>XmlRpcServer</servlet-name>
<servlet-class>xiu.rpc.Server</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XmlRpcServer</servlet-name>
<url-pattern>/sayHello</url-pattern>
</servlet-mapping>
rpc 3.0はservletを書かず、属性ファイルでjavabean 1を構成し、javabean 2を作成し、javabean 3を構成し、client呼び出しrpc 3.0は属性ファイルでサービスを構成するのに便利です