package util; import java.util.HashMap; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.codehaus.jackson.map.ObjectMapper; public class Test { private static ObjectMapper mapper = new ObjectMapper(); /** * @param args */ public static void main(String[] args) { Map<String, Object> p = new HashMap<String, Object>(); p.put("username", "rzy阮智勇"); p.put("pwd", "111111"); Object result = call("PmsService.test", p, 1, 5); System.out.println("===" + result); } public static Object call(String sid, Object... args) { String url = "http://localhost:8080/PMS/handler"; String result = null; HttpClient client = new DefaultHttpClient(); try { HttpPost post = new HttpPost(url); post.addHeader("api", sid); StringEntity s = new StringEntity(mapper.writeValueAsString(args), "UTF-8"); s.setContentType("application/json"); post.setEntity(s); HttpResponse res = client.execute(post); if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { HttpEntity entity = res.getEntity(); result = EntityUtils.toString(entity); } } catch (Exception e) { throw new RuntimeException("请求失败", e); } finally { client.getConnectionManager().shutdown(); } return result; } }
package util; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.MethodUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.codehaus.jackson.map.ObjectMapper; @SuppressWarnings("serial") public class Handler extends HttpServlet { ServletContext context; static ObjectMapper mapper = new ObjectMapper(); static Logger log = Logger.getLogger(Handler.class); @Override public void init(ServletConfig config) throws ServletException { this.context = config.getServletContext(); super.init(config); } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServiceContext sc = ServiceContext.begin(this.context, request, response); response.setContentType("application/json;charset=utf-8"); Object result = null; String api = request.getHeader("api"); String url = request.getRequestURI(); Object[] args = mapper.readValue(request.getInputStream(), Object[].class); String className = StringUtils.substringBeforeLast(api, "."); String methodName = StringUtils.substringAfterLast(api, "."); String packageName = StringUtils.substringAfterLast(url, "/"); log.debug("api==>" + api); for (int i = 0, len = args.length; i < len; i++) { log.debug("Parameter" + i + "==>" + args[i]); } try { Class cls = Class.forName(packageName + "." + className); if (args.length > 0) { Class[] parameterTypes = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { parameterTypes[i] = args[i].getClass(); } result = MethodUtils.invokeMethod(ServiceFactory.getService(cls), methodName, args, parameterTypes); } else { result = MethodUtils.invokeMethod(ServiceFactory.getService(cls), methodName, null); } if (result != null) { log.debug("Result==>" + result); mapper.writeValue(response.getWriter(), result); } } catch (ClassNotFoundException e) { log.debug("Exception in service."); log.debug("service未发现" + e.getCause().getMessage()); } catch (NoSuchMethodException e) { log.debug("Exception in service."); log.debug("service对应的方法未发现" + e.getMessage()); } catch (InvocationTargetException e) { log.debug("Exception in service."); Throwable t = e.getCause(); if (t instanceof DataAccessException) { String error = "database exception." + t.getMessage(); mapper.writeValue(response.getWriter(), error); log.debug(error); } else { log.debug(t.getMessage()); } } catch (Exception e) { log.debug("Exception in service." + e.getCause().getMessage()); } finally { if (sc != null) { sc.end(); } } } }
package util; import java.lang.reflect.Method; import java.util.regex.Pattern; import net.sf.cglib.proxy.Callback; import net.sf.cglib.proxy.CallbackFilter; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import net.sf.cglib.proxy.NoOp; import org.apache.log4j.Logger; public class ServiceFactory { static Logger log = Logger.getLogger(ServiceFactory.class); static MethodInterceptor interceptor = new MethodInterceptor() { public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { Object result = null; try { log.debug("事务开始"); DBUtils.beginTransaction(); result = methodProxy.invokeSuper(obj, args); log.debug("事务提交"); DBUtils.commitTransaction(); StringBuffer logs = new StringBuffer(); String api = ServiceContext.getHeader("api"); String username = ServiceContext.getHeader("username"); String ip = ServiceContext.getIP(); String time = Utils.now("yyyy-MM-dd HH:mm:ss"); logs.append(username).append("|"); logs.append(ip).append("|"); logs.append(time).append("|"); logs.append(api).append("|"); logs.append(1).append("|"); logs.append("memo"); LogHandler.put(logs.toString()); } catch (Exception e) { log.debug("事务回滚"); DBUtils.rollbackTransaction(); throw e; } return result; } }; static CallbackFilter filter = new CallbackFilter() { public int accept(Method arg0) { return Pattern.compile("^(add|del|mod|set|reg|active|cancel)").matcher(arg0.getName()).find() ? 0 : 1; } }; @SuppressWarnings("unchecked") public static <T> T getService(Class<T> cls) { try { Enhancer en = new Enhancer(); en.setSuperclass(cls); en.setCallbacks(new Callback[] { interceptor, NoOp.INSTANCE }); en.setCallbackFilter(filter); return (T) en.create(); } catch (Exception e) { log.debug("Create " + cls.getSimpleName() + " Failure!"); e.printStackTrace(); return null; } } }
相关推荐
通过上述知识点的阐述,我们可以看到基于JSON的分布式系统架构为当前技术背景下的分布式系统设计提供了一个高效、轻量、跨平台的解决方案。随着技术的不断进步和应用场景的扩展,这些知识点在未来的技术发展中仍然...
本篇文档介绍了一种基于JSON格式的智能家居协议栈的设计。该协议栈旨在解决智能家居行业存在的多种问题,包括低速率、低时延和设备异构性问题。文中提到的JSON是一种轻量级的数据交换格式,以文本形式存储,易于人们...
STM32上json协议解析代码主要涉及了嵌入式系统中的微控制器编程、串行通信、传感器控制以及数据解析等多个方面。STM32是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex-M内核的微控制器系列,以其高性能...
本项目则是在Swoole的基础上,构建了一个基于JSON协议的远程过程调用(RPC)框架。通过此框架,开发者可以轻松地实现服务间的通信,提高系统的可扩展性和解耦性。 【描述】 这个简易的JSON-RPC框架是作者自己的实践...
基于JSON-RPC 1.0的C语言实现,如"jsonrpc-c-master",提供了一种在C语言环境中构建服务端应用的方法,尤其适用于嵌入式系统或对性能有严格要求的环境。 **JSON-RPC 1.0协议基础** JSON-RPC 1.0是一个简单的请求/...
总的来说,这个基于JSON-REST-HTTP架构的Android温度监控应用,利用了Android平台的网络库与服务器进行数据交换,服务器端通过Java EE提供了RESTful API,实现了远程监控房间温度的功能。这样的系统设计使得客户端...
【标题】基于Python实现的HTTP+JSON协议接口自动化测试框架 在软件开发过程中,接口测试是确保系统间数据传输正确性和系统集成稳定性的重要环节。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,而...
在实施过程中,开发者需要区分OCPP-S(基于SOAP的实现)和OCPP-J(JSON的实现),并使用不同的后缀(-S或-J)来区分这两种协议。这是为了在通信时避免对实现类型的误解。 OCPP JSON 1.6协议的主要内容包括: 1. ...
jxt(JSON Text)是一个针对强结构型文档数据交换的开放性表示协议,采用PHP、HTML和JavaScript进行开发,源码包含95个文件,其中72个HTML文件、10个JavaScript文件、8个PHP文件、2个Git忽略文件和1个Markdown文件。...
【基于JSON的RESTful接口协议】是现代Web服务设计中广泛采用的一种标准,它强调简洁、直接的交互方式,尤其适合互联网应用。REST(Representational State Transfer,表述性状态转移)是一个架构风格,由Roy ...
4. 自动校验:APIJSON协议允许定义字段的校验规则,如类型、长度、范围等,可以自动进行数据验证,确保输入的合法性和安全性。 5. 动态SQL:APIJSON的ORM库支持动态SQL,可以根据请求参数自动生成合适的SQL语句,...
在本文中,我们将深入探讨JSON协议下的数据序列化和反序列化,以及如何利用动态链接库和教程来高效地操作JSON数据。 **一、JSON数据序列化** 数据序列化是指将数据结构或对象转换为可传输或存储的格式。在JSON中,...
【基于JSON的RESTful接口协议】是现代Web服务设计中广泛采用的一种标准,它强调简洁、直接的交互方式。REST,即表述性状态转移(Representational State Transfer),是由Roy Fielding在其博士论文中提出的架构风格...
其中,基于JSON的整合方式通过映射机制,将不同数据库的数据结构转化为统一的JSON格式,从而实现数据交换。 3.1 JSON的解码与编码 JSON的解析是整合过程的关键步骤,包括将JSON字符串转化为Java对象(POJO,Plain ...
2. cJSON源代码文件(如`cjson.c`):实现了cJSON库的功能,包括解析JSON字符串、创建JSON对象、遍历JSON结构等功能。 3. 测试用例:可能包含一个或多个示例程序,用于验证cJSON库的正确性,开发者可以通过运行这些...
APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库。 为各种增删改查提供了完全自动化的万能通用接口,零代码实时满足千变万化的各种新增和变更需求。能大幅降低开发和沟通成本,...
FIWARE IoT Agent,用于基于JSON的协议 物联网代理,用于基于JSON的协议(带有 , 和传输)。 该IoT代理旨在与上下文代理的接口之间的桥梁。 它基于IoT Agent Node.js库。 有关FIWARE IoT代理框架,其体系结构和公共...
1. **命令框架**:OCPP协议基于命令模型,包括客户端(充电站)向服务器(充电网络管理系统)发送的请求(Request)和服务器回应的响应(Response)。JSON格式用于封装这些命令,例如“BootNotification”,...
Swift中的Marshal库是一款高效、易读且基于协议编程的JSON解析工具,专为提升Swift开发者在处理JSON数据时的体验而设计。它充分利用了Swift语言的强类型特性和协议扩展功能,提供了简洁的API,使得JSON序列化和反...
本项目是一个基于 C# 实现的 JSON-RPC 服务器,它利用 JSON-Patch 来实现对象的同步。 首先,我们需要理解 JSON-Patch。JSON-Patch 是一种标准(RFC 6902),它定义了一种操作序列,这些操作可以应用于 JSON 对象来...