parser = APIJSONApplication.DEFAULT_APIJSON_CREATOR.createParser();
- parser.setMethod(method);
- if (parser instanceof APIJSONParser) {
- ((APIJSONParser) parser).setSession(session);
- }
- return parser;
- }
-
- public String parse(String request, HttpSession session, RequestMethod method) {
- return newParser(session, method).parse(request);
- }
-
- //通用接口,非事务型操作 和 简单事务型操作 都可通过这些接口自动化实现<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-
- /**获取
- * @param request 只用String,避免encode后未decode
- * @param session
- * @return
- * @see {@link RequestMethod#GET}
- */
- public String get(String request, HttpSession session) {
- return parse(request, session, GET);
- }
-
- /**计数
- * @param request 只用String,避免encode后未decode
- * @param session
- * @return
- * @see {@link RequestMethod#HEAD}
- */
- public String head(String request, HttpSession session) {
- return parse(request, session, HEAD);
- }
-
- /**限制性GET,request和response都非明文,浏览器看不到,用于对安全性要求高的GET请求
- * @param request 只用String,避免encode后未decode
- * @param session
- * @return
- * @see {@link RequestMethod#GETS}
- */
- public String gets(String request, HttpSession session) {
- return parse(request, session, GETS);
- }
-
- /**限制性HEAD,request和response都非明文,浏览器看不到,用于对安全性要求高的HEAD请求
- * @param request 只用String,避免encode后未decode
- * @param session
- * @return
- * @see {@link RequestMethod#HEADS}
- */
- public String heads(String request, HttpSession session) {
- return parse(request, session, HEADS);
- }
-
- /**新增
- * @param request 只用String,避免encode后未decode
- * @param session
- * @return
- * @see {@link RequestMethod#POST}
- */
- public String post(String request, HttpSession session) {
- return parse(request, session, POST);
- }
-
- /**修改
- * @param request 只用String,避免encode后未decode
- * @param session
- * @return
- * @see {@link RequestMethod#PUT}
- */
- public String put(String request, HttpSession session) {
- return parse(request, session, PUT);
- }
-
- /**删除
- * @param request 只用String,避免encode后未decode
- * @param session
- * @return
- * @see {@link RequestMethod#DELETE}
- */
- public String delete(String request, HttpSession session) {
- return parse(request, session, DELETE);
- }
-
-
- //通用接口,非事务型操作 和 简单事务型操作 都可通过这些接口自动化实现>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
-
-
-
- /**重新加载配置
- * @param request
- * @return
- * @see
- *
- {
- "type": "ALL", //重载对象,ALL, FUNCTION, REQUEST, ACCESS,非必须
- "phone": "13000082001",
- "verify": "1234567" //验证码,对应类型为 Verify.TYPE_RELOAD
- }
- *
- */
- public JSONObject reload(String type) {
- JSONObject result = APIJSONParser.newSuccessResult();
-
- boolean reloadAll = StringUtil.isEmpty(type, true) || "ALL".equals(type);
-
- if (reloadAll || "FUNCTION".equals(type)) {
- try {
- result.put(FUNCTION_, APIJSONFunctionParser.init());
- } catch (ServerException e) {
- e.printStackTrace();
- result.put(FUNCTION_, APIJSONParser.newErrorResult(e));
- }
- }
-
- if (reloadAll || "REQUEST".equals(type)) {
- try {
- result.put(REQUEST_, StructureUtil.init());
- } catch (ServerException e) {
- e.printStackTrace();
- result.put(REQUEST_, APIJSONParser.newErrorResult(e));
- }
- }
-
- if (reloadAll || "ACCESS".equals(type)) {
- try {
- result.put(ACCESS_, APIJSONVerifier.init());
- } catch (ServerException e) {
- e.printStackTrace();
- result.put(ACCESS_, APIJSONParser.newErrorResult(e));
- }
- }
-
- return result;
- }
-
-
- /**用户登录
- * @param session
- * @param visitor
- * @param version
- * @param format
- * @param defaults
- * @return 返回类型设置为 Object 是为了子类重写时可以有返回值,避免因为冲突而另写一个有返回值的登录方法
- */
- public Object login(@NotNull HttpSession session, Visitor visitor, Integer version, Boolean format, JSONObject defaults) {
- //登录状态保存至session
- session.setAttribute(VISITOR_ID, visitor.getId()); //用户id
- session.setAttribute(VISITOR_, visitor); //用户
- session.setAttribute(VERSION, version); //全局默认版本号
- session.setAttribute(FORMAT, format); //全局默认格式化配置
- session.setAttribute(DEFAULTS, defaults); //给每个请求JSON最外层加的字段
- return null;
- }
-
- /**退出登录,清空session
- * @param session
- * @return 返回类型设置为 Object 是为了子类重写时可以有返回值,避免因为冲突而另写一个有返回值的登录方法
- */
- public Object logout(@NotNull HttpSession session) {
- Object userId = APIJSONVerifier.getVisitorId(session);//必须在session.invalidate();前!
- Log.d(TAG, "logout userId = " + userId + "; session.getId() = " + (session == null ? null : session.getId()));
- session.invalidate();
- return null;
- }
-
-
- public JSONObject invokeMethod(String request) {
- return MethodUtil.invokeMethod(request);
- }
-
- public JSONObject listMethod(String request) {
- return MethodUtil.listMethod(request);
- }
-
-}
diff --git a/APIJSONFramework/src/main/java/apijson/framework/APIJSONCreator.java b/APIJSONFramework/src/main/java/apijson/framework/APIJSONCreator.java
deleted file mode 100644
index 8fb14eaf5..000000000
--- a/APIJSONFramework/src/main/java/apijson/framework/APIJSONCreator.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package apijson.framework;
-
-import apijson.orm.FunctionParser;
-import apijson.orm.Parser;
-import apijson.orm.ParserCreator;
-import apijson.orm.SQLConfig;
-import apijson.orm.SQLCreator;
-import apijson.orm.SQLExecutor;
-import apijson.orm.Verifier;
-import apijson.orm.VerifierCreator;
-
-/**APIJSON相关创建器
- * @author Lemon
- */
-public class APIJSONCreator implements ParserCreator, VerifierCreator, SQLCreator {
-
- @Override
- public Parser createParser() {
- return new APIJSONParser();
- }
-
- @Override
- public FunctionParser createFunctionParser() {
- return new APIJSONFunctionParser();
- }
-
- @Override
- public Verifier createVerifier() {
- return new APIJSONVerifier();
- }
-
- @Override
- public SQLConfig createSQLConfig() {
- return new APIJSONSQLConfig();
- }
-
- @Override
- public SQLExecutor createSQLExecutor() {
- return new APIJSONSQLExecutor();
- }
-
-}
diff --git a/APIJSONFramework/src/main/java/apijson/framework/APIJSONFunctionParser.java b/APIJSONFramework/src/main/java/apijson/framework/APIJSONFunctionParser.java
deleted file mode 100755
index 1f045c455..000000000
--- a/APIJSONFramework/src/main/java/apijson/framework/APIJSONFunctionParser.java
+++ /dev/null
@@ -1,643 +0,0 @@
-/*Copyright ©2016 TommyLemon(https://github.com/TommyLemon/APIJSON)
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.*/
-
-package apijson.framework;
-
-import static apijson.framework.APIJSONConstant.FUNCTION_;
-
-import java.io.IOException;
-import java.rmi.ServerException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.servlet.http.HttpSession;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-
-import apijson.JSON;
-import apijson.JSONResponse;
-import apijson.Log;
-import apijson.NotNull;
-import apijson.RequestMethod;
-import apijson.RequestRole;
-import apijson.StringUtil;
-import apijson.framework.MethodUtil.Argument;
-import apijson.orm.AbstractFunctionParser;
-import apijson.orm.JSONRequest;
-import apijson.orm.ParserCreator;
-
-
-/**可远程调用的函数类
- * @author Lemon
- */
-public class APIJSONFunctionParser extends AbstractFunctionParser {
- public static final String TAG = "APIJSONFunctionParser";
-
- private HttpSession session;
- public APIJSONFunctionParser() {
- this(null);
- }
- public APIJSONFunctionParser(HttpSession session) {
- this(null, null, 0, null, session);
- }
- public APIJSONFunctionParser(RequestMethod method, String tag, int version, JSONObject request, HttpSession session) {
- super(method, tag, version, request);
- setSession(session);
- }
- public HttpSession getSession() {
- return session;
- }
- public APIJSONFunctionParser setSession(HttpSession session) {
- this.session = session;
- return this;
- }
-
- @Override
- public APIJSONFunctionParser setMethod(RequestMethod method) {
- super.setMethod(method);
- return this;
- }
- @Override
- public APIJSONFunctionParser setTag(String tag) {
- super.setTag(tag);
- return this;
- }
- @Override
- public APIJSONFunctionParser setVersion(int version) {
- super.setVersion(version);
- return this;
- }
-
- /**初始化,加载所有远程函数配置,并校验是否已在应用层代码实现
- * @return
- * @throws ServerException
- */
- public static JSONObject init() throws ServerException {
- return init(false);
- }
- /**初始化,加载所有远程函数配置,并校验是否已在应用层代码实现
- * @param shutdownWhenServerError
- * @return
- * @throws ServerException
- */
- public static JSONObject init(boolean shutdownWhenServerError) throws ServerException {
- return init(shutdownWhenServerError, null);
- }
- /**初始化,加载所有远程函数配置,并校验是否已在应用层代码实现
- * @param creator
- * @return
- * @throws ServerException
- */
- public static JSONObject init(ParserCreator creator) throws ServerException {
- return init(false, creator);
- }
- /**初始化,加载所有远程函数配置,并校验是否已在应用层代码实现
- * @param shutdownWhenServerError
- * @param creator
- * @return
- * @throws ServerException
- */
- public static JSONObject init(boolean shutdownWhenServerError, ParserCreator creator) throws ServerException {
- JSONObject request = new JSONObject();
-
- { //Function[]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- JSONRequest functionItem = new JSONRequest();
-
- { //Function<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- JSONRequest function = new JSONRequest();
- functionItem.put(FUNCTION_, function);
- } //Function>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
- request.putAll(functionItem.toArray(0, 0, FUNCTION_));
- } //Function[]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
- if (creator == null) {
- creator = APIJSONApplication.DEFAULT_APIJSON_CREATOR;
- }
-
- JSONObject response = creator.createParser().setMethod(RequestMethod.GET).setNeedVerify(true).parseResponse(request);
- if (JSONResponse.isSuccess(response) == false) {
- onServerError("\n\n\n\n\n !!!! 查询远程函数异常 !!!\n" + response.getString(JSONResponse.KEY_MSG) + "\n\n\n\n\n", shutdownWhenServerError);
- }
-
- JSONArray list = response.getJSONArray(FUNCTION_ + "[]");
- if (list == null || list.isEmpty()) {
- Log.w(TAG, "init list == null || list.isEmpty(),没有可用的远程函数");
- throw new NullPointerException("没有可用的远程函数");
- }
-
- JSONObject item;
- for (int i = 0; i < list.size(); i++) {
- item = list.getJSONObject(i);
- if (item == null) {
- continue;
- }
-
- JSONObject demo = JSON.parseObject(item.getString("demo"));
- if (demo == null) {
- onServerError("字段 demo 的值必须为合法且非 null 的 JSONObejct 字符串!", shutdownWhenServerError);
- }
- String name = item.getString("name");
- if (demo.containsKey("result()") == false) {
- demo.put("result()", getFunctionCall(name, item.getString("arguments")));
- }
- // demo.put(JSONRequest.KEY_TAG, item.getString(JSONRequest.KEY_TAG));
- // demo.put(JSONRequest.KEY_VERSION, item.getInteger(JSONRequest.KEY_VERSION));
-
- FUNCTION_MAP.put(name, item); //必须在测试 invoke 前!
-
- String[] methods = StringUtil.split(item.getString("methods"));
- JSONObject r = new APIJSONParser(
- methods == null || methods.length <= 0 ? RequestMethod.GET : RequestMethod.valueOf(methods[0])
- , false
- )
- .setTag(item.getString(JSONRequest.KEY_TAG))
- .setVersion(item.getIntValue(JSONRequest.KEY_VERSION))
- .parseResponse(demo);
-
- if (JSONResponse.isSuccess(r) == false) {
- onServerError(JSONResponse.getMsg(r), shutdownWhenServerError);
- }
-
- }
-
- return response;
- }
-
-
- private static void onServerError(String msg, boolean shutdown) throws ServerException {
- Log.e(TAG, "\n远程函数文档测试未通过!\n请新增 demo 里的函数,或修改 Function 表里的 demo 为已有的函数示例!\n保证前端看到的远程函数文档是正确的!!!\n\n原因:\n" + msg);
-
- if (shutdown) {
- System.exit(1);
- } else {
- throw new ServerException(msg);
- }
- }
-
-
- public static void test() throws Exception {
- test(null);
- }
- public static void test(APIJSONFunctionParser function) throws Exception {
- int i0 = 1, i1 = -2;
- JSONObject request = new JSONObject();
- request.put("id", 10);
- request.put("i0", i0);
- request.put("i1", i1);
- JSONArray arr = new JSONArray();
- arr.add(new JSONObject());
- request.put("arr", arr);
-
- JSONArray array = new JSONArray();
- array.add(1);//new JSONObject());
- array.add(2);//new JSONObject());
- array.add(4);//new JSONObject());
- array.add(10);//new JSONObject());
- request.put("array", array);
-
- request.put("position", 1);
- request.put("@position", 0);
-
- request.put("key", "key");
- JSONObject object = new JSONObject();
- object.put("key", true);
- request.put("object", object);
-
- if (function == null) {
- function = new APIJSONFunctionParser(null, null, 1, null, null);
- }
-
- Log.i(TAG, "plus(1,-2) = " + function.invoke("plus(i0,i1)", request));
- Log.i(TAG, "count([1,2,4,10]) = " + function.invoke("countArray(array)", request));
- Log.i(TAG, "isContain([1,2,4,10], 10) = " + function.invoke("isContain(array,id)", request));
- Log.i(TAG, "getFromArray([1,2,4,10], 0) = " + function.invoke("getFromArray(array,@position)", request));
- Log.i(TAG, "getFromObject({key:true}, key) = " + function.invoke("getFromObject(object,key)", request));
-
- }
-
-
-
-
-
-
-
- /**获取远程函数的demo,如果没有就自动补全
- * @param request
- * @return
- * @throws ServerException
- */
- public JSONObject getFunctionDemo(@NotNull JSONObject request) {
- JSONObject demo = JSON.parseObject(request.getString("demo"));
- if (demo == null) {
- demo = new JSONObject();
- }
- if (demo.containsKey("result()") == false) {
- demo.put("result()", getFunctionCall(request.getString("name"), request.getString("arguments")));
- }
- return demo;
- }
-
- /**获取远程函数的demo,如果没有就自动补全
- * @param request
- * @return
- */
- public String getFunctionDetail(@NotNull JSONObject request) {
- return getFunctionCall(request.getString("name"), request.getString("arguments"))
- + ": " + StringUtil.getTrimedString(request.getString("detail"));
- }
- /**获取函数调用代码
- * @param name
- * @param arguments
- * @return
- */
- private static String getFunctionCall(String name, String arguments) {
- return name + "(" + StringUtil.getTrimedString(arguments) + ")";
- }
-
- /**TODO 仅用来测试 "key-()":"getIdList()" 和 "key()":"getIdList()"
- * @param request
- * @return JSONArray 只能用JSONArray,用long[]会在SQLConfig解析崩溃
- * @throws Exception
- */
- public JSONArray getIdList(@NotNull JSONObject request) {
- return new JSONArray(new ArrayList