Просмотр исходного кода

Merge branch 'fix/#452' into 'wrdp'

修正jaxrs 的 response

See merge request o2oa/o2oa!2651
o2null 5 лет назад
Родитель
Сommit
5a0981a05a

+ 9 - 25
o2server/x_base_core_project/src/main/java/com/x/base/core/project/connection/HttpConnection.java

@@ -34,9 +34,14 @@ public class HttpConnection {
 	public static final String Content_Type = "Content-Type";
 	public static final String Content_Type_Value = "application/json;charset=UTF-8";
 
+	public static final String METHOD_POST = "POST";
+	public static final String METHOD_GET = "GET";
+	public static final String METHOD_PUT = "PUT";
+	public static final String METHOD_DELETE = "DELETE";
+
 	public static String getAsString(String address, List<NameValuePair> heads) throws Exception {
 		HttpURLConnection connection = prepare(address, heads);
-		connection.setRequestMethod("GET");
+		connection.setRequestMethod(METHOD_GET);
 		connection.setDoOutput(false);
 		connection.setDoInput(true);
 		String str = readResultString(connection);
@@ -58,7 +63,7 @@ public class HttpConnection {
 
 	public static String postAsString(String address, List<NameValuePair> heads, String body) throws Exception {
 		HttpURLConnection connection = prepare(address, heads);
-		connection.setRequestMethod("POST");
+		connection.setRequestMethod(METHOD_POST);
 		connection.setDoOutput(true);
 		connection.setDoInput(true);
 		connection.connect();
@@ -84,7 +89,7 @@ public class HttpConnection {
 
 	public static String putAsString(String address, List<NameValuePair> heads, String body) throws Exception {
 		HttpURLConnection connection = prepare(address, heads);
-		connection.setRequestMethod("PUT");
+		connection.setRequestMethod(METHOD_PUT);
 		connection.setDoOutput(true);
 		connection.setDoInput(true);
 		connection.connect();
@@ -110,7 +115,7 @@ public class HttpConnection {
 
 	public static String deleteAsString(String address, List<NameValuePair> heads) throws Exception {
 		HttpURLConnection connection = prepare(address, heads);
-		connection.setRequestMethod("DELETE");
+		connection.setRequestMethod(METHOD_DELETE);
 		connection.setDoOutput(false);
 		connection.setDoInput(true);
 		String str = readResultString(connection);
@@ -169,30 +174,9 @@ public class HttpConnection {
 		try (OutputStream output = connection.getOutputStream()) {
 			if (StringUtils.isNotEmpty(body)) {
 				IOUtils.write(body, output, StandardCharsets.UTF_8);
-				// IOUtils.write(body, output);
 				output.flush();
 			}
 		}
 	}
 
-	// private static void doOutput(HttpURLConnection connection, byte[] bytes)
-	// throws Exception {
-	// try (OutputStream output = connection.getOutputStream()) {
-	// if (null != bytes) {
-	// IOUtils.write(bytes, output);
-	// output.flush();
-	// }
-	// }
-	// }
-
-	// private static void doOutput(HttpURLConnection connection, String body,
-	// List<File> files) throws Exception {
-	// try (OutputStream output = connection.getOutputStream()) {
-	// if (StringUtils.isNotEmpty(body)) {
-	// IOUtils.write(body, output, StandardCharsets.UTF_8);
-	// // IOUtils.write(body, output);
-	// output.flush();
-	// }
-	// }
-	// }
 }

+ 12 - 0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/ExceptionJaxrsHttpDelete.java

@@ -0,0 +1,12 @@
+package com.x.processplatform.service.processing.processor.invoke;
+
+import com.x.base.core.project.exception.RunningException;
+
+class ExceptionJaxrsHttpDelete extends RunningException {
+
+	private static final long serialVersionUID = 9085364457175859374L;
+
+	ExceptionJaxrsHttpDelete(Throwable cause) {
+		super(cause);
+	}
+}

+ 12 - 0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/ExceptionJaxrsHttpGet.java

@@ -0,0 +1,12 @@
+package com.x.processplatform.service.processing.processor.invoke;
+
+import com.x.base.core.project.exception.RunningException;
+
+class ExceptionJaxrsHttpGet extends RunningException {
+
+	private static final long serialVersionUID = 9085364457175859374L;
+
+	ExceptionJaxrsHttpGet(Throwable cause) {
+		super(cause);
+	}
+}

+ 12 - 0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/ExceptionJaxrsHttpPost.java

@@ -0,0 +1,12 @@
+package com.x.processplatform.service.processing.processor.invoke;
+
+import com.x.base.core.project.exception.RunningException;
+
+class ExceptionJaxrsHttpPost extends RunningException {
+
+	private static final long serialVersionUID = 9085364457175859374L;
+
+	ExceptionJaxrsHttpPost(Throwable cause) {
+		super(cause);
+	}
+}

+ 12 - 0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/ExceptionJaxrsHttpPut.java

@@ -0,0 +1,12 @@
+package com.x.processplatform.service.processing.processor.invoke;
+
+import com.x.base.core.project.exception.RunningException;
+
+class ExceptionJaxrsHttpPut extends RunningException {
+
+	private static final long serialVersionUID = 9085364457175859374L;
+
+	ExceptionJaxrsHttpPut(Throwable cause) {
+		super(cause);
+	}
+}

+ 13 - 0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/ExceptionUnknownHttpMethod.java

@@ -0,0 +1,13 @@
+package com.x.processplatform.service.processing.processor.invoke;
+
+import com.x.base.core.project.exception.RunningException;
+
+class ExceptionUnknownHttpMethod extends RunningException {
+
+	private static final long serialVersionUID = 9085364457175859374L;
+
+	ExceptionUnknownHttpMethod(String method) {
+		super("未知http method:{}.",method);
+	}
+
+}

+ 61 - 43
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/InvokeExecutor.java

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map.Entry;
 
+import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import com.x.base.core.project.bean.NameValuePair;
@@ -46,74 +47,91 @@ public class InvokeExecutor {
 		return result;
 	}
 
-	public Object execute(JaxwsObject o) throws Exception {
+	public Object execute(JaxwsObject o) {
 		WebservicesClient client = new WebservicesClient();
 		return client.jaxws(o.getAddress(), o.getMethod(), o.getParameters());
 	}
 
-	private String jaxrsHttpPost(JaxrsObject jaxrsObject) throws Exception {
-		if (jaxrsObject.getInternal()) {
-			return CipherConnectionAction.post(true, jaxrsObject.getAddress(), jaxrsObject.getBody()).getData()
-					.toString();
-		} else {
-			List<NameValuePair> heads = new ArrayList<>();
-			heads.add(new NameValuePair(HttpConnection.Content_Type, jaxrsObject.getContentType()));
-			if (null != jaxrsObject.getHead()) {
-				for (Entry<String, String> entry : jaxrsObject.getHead().entrySet()) {
-					heads.add(new NameValuePair(entry.getKey(), entry.getValue()));
+	private String jaxrsHttpPost(JaxrsObject jaxrsObject) {
+		try {
+			if (BooleanUtils.isTrue(jaxrsObject.getInternal())) {
+				return CipherConnectionAction.post(true, jaxrsObject.getAddress(), jaxrsObject.getBody()).getData()
+						.toString();
+			} else {
+				List<NameValuePair> heads = new ArrayList<>();
+				heads.add(new NameValuePair(HttpConnection.Content_Type, jaxrsObject.getContentType()));
+				if (null != jaxrsObject.getHead()) {
+					for (Entry<String, String> entry : jaxrsObject.getHead().entrySet()) {
+						heads.add(new NameValuePair(entry.getKey(), entry.getValue()));
+					}
 				}
+				return HttpConnection.postAsString(jaxrsObject.getAddress(), heads, jaxrsObject.getBody());
 			}
-			return HttpConnection.postAsString(jaxrsObject.getAddress(), heads, jaxrsObject.getBody());
+		} catch (Exception e) {
+			logger.error(new ExceptionJaxrsHttpPost(e));
 		}
+		return null;
 	}
 
 	private String jaxrsHttpPut(JaxrsObject jaxrsObject) throws Exception {
-		String value = "";
-		if (jaxrsObject.getInternal()) {
-			value =  CipherConnectionAction.post(true, jaxrsObject.getAddress(), jaxrsObject.getBody()).getData()
-					.toString();
-		
-		} else {
-			List<NameValuePair> heads = new ArrayList<>();
-			heads.add(new NameValuePair(HttpConnection.Content_Type, jaxrsObject.getContentType()));
-			if (null != jaxrsObject.getHead()) {
-				for (Entry<String, String> entry : jaxrsObject.getHead().entrySet()) {
-					heads.add(new NameValuePair(entry.getKey(), entry.getValue()));
+		try {
+			if (BooleanUtils.isTrue(jaxrsObject.getInternal())) {
+				return CipherConnectionAction.put(true, jaxrsObject.getAddress(), jaxrsObject.getBody()).getData()
+						.toString();
+			} else {
+				List<NameValuePair> heads = new ArrayList<>();
+				heads.add(new NameValuePair(HttpConnection.Content_Type, jaxrsObject.getContentType()));
+				if (null != jaxrsObject.getHead()) {
+					for (Entry<String, String> entry : jaxrsObject.getHead().entrySet()) {
+						heads.add(new NameValuePair(entry.getKey(), entry.getValue()));
+					}
 				}
+				return HttpConnection.putAsString(jaxrsObject.getAddress(), heads, jaxrsObject.getBody());
 			}
-			value =  HttpConnection.postAsString(jaxrsObject.getAddress(), heads, jaxrsObject.getBody());
+		} catch (Exception e) {
+			logger.error(new ExceptionJaxrsHttpPut(e));
 		}
-		return value;
+		return null;
 	}
 
 	private String jaxrsHttpGet(JaxrsObject jaxrsObject) throws Exception {
-		if (jaxrsObject.getInternal()) {
-			return CipherConnectionAction.get(true, jaxrsObject.getAddress()).getData().toString();
-		} else {
-			List<NameValuePair> heads = new ArrayList<>();
-			heads.add(new NameValuePair(HttpConnection.Content_Type, jaxrsObject.getContentType()));
-			if (null != jaxrsObject.getHead()) {
-				for (Entry<String, String> entry : jaxrsObject.getHead().entrySet()) {
-					heads.add(new NameValuePair(entry.getKey(), entry.getValue()));
+		try {
+			if (BooleanUtils.isTrue(jaxrsObject.getInternal())) {
+				return CipherConnectionAction.get(true, jaxrsObject.getAddress()).getData().toString();
+			} else {
+				List<NameValuePair> heads = new ArrayList<>();
+				heads.add(new NameValuePair(HttpConnection.Content_Type, jaxrsObject.getContentType()));
+				if (null != jaxrsObject.getHead()) {
+					for (Entry<String, String> entry : jaxrsObject.getHead().entrySet()) {
+						heads.add(new NameValuePair(entry.getKey(), entry.getValue()));
+					}
 				}
+				return HttpConnection.getAsString(jaxrsObject.getAddress(), heads);
 			}
-			return HttpConnection.getAsString(jaxrsObject.getAddress(), heads);
+		} catch (Exception e) {
+			logger.error(new ExceptionJaxrsHttpGet(e));
 		}
+		return null;
 	}
 
 	private String jaxrsHttpDelete(JaxrsObject jaxrsObject) throws Exception {
-		if (jaxrsObject.getInternal()) {
-			return CipherConnectionAction.delete(true, jaxrsObject.getAddress()).getData().toString();
-		} else {
-			List<NameValuePair> heads = new ArrayList<>();
-			heads.add(new NameValuePair(HttpConnection.Content_Type, jaxrsObject.getContentType()));
-			if (null != jaxrsObject.getHead()) {
-				for (Entry<String, String> entry : jaxrsObject.getHead().entrySet()) {
-					heads.add(new NameValuePair(entry.getKey(), entry.getValue()));
+		try {
+			if (BooleanUtils.isTrue(jaxrsObject.getInternal())) {
+				return CipherConnectionAction.delete(true, jaxrsObject.getAddress()).getData().toString();
+			} else {
+				List<NameValuePair> heads = new ArrayList<>();
+				heads.add(new NameValuePair(HttpConnection.Content_Type, jaxrsObject.getContentType()));
+				if (null != jaxrsObject.getHead()) {
+					for (Entry<String, String> entry : jaxrsObject.getHead().entrySet()) {
+						heads.add(new NameValuePair(entry.getKey(), entry.getValue()));
+					}
 				}
+				return HttpConnection.deleteAsString(jaxrsObject.getAddress(), heads);
 			}
-			return HttpConnection.deleteAsString(jaxrsObject.getAddress(), heads);
+		} catch (Exception e) {
+			logger.error(new ExceptionJaxrsHttpDelete(e));
 		}
+		return null;
 	}
 
 }

+ 176 - 142
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/InvokeProcessor.java

@@ -18,7 +18,9 @@ import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.project.Application;
 import com.x.base.core.project.connection.ActionResponse;
 import com.x.base.core.project.connection.CipherConnectionAction;
+import com.x.base.core.project.connection.HttpConnection;
 import com.x.base.core.project.exception.RunningException;
+import com.x.base.core.project.http.ActionResult.Type;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.script.ScriptFactory;
@@ -86,6 +88,7 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 	}
 
 	private void jaxwsInternal(AeiObjects aeiObjects, Invoke invoke) throws Exception {
+		// nothing
 	}
 
 	private void jaxwsExternal(AeiObjects aeiObjects, Invoke invoke) throws Exception {
@@ -107,8 +110,6 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 						Business.EVENT_INVOKEJAXWSRESPONSE);
 				scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXWSRESPONSE,
 						response);
-//				/* 重新注入对象需要重新运行 */
-//				ScriptFactory.initialScriptText().eval(scriptContext);
 				cs.eval(scriptContext);
 			}
 		}
@@ -123,8 +124,6 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 					aeiObjects.getActivity(), Business.EVENT_INVOKEJAXWSPARAMETER);
 			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_PARAMETERS,
 					parameters);
-//			/* 重新注入对象需要重新运行 */
-//			ScriptFactory.initialScriptText().eval(scriptContext);
 			cs.eval(scriptContext);
 		}
 		return parameters.toArray();
@@ -142,67 +141,18 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 		ActionResponse resp = null;
 		Class<?> clz = Class.forName("com.x.base.core.project." + invoke.getInternalProject());
 		String uri = this.jaxrsUrl(aeiObjects, invoke);
-		String body = "";
-		switch (StringUtils.lowerCase(invoke.getJaxrsMethod())) {
-		case "post":
-			body = this.jaxrsEvalBody(aeiObjects, invoke);
-			if (BooleanUtils.isTrue(invoke.getAsync())) {
-				JaxrsObject jaxrsObject = new JaxrsObject();
-				Application application = ThisApplication.context().applications().randomWithWeight(clz.getName());
-				jaxrsObject.setAddress(
-						StringTools.JoinUrl(application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri)));
-				jaxrsObject.setBody(body);
-				jaxrsObject.setInternal(invoke.getInternal());
-				jaxrsObject.setMethod("post");
-				jaxrsObject.setContentType(invoke.getJaxrsContentType());
-				ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
-			} else {
-				resp = ThisApplication.context().applications().postQuery(clz, uri, body);
-			}
+		switch (StringUtils.upperCase(invoke.getJaxrsMethod())) {
+		case HttpConnection.METHOD_POST:
+			resp = jaxrsInternalPost(aeiObjects, invoke, clz, uri);
 			break;
-		case "put":
-			body = this.jaxrsEvalBody(aeiObjects, invoke);
-			if (BooleanUtils.isTrue(invoke.getAsync())) {
-				JaxrsObject jaxrsObject = new JaxrsObject();
-				Application application = ThisApplication.context().applications().randomWithWeight(clz.getName());
-				jaxrsObject.setAddress(
-						StringTools.JoinUrl(application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri)));
-				jaxrsObject.setBody(body);
-				jaxrsObject.setInternal(invoke.getInternal());
-				jaxrsObject.setMethod("put");
-				jaxrsObject.setContentType(invoke.getJaxrsContentType());
-				ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
-			} else {
-				resp = ThisApplication.context().applications().putQuery(clz, uri, body);
-			}
+		case HttpConnection.METHOD_PUT:
+			resp = jaxrsInternalPut(aeiObjects, invoke, clz, uri);
 			break;
-		case "get":
-			if (BooleanUtils.isTrue(invoke.getAsync())) {
-				JaxrsObject jaxrsObject = new JaxrsObject();
-				Application application = ThisApplication.context().applications().randomWithWeight(clz.getName());
-				jaxrsObject.setAddress(
-						StringTools.JoinUrl(application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri)));
-				jaxrsObject.setInternal(invoke.getInternal());
-				jaxrsObject.setMethod("get");
-				jaxrsObject.setContentType(invoke.getJaxrsContentType());
-				ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
-			} else {
-				resp = ThisApplication.context().applications().getQuery(clz, uri);
-			}
+		case HttpConnection.METHOD_GET:
+			resp = jaxrsInternalGet(aeiObjects, invoke, clz, uri);
 			break;
-		case "delete":
-			if (BooleanUtils.isTrue(invoke.getAsync())) {
-				JaxrsObject jaxrsObject = new JaxrsObject();
-				Application application = ThisApplication.context().applications().randomWithWeight(clz.getName());
-				jaxrsObject.setAddress(
-						StringTools.JoinUrl(application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri)));
-				jaxrsObject.setInternal(invoke.getInternal());
-				jaxrsObject.setMethod("delete");
-				jaxrsObject.setContentType(invoke.getJaxrsContentType());
-				ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
-			} else {
-				resp = ThisApplication.context().applications().deleteQuery(clz, uri);
-			}
+		case HttpConnection.METHOD_DELETE:
+			resp = jaxrsInternalDelete(aeiObjects, invoke, clz, uri);
 			break;
 		case "head":
 			break;
@@ -213,16 +163,18 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 		case "trace":
 			break;
 		default:
-			throw new Exception("unknown http method " + invoke.getJaxrsMethod());
+			throw new ExceptionUnknownHttpMethod(invoke.getJaxrsMethod());
+		}
+		// 同步执行状态下进行调用判断
+		if ((!BooleanUtils.isTrue(invoke.getAsync()))
+				&& ((null == resp) || (!Objects.equals(Type.success, resp.getType())))) {
+			throw new RunningException("invoke url:{} not success, work:{}.", uri, aeiObjects.getWork().getId());
 		}
-		/** 进行错误监测 */
 		if (!BooleanUtils.isTrue(invoke.getAsync())) {
-			if (!Objects.equals(resp.getType(), ActionResponse.Type.success)) {
-				throw new RunningException("invoke url:{} not success, because:{}, work:{}.", uri, resp.getMessage(),
-						aeiObjects.getWork().getId());
-			}
 			WrapScriptObject jaxrsResponse = new WrapScriptObject();
-			jaxrsResponse.set(gson.toJson(resp.getData()));
+			if (null != resp) {
+				jaxrsResponse.set(gson.toJson(resp.getData()));
+			}
 			if ((StringUtils.isNotEmpty(invoke.getJaxrsResponseScript()))
 					|| (StringUtils.isNotEmpty(invoke.getJaxrsResponseScriptText()))) {
 				ScriptContext scriptContext = aeiObjects.scriptContext();
@@ -231,71 +183,100 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 						Business.EVENT_INVOKEJAXRSRESPONSE);
 				scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXRSRESPONSE,
 						jaxrsResponse);
-//				/* 重新注入对象需要重新运行 */
-//				ScriptFactory.initialScriptText().eval(scriptContext);
 				cs.eval(scriptContext);
 			}
 		}
 	}
 
+	private ActionResponse jaxrsInternalDelete(AeiObjects aeiObjects, Invoke invoke, Class<?> clz, String uri)
+			throws Exception {
+		if (BooleanUtils.isTrue(invoke.getAsync())) {
+			JaxrsObject jaxrsObject = new JaxrsObject();
+			Application application = ThisApplication.context().applications().randomWithWeight(clz.getName());
+			jaxrsObject
+					.setAddress(StringTools.JoinUrl(application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri)));
+			jaxrsObject.setInternal(invoke.getInternal());
+			jaxrsObject.setMethod(HttpConnection.METHOD_DELETE);
+			jaxrsObject.setContentType(invoke.getJaxrsContentType());
+			ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
+		} else {
+			return ThisApplication.context().applications().deleteQuery(clz, uri);
+		}
+		return null;
+	}
+
+	private ActionResponse jaxrsInternalGet(AeiObjects aeiObjects, Invoke invoke, Class<?> clz, String uri)
+			throws Exception {
+		if (BooleanUtils.isTrue(invoke.getAsync())) {
+			JaxrsObject jaxrsObject = new JaxrsObject();
+			Application application = ThisApplication.context().applications().randomWithWeight(clz.getName());
+			jaxrsObject
+					.setAddress(StringTools.JoinUrl(application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri)));
+			jaxrsObject.setInternal(invoke.getInternal());
+			jaxrsObject.setMethod(HttpConnection.METHOD_GET);
+			jaxrsObject.setContentType(invoke.getJaxrsContentType());
+			ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
+		} else {
+			return ThisApplication.context().applications().getQuery(clz, uri);
+		}
+		return null;
+	}
+
+	private ActionResponse jaxrsInternalPut(AeiObjects aeiObjects, Invoke invoke, Class<?> clz, String uri)
+			throws Exception {
+		String body = this.jaxrsEvalBody(aeiObjects, invoke);
+		if (BooleanUtils.isTrue(invoke.getAsync())) {
+			JaxrsObject jaxrsObject = new JaxrsObject();
+			Application application = ThisApplication.context().applications().randomWithWeight(clz.getName());
+			jaxrsObject
+					.setAddress(StringTools.JoinUrl(application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri)));
+			jaxrsObject.setBody(body);
+			jaxrsObject.setInternal(invoke.getInternal());
+			jaxrsObject.setMethod(HttpConnection.METHOD_PUT);
+			jaxrsObject.setContentType(invoke.getJaxrsContentType());
+			ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
+		} else {
+			return ThisApplication.context().applications().putQuery(clz, uri, body);
+		}
+		return null;
+	}
+
+	private ActionResponse jaxrsInternalPost(AeiObjects aeiObjects, Invoke invoke, Class<?> clz, String uri)
+			throws Exception {
+		String body = this.jaxrsEvalBody(aeiObjects, invoke);
+		if (BooleanUtils.isTrue(invoke.getAsync())) {
+			JaxrsObject jaxrsObject = new JaxrsObject();
+			Application application = ThisApplication.context().applications().randomWithWeight(clz.getName());
+			jaxrsObject
+					.setAddress(StringTools.JoinUrl(application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri)));
+			jaxrsObject.setBody(body);
+			jaxrsObject.setInternal(invoke.getInternal());
+			jaxrsObject.setMethod(HttpConnection.METHOD_POST);
+			jaxrsObject.setContentType(invoke.getJaxrsContentType());
+			ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
+		} else {
+			return ThisApplication.context().applications().postQuery(clz, uri, body);
+		}
+		return null;
+	}
+
 	private void jaxrsExternal(AeiObjects aeiObjects, Invoke invoke) throws Exception {
 		String result = "";
-		String address = this.jaxrsUrl(aeiObjects, invoke);
-		String body = "";
+		String uri = this.jaxrsUrl(aeiObjects, invoke);
 		JaxrsObject jaxrsObject = new JaxrsObject();
 		jaxrsObject.setHead(this.jaxrsEvalHead(aeiObjects, invoke));
-		switch (StringUtils.lowerCase(invoke.getJaxrsMethod())) {
-		case "post":
-			body = this.jaxrsEvalBody(aeiObjects, invoke);
-			jaxrsObject.setMethod("post");
-			jaxrsObject.setInternal(false);
-			jaxrsObject.setAddress(address);
-			jaxrsObject.setBody(body);
-			jaxrsObject.setContentType(invoke.getJaxrsContentType());
-			if (BooleanUtils.isTrue(invoke.getAsync())) {
-				ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
-			} else {
-				InvokeExecutor executor = new InvokeExecutor();
-				result = executor.execute(jaxrsObject);
-			}
+		switch (StringUtils.upperCase(invoke.getJaxrsMethod())) {
+		case HttpConnection.METHOD_POST:
+			result = jaxrsExternalPost(aeiObjects, invoke, uri, jaxrsObject);
 			break;
-		case "put":
-			body = this.jaxrsEvalBody(aeiObjects, invoke);
-			jaxrsObject.setMethod("put");
-			jaxrsObject.setInternal(false);
-			jaxrsObject.setAddress(address);
-			jaxrsObject.setBody(body);
-			jaxrsObject.setContentType(invoke.getJaxrsContentType());
-			if (BooleanUtils.isTrue(invoke.getAsync())) {
-				ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
-			} else {
-				InvokeExecutor executor = new InvokeExecutor();
-				result = executor.execute(jaxrsObject);
-			}
+		case HttpConnection.METHOD_PUT:
+			result = jaxrsExternalPut(aeiObjects, invoke, uri, jaxrsObject);
 			break;
-		case "get":
-			jaxrsObject.setMethod("get");
-			jaxrsObject.setInternal(false);
-			jaxrsObject.setAddress(address);
-			jaxrsObject.setContentType(invoke.getJaxrsContentType());
-			if (BooleanUtils.isTrue(invoke.getAsync())) {
-				ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
-			} else {
-				InvokeExecutor executor = new InvokeExecutor();
-				result = executor.execute(jaxrsObject);
-			}
+		case HttpConnection.METHOD_GET:
+			result = jaxrsExternalGet(aeiObjects, invoke, uri, jaxrsObject);
 			break;
-		case "delete":
-			jaxrsObject.setMethod("delete");
-			jaxrsObject.setInternal(false);
-			jaxrsObject.setAddress(address);
-			jaxrsObject.setContentType(invoke.getJaxrsContentType());
-			if (BooleanUtils.isTrue(invoke.getAsync())) {
-				ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
-			} else {
-				InvokeExecutor executor = new InvokeExecutor();
-				result = executor.execute(jaxrsObject);
-			}
+		case HttpConnection.METHOD_DELETE:
+			result = jaxrsExternalDelete(aeiObjects, invoke, uri, jaxrsObject);
 			break;
 		case "head":
 			break;
@@ -306,7 +287,11 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 		case "trace":
 			break;
 		default:
-			throw new Exception("unknown http method: " + invoke.getJaxrsMethod());
+			throw new ExceptionUnknownHttpMethod(invoke.getJaxrsMethod());
+		}
+		// 同步执行状态下进行调用判断
+		if ((!BooleanUtils.isTrue(invoke.getAsync())) && (null == result)) {
+			throw new RunningException("invoke address:{} not success, work:{}.", uri, aeiObjects.getWork().getId());
 		}
 		if (!BooleanUtils.isTrue(invoke.getAsync())) {
 			WrapScriptObject jaxrsResponse = new WrapScriptObject();
@@ -319,13 +304,75 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 						Business.EVENT_INVOKEJAXRSRESPONSE);
 				scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXRSRESPONSE,
 						jaxrsResponse);
-//				/* 重新注入对象需要重新运行 */
-//				ScriptFactory.initialScriptText().eval(scriptContext);
 				cs.eval(scriptContext);
 			}
 		}
 	}
 
+	private String jaxrsExternalDelete(AeiObjects aeiObjects, Invoke invoke, String address, JaxrsObject jaxrsObject)
+			throws Exception {
+		jaxrsObject.setMethod(HttpConnection.METHOD_DELETE);
+		jaxrsObject.setInternal(false);
+		jaxrsObject.setAddress(address);
+		jaxrsObject.setContentType(invoke.getJaxrsContentType());
+		if (BooleanUtils.isTrue(invoke.getAsync())) {
+			ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
+		} else {
+			InvokeExecutor executor = new InvokeExecutor();
+			return executor.execute(jaxrsObject);
+		}
+		return null;
+	}
+
+	private String jaxrsExternalGet(AeiObjects aeiObjects, Invoke invoke, String address, JaxrsObject jaxrsObject)
+			throws Exception {
+		jaxrsObject.setMethod(HttpConnection.METHOD_GET);
+		jaxrsObject.setInternal(false);
+		jaxrsObject.setAddress(address);
+		jaxrsObject.setContentType(invoke.getJaxrsContentType());
+		if (BooleanUtils.isTrue(invoke.getAsync())) {
+			ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
+		} else {
+			InvokeExecutor executor = new InvokeExecutor();
+			return executor.execute(jaxrsObject);
+		}
+		return null;
+	}
+
+	private String jaxrsExternalPut(AeiObjects aeiObjects, Invoke invoke, String address, JaxrsObject jaxrsObject)
+			throws Exception {
+		String body = this.jaxrsEvalBody(aeiObjects, invoke);
+		jaxrsObject.setMethod(HttpConnection.METHOD_PUT);
+		jaxrsObject.setInternal(false);
+		jaxrsObject.setAddress(address);
+		jaxrsObject.setBody(body);
+		jaxrsObject.setContentType(invoke.getJaxrsContentType());
+		if (BooleanUtils.isTrue(invoke.getAsync())) {
+			ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
+		} else {
+			InvokeExecutor executor = new InvokeExecutor();
+			return executor.execute(jaxrsObject);
+		}
+		return null;
+	}
+
+	private String jaxrsExternalPost(AeiObjects aeiObjects, Invoke invoke, String address, JaxrsObject jaxrsObject)
+			throws Exception {
+		String body = this.jaxrsEvalBody(aeiObjects, invoke);
+		jaxrsObject.setMethod(HttpConnection.METHOD_POST);
+		jaxrsObject.setInternal(false);
+		jaxrsObject.setAddress(address);
+		jaxrsObject.setBody(body);
+		jaxrsObject.setContentType(invoke.getJaxrsContentType());
+		if (BooleanUtils.isTrue(invoke.getAsync())) {
+			ThisApplication.syncJaxrsInvokeQueue.send(jaxrsObject);
+		} else {
+			InvokeExecutor executor = new InvokeExecutor();
+			return executor.execute(jaxrsObject);
+		}
+		return null;
+	}
+
 	private String jaxrsUrl(AeiObjects aeiObjects, Invoke invoke) throws Exception {
 		String url = invoke.getJaxrsAddress();
 		Map<String, String> parameters = new HashMap<>();
@@ -337,8 +384,6 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 					aeiObjects.getActivity(), Business.EVENT_INVOKEJAXRSPARAMETER);
 			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_PARAMETERS,
 					parameters);
