Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.76 KB | None | 0 0
  1. package pl.orange.bpms.server.extension.soap;
  2.  
  3. import com.google.common.collect.Lists;
  4. import org.apache.commons.lang.StringUtils;
  5. import org.apache.commons.lang.math.NumberUtils;
  6. import org.apache.http.client.methods.HttpPost;
  7. import org.kie.server.api.KieServerConstants;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import pl.orange.bpms.server.extension.rest.model.ProcessInputData;
  11. import pl.orange.bpms.server.extension.rest.model.ProcessInputDataParameter;
  12. import pl.orange.bpms.server.extension.rest.model.response.ProcessInitializationResult;
  13. import pl.orange.bpms.server.extension.rest.model.response.ProcessOutputData;
  14. import pl.orange.bpms.utils.concurrent.FutureCallbackHandler;
  15. import pl.orange.bpms.utils.excpetions.HttpRequestException;
  16. import pl.orange.bpms.utils.excpetions.HttpResponseException;
  17. import pl.orange.bpms.utils.integration.correlation.hibernate.IntegrationLog;
  18. import pl.orange.bpms.utils.integration.correlation.hibernate.InterfaceName;
  19. import pl.orange.bpms.utils.integration.http.RequestHelper;
  20. import pl.orange.bpms.utils.integration.http.RestServiceHttpResponse;
  21. import pl.orange.bpms.utils.integration.logging.IntegrationLogUtil;
  22.  
  23. import javax.jws.WebService;
  24. import javax.ws.rs.core.HttpHeaders;
  25. import javax.ws.rs.core.MediaType;
  26. import javax.ws.rs.core.Response;
  27. import javax.ws.rs.core.UriBuilder;
  28. import java.util.HashMap;
  29. import java.util.List;
  30. import java.util.Map;
  31. import java.util.Optional;
  32. import java.util.stream.Collectors;
  33.  
  34. import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
  35. import static org.apache.commons.lang.StringUtils.isNotEmpty;
  36. import static pl.orange.bpms.server.extension.rest.model.response.ProcessInitializationResult.PROCESS_INITIALIZATION_FAILURE_ID;
  37. import static pl.orange.bpms.utils.integration.http.RequestHelper.checkHttpResponse;
  38. import static pl.orange.bpms.utils.integration.http.RequestHelper.sendHttpRequest;
  39. import static pl.orange.bpms.utils.integration.logging.IntegrationLogUtil.logResponseString;
  40. import static pl.orange.bpms.utils.marshalling.SerializationUtil.deserializeString;
  41. import static pl.orange.bpms.utils.marshalling.SerializationUtil.doSerialization;
  42. import static pl.orange.bpms.utils.rest.RestControllerUtil.RESPONSE_PRODUCES_CODING_POSTFIX;
  43.  
  44. /**
  45. * The type Initialize process service.
  46. */
  47. @WebService(endpointInterface = "pl.orange.bpms.server.extension.soap.InitializeProcess")
  48. public class InitializeProcessService implements InitializeProcess {
  49.  
  50. private static final Logger LOGGER = LoggerFactory.getLogger(InitializeProcessService.class);
  51.  
  52. private static final String PROCESS_INITIALIZER_URI = UriBuilder.fromPath(System.getProperty(KieServerConstants.KIE_SERVER_LOCATION))
  53. .path("extension/service/processInitializer/initializeProcess")
  54. .build().toString();
  55.  
  56. private static final Map<String, String> PROCESS_INITIALIZER_HEADER = new HashMap<>();
  57. private static final InterfaceName INTERFACE_NAME = InterfaceName.INITIALIZE_PROCESS_SOAP;
  58.  
  59. static {
  60. PROCESS_INITIALIZER_HEADER.putAll(RequestHelper.prepareDefaultHeaders());
  61. PROCESS_INITIALIZER_HEADER.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON + RESPONSE_PRODUCES_CODING_POSTFIX);
  62. PROCESS_INITIALIZER_HEADER.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
  63. }
  64.  
  65. /**
  66. * @param category
  67. * @param type
  68. * @param subtype
  69. * @param system
  70. * @param executionParams
  71. * @return
  72. */
  73. @Override
  74. public Result initializeProcess(String category, String type, String subtype, String system, List<Param> executionParams) {
  75. IntegrationLog integrationLog = logIntegration(category, type, subtype, system, executionParams); //saving external request ASAP without known process id
  76. final ProcessInputData inputData = prepareProcessInputData(category, type, subtype, system, executionParams);
  77.  
  78. Result result = new Result();
  79. result.setErrorCode(String.valueOf(NumberUtils.INTEGER_ZERO));
  80.  
  81. try {
  82. RestServiceHttpResponse httpResponse = sendHttpRequest(PROCESS_INITIALIZER_URI, PROCESS_INITIALIZER_HEADER,
  83. inputData.toString(), new HttpPost(), null);
  84. checkHttpResponse(httpResponse);
  85.  
  86. ProcessInitializationResult processInitializationResult = deserializeString(httpResponse.getResponseBody(), ProcessInitializationResult.class, false);
  87. logProcessId(integrationLog, processInitializationResult.getProcessInstanceId());
  88. if (PROCESS_INITIALIZATION_FAILURE_ID.equals(processInitializationResult.getProcessInstanceId())) {
  89. result.setErrorCode(getStringStatusCode(INTERNAL_SERVER_ERROR));
  90. result.setErrorDesc("Failed to initialize process. ProcessInitializationResult: " + httpResponse.getResponseBody());
  91. }
  92.  
  93. final String error = getProcessInitializationResultError(processInitializationResult);
  94. if (isNotEmpty(error)) {
  95. result.setErrorCode("BPMS-RODO-ERROR-001");
  96. result.setErrorDesc(error);
  97. }
  98.  
  99. } catch (HttpResponseException | HttpRequestException e) {
  100. result.setErrorCode(getStringStatusCode(INTERNAL_SERVER_ERROR));
  101. result.setErrorDesc(e.getMessage());
  102. LOGGER.error(e.getMessage());
  103. }
  104. logProcessResponse(integrationLog, result);
  105. return result;
  106. }
  107.  
  108. /**
  109. * @param category
  110. * @param type
  111. * @param subtype
  112. * @param system
  113. * @param executionParams
  114. * @return
  115. */
  116. private static ProcessInputData prepareProcessInputData(String category, String type, String subtype, String system, List<Param> executionParams) {
  117. final ProcessInputData pid = new ProcessInputData();
  118. pid.setCategory(category);
  119. pid.setType(type);
  120. pid.setSubtype(subtype);
  121. pid.setIpi(system);
  122. pid.setExecutionParams(executionParams.stream()
  123. .map(param -> new ProcessInputDataParameter(param.getKey(), param.getValue(), "java.lang.String"))
  124. .collect(Collectors.toList()));
  125. return pid;
  126. }
  127.  
  128. /**
  129. * @param requestObject
  130. * @return
  131. */
  132. private static IntegrationLog logIntegration(Object... requestObject) {
  133. return IntegrationLogUtil.logRequestString(
  134. doSerialization(requestObject, false, false),
  135. null, INTERFACE_NAME, null, null, false, false);
  136. }
  137.  
  138. /**
  139. * @param status
  140. * @return
  141. */
  142. private static String getStringStatusCode(final Response.Status status) {
  143. return String.valueOf(status.getStatusCode());
  144. }
  145.  
  146. /**
  147. * @param log
  148. * @param processId
  149. */
  150. private static void logProcessId(IntegrationLog log, Long processId) {
  151. FutureCallbackHandler.newSingleThreadCallbackHandler(
  152. () -> logResponseString(null, log, processId, INTERFACE_NAME, null, null, false, false)
  153. );
  154. }
  155.  
  156. private static void logProcessResponse(IntegrationLog log, Result result) {
  157. FutureCallbackHandler.newSingleThreadCallbackHandler(
  158. () -> logResponseString(doSerialization(result, false, false), log,
  159. null, INTERFACE_NAME, null, null, false, false)
  160. );
  161. }
  162.  
  163. private static String getProcessInitializationResultError(final ProcessInitializationResult pir) {
  164. return Optional.ofNullable(pir.getProcessParameters())
  165. .orElse(Lists.newArrayList())
  166. .stream()
  167. .filter(e -> "errors".equals(e.getKey()))
  168. .findFirst()
  169. .map(ProcessOutputData::getValue)
  170. .map(String::valueOf)
  171. .orElse(StringUtils.EMPTY);
  172. }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement