OpenERP-Java调用XML-RPC接口示例(Examples for calling XML-RPC interfaces by Java)
来源:互联网 发布:hp1000扫描仪安装软件 编辑:程序博客网 时间:2024/04/29 22:05
官网没有给出CREATE、SEARCH、WRITE等XML-RPC接口的Java 调用示例,在此补充一下。
There is no examples on the official site for the XML-RPC operation interfaces for Java, so I posted my code here.
/** * Created by kylin on 14-9-22. */import org.apache.xmlrpc.XmlRpcException;import org.apache.xmlrpc.client.XmlRpcClient;import org.apache.xmlrpc.client.XmlRpcClientConfig;import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class CmpClient { private static final String LOGIN_PATH = "/xmlrpc/common"; private static final String EXECUTION_PATH = "/xmlrpc/object"; private static final String CREATE = "create"; private static final String UNLINK = "unlink"; private static final Object WRITE = "write"; private static final String SEARCH = "search"; private static final Object READ = "read"; private String protocol = "http"; private String host = "127.0.0.1"; private int port = 8069; private String instance = "20140803"; private String username = "admin"; private String password = "admin"; private int uid = -1; public CmpClient(String host, int port, String instance, String login, String password) { this.host = host; this.port = port; this.instance = instance; this.username = login; this.password = password; } public CmpClient(){ } XmlRpcClient client = new XmlRpcClient(); private XmlRpcClientConfig getLoginConfig() throws MalformedURLException { XmlRpcClientConfigImpl xmlRpcConfigLogin = new XmlRpcClientConfigImpl(); xmlRpcConfigLogin.setEnabledForExtensions(true); URL loginURL = new URL(protocol, host, port, LOGIN_PATH); xmlRpcConfigLogin.setServerURL(loginURL); return xmlRpcConfigLogin; } private XmlRpcClientConfig getExecutionConfig() throws MalformedURLException { XmlRpcClientConfigImpl xmlRpcConfigLogin = new XmlRpcClientConfigImpl(); xmlRpcConfigLogin.setEnabledForExtensions(true); URL loginURL = new URL(protocol, host, port, EXECUTION_PATH); xmlRpcConfigLogin.setServerURL(loginURL); return xmlRpcConfigLogin; } public int connect() { try { XmlRpcClientConfig loginConfig = getLoginConfig(); client.setConfig(loginConfig); Object[] params = new Object[]{instance, username, password}; Object id = client.execute("login", params); if (id instanceof Integer) { uid = (Integer) id; return uid; } return -1; } catch (XmlRpcException e) { e.printStackTrace(); return -2; } catch (Exception e) { e.printStackTrace(); return -3; } } private Object[] getSearchFilters(Map<String, Object> filterMap){ List<Object[]> filterList = new ArrayList<Object[]>(); for(Map.Entry<String, Object> entry : filterMap.entrySet()){ String key = entry.getKey(); Object value = entry.getValue(); Object[] filter = new Object[]{key, "=", value}; filterList.add(filter); } return filterList.toArray(); } public Integer create(String object, Map<String, Object> valueMap) throws MalformedURLException, XmlRpcException { XmlRpcClientConfig executionConfig = getExecutionConfig(); client.setConfig(executionConfig); Object[] params = new Object[]{instance, uid, password, object, CREATE, valueMap}; Object result = client.execute("execute", params); if(result instanceof Integer){ int id = (Integer)result; return id; } return -1; } public Boolean unlink(String object, Integer[] ids) throws MalformedURLException, XmlRpcException { XmlRpcClientConfig executionConfig = getExecutionConfig(); client.setConfig(executionConfig); Object[] params = new Object[]{instance, uid, password, object, UNLINK, ids}; Object result = client.execute("execute", params); if(result instanceof Boolean){ return (Boolean)result; } return null; } public Boolean write(String object, Integer[] ids, Map<String, Object> valueMap) throws MalformedURLException, XmlRpcException { XmlRpcClientConfig executionConfig = getExecutionConfig(); client.setConfig(executionConfig); Object[] params = new Object[]{instance, uid, password, object, WRITE, ids, valueMap, null}; Object result = client.execute("execute", params); if(result instanceof Boolean){ return (Boolean)result; } return null; } public Integer[] search(String object, Map<String, Object> filterMap) throws MalformedURLException, XmlRpcException { XmlRpcClientConfig executionConfig = getExecutionConfig(); client.setConfig(executionConfig); Object[] filters = getSearchFilters(filterMap); Object[] params = new Object[]{instance, uid, password, object, SEARCH, filters, 0, 0, null}; Object result = client.execute("execute", params); if(result instanceof Object[]){ Object[] resultA = (Object[]) result; Integer[] ids = new Integer[resultA.length]; for(int i = 0; i < resultA.length; i++ ){ Object o = resultA[i]; int id = (Integer)o; ids[i] = id; } return ids; } return null; } public List<Map<String, Object>> read(String object, Integer[] ids, String[] fields) throws MalformedURLException, XmlRpcException { XmlRpcClientConfig executionConfig = getExecutionConfig(); client.setConfig(executionConfig); Object[] params = new Object[]{instance, uid, password, object, READ, ids, fields, null}; Object result = client.execute("execute", params); List<Map<String, Object>> records = new ArrayList<Map<String, Object>>(); if(result instanceof Object[]) { for (Object row : (Object[]) result) { Map<String, Object> map = (HashMap<String, Object>) row; records.add(map); } return records; } return null; } private static String getArrayString(Object[] array){ StringBuilder sb = new StringBuilder(); sb.append("["); for(Object element : array){ if(sb.length() > 1){ sb.append(",\t"); } sb.append(element); } sb.append("]"); return sb.toString(); } public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, MalformedURLException, XmlRpcException { String host = "127.0.0.1"; int port = 8069; String instance = "20140803"; String username = "admin"; String password = "admin"; String object = "test"; CmpClient client = new CmpClient(host, port, instance, username, password); // Test connect() int uid = client.connect(); if(uid < 0){ System.err.println("Bad username or password !"); return; }else { System.out.println("UID:\t" + uid); } // Test create() Map createValues = new HashMap<String, Object>(); createValues.put("name", "test"); Integer id = client.create(object, createValues); if(id < 0){ System.err.println("Creation Failed"); }else { System.out.println("Created ID:\t" + id); } // Test unlink() Integer[] unlinkIds = new Integer[]{1}; boolean unlinked = client.unlink(object, unlinkIds); System.out.println("Unlinked:\t" + unlinked); // Test write() Integer[] writeIds = new Integer[]{1}; Map writeValues = new HashMap<String, Object>(); writeValues.put("name", "test1"); boolean writen = client.write(object, writeIds, writeValues); System.out.println("Writen:\t" + writen); // Test search() Map filterMap = new HashMap<String, Object>(); filterMap.put("name", "test1"); Integer[] searchedIds = client.search(object, filterMap); System.out.println("Searched IDS:\t" + getArrayString(searchedIds)); // Test read() Integer[] readIds = new Integer[]{1}; String[] readFields = new String[]{"name", "description"}; List<Map<String, Object>> records = client.read(object, readIds, readFields); System.out.println("Read:"); for(Map<String, Object> map : records){ System.out.println(map); } }}
需要使用的jar包:xmlrpc-client-3.1.3.jar, xmlrpc-common-3.1.3.jar, ws-commons-util-1.0.2.jar
The jar files required:xmlrpc-client-3.1.3.jar, xmlrpc-common-3.1.3.jar, ws-commons-util-1.0.2.jar
0 0
- OpenERP-Java调用XML-RPC接口示例(Examples for calling XML-RPC interfaces by Java)
- XML-RPC Examples
- 基于XML-RPC的远程调用(Python,Java)
- 基于XML-RPC的远程调用(Python,Java)
- XML-RPC 示例
- XML-RPC的java实现
- xml-rpc远程调用
- Java for XML: JAXP、JAXB、JAXM、JAX-RPC、JAX-WS
- Java RPC通信机制之XML-RPC:Apache XML-RPC 3.0开发简介
- Java RPC通信机制之XML-RPC:Apache XML-RPC 3.0开发简介
- Java RPC通信机制之XML-RPC:Apache XML-RPC 3.0开发简介
- Odoo(OpenERP)开发实践:通过XML-RPC接口访问Odoo数据库
- JAVA实现XML-RPC客户端和服务端
- java.lang.NoClassDefFoundError: javax/xml/rpc/Service
- XML-RPC Library for PHP
- 使用 xml-rpc 远程调用
- PHP xml-rpc远程调用
- xml-rpc简单服务器调用
- 世事难料!杨台,一路走好!
- mysql字符设置
- zoj 3310 - Unrequited Love
- distributor之Interrupt Set-Enable Registers, GICD_ISENABLERn
- JAVACC 入门(转载)
- OpenERP-Java调用XML-RPC接口示例(Examples for calling XML-RPC interfaces by Java)
- 坦克大战项目
- POJ1656
- 面试题之输入一个数代表多少字节,输出其对应的GBytes/Mbytes/Kbytes/Bytes
- How to create iOS 8 Today extension and share data with containing app – tutorial
- C++中stl使用过程中的一些tips
- 分治法之快速排序
- hdu 5033 Building
- c++学习笔记之友元