-//			/* 重新注入对象需要重新运行 */
-//			ScriptFactory.initialScriptText().eval(scriptContext);
 			cs.eval(scriptContext);
 		}
 		for (Entry<String, String> entry : parameters.entrySet()) {
@@ -356,12 +401,6 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 					aeiObjects.getActivity(), Business.EVENT_INVOKEJAXRSBODY);
 			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXRSBODY, jaxrsBody);
 			cs.eval(scriptContext);
-//			ScriptContext scriptContext = aeiObjects.scriptContext();
-//			/* 重新注入对象需要重新运行 */
-//			ScriptFactory.initialScriptText().eval(scriptContext);
-//			CompiledScript cs = aeiObjects.business().element().getCompiledScript(aeiObjects.getWork().getApplication(),
-//					aeiObjects.getActivity(), Business.);
-//			cs.eval(scriptContext);
 		}
 		return jaxrsBody.get();
 	}
@@ -375,14 +414,6 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 					aeiObjects.getActivity(), Business.EVENT_INVOKEJAXRSHEAD);
 			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXRSHEAD, map);
 			cs.eval(scriptContext);
-//			ScriptContext scriptContext = aeiObjects.scriptContext();
-//			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXRSHEAD, map);
-//			/* 重新注入对象需要重新运行 */
-//			ScriptFactory.initialScriptText().eval(scriptContext);
-//			CompiledScript cs = aeiObjects.business().element().getCompiledScript(aeiObjects.getWork().getApplication(),
-//					aeiObjects.getActivity(), Business.EVENT_INVOKEJAXRSHEAD);
-//			cs.eval(scriptContext);
-
 		}
 		return map;
 	}
@@ -395,7 +426,7 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 			return Objects.toString(value, "");
 		}
 
-		public void set(String value) throws Exception {
+		public void set(String value) {
 			this.value = value;
 		}
 
@@ -403,14 +434,17 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 
 	@Override
 	protected void arrivingCommitted(AeiObjects aeiObjects, Invoke invoke) throws Exception {
+		// nothing
 	}
 
 	@Override
 	protected void executingCommitted(AeiObjects aeiObjects, Invoke invoke) throws Exception {
+		// nothing
 	}
 
 	@Override
 	protected void inquiringCommitted(AeiObjects aeiObjects, Invoke invoke) throws Exception {
+		// nothing
 	}
 
 }