xml-rpc 2.0および3.0の例

5021 ワード

xml-rpc 2.0紹介:1、異なるオペレーティングシステム、異なる環境で実行する2、httpを伝送プロトコルとして使用する3、xmlを伝送情報として使用する符号化フォーマットxml-rpcは簡単で、軽量級のHTTPプロトコルによるRPC通信の仕様である.xml-rpcメッセージは、要求体がxmlであるHTTP-POST要求であり、呼び出された方法は、サーバ側で実行され、実行結果をxml形式で符号化して返される.xml-rpc 2.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は属性ファイルでサービスを構成するのに便利です