2016-10-11 2 views
1

표준 Camunda 구현과 함께 제공되는 http 커넥터를 사용하려고합니다. 워크 플로를 실행할 때마다 인스턴스가 해당 작업을 고정시킵니다. 나는 실행 listnener에서이 클래스를 사용하고 내가 사용하고 코드는 이것이다 :http 커넥터를 사용할 수 없습니다.

import org.apache.ibatis.logging.LogFactory; 
import org.camunda.bpm.engine.delegate.DelegateExecution; 
import org.camunda.bpm.engine.delegate.Expression; 
import org.camunda.bpm.engine.delegate.JavaDelegate; 
import org.camunda.bpm.engine.impl.util.json.JSONObject; 
import org.camunda.connect.Connectors; 
import org.camunda.connect.ConnectorException; 
import org.camunda.connect.httpclient.HttpConnector; 
import org.camunda.connect.httpclient.HttpResponse; 
import org.camunda.connect.httpclient.impl.HttpConnectorImpl; 
import org.camunda.connect.impl.DebugRequestInterceptor; 



public class APIAudit implements JavaDelegate { 
static { 
    LogFactory.useSlf4jLogging(); // MyBatis 
    } 

private static final java.util.logging.Logger LOGGER = java.util.logging.Logger.getLogger(Thread.currentThread().getStackTrace()[0].getClassName()); 

private Expression tokenField; 
private Expression apiServerField; 
private Expression questionIDField; 
private Expression subjectField; 
private Expression bodyField; 

public void execute(DelegateExecution arg0) throws Exception { 

    String tokenValue = (String) tokenField.getValue(arg0); 
    String apiServerValue = (String) apiServerField.getValue(arg0); 
    String questionIDValue = (String) questionIDField.getValue(arg0); 
    String subjectValue = (String) subjectField.getValue(arg0); 
    String bodyValue = (String) bodyField.getValue(arg0); 
    if (apiServerValue != null) { 
     String url = "http://" + apiServerValue + "/v1.0/announcement"; 

     LOGGER.info("token: " + tokenValue); 
     LOGGER.info("apiServer: " + apiServerValue); 
     LOGGER.info("questionID: " + questionIDValue); 
     LOGGER.info("subject: " + subjectValue); 
     LOGGER.info("body: " + bodyValue); 
     LOGGER.info("url: " + url); 

     JSONObject jsonBody = new JSONObject(); 
     jsonBody.put("access_token", tokenValue); 
     jsonBody.put("source", "SYSTEM"); 
     jsonBody.put("target", "AUDIT"); 
     jsonBody.put("tType", "system"); 
     jsonBody.put("aType", "auditLog"); 
     jsonBody.put("affectedItem", questionIDValue); 
     jsonBody.put("subject", subjectValue); 
     jsonBody.put("body", bodyValue); 
     jsonBody.put("language", "EN"); 

     try { 
      LOGGER.info("Generating connection"); 

      HttpConnector http = Connectors.getConnector(HttpConnector.ID); 

      LOGGER.info(http.toString()); 
      DebugRequestInterceptor interceptor = new DebugRequestInterceptor(false); 
      http.addRequestInterceptor(interceptor); 

      LOGGER.info("JSON Body: " + jsonBody.toString()); 

      HttpResponse response = http.createRequest() 
             .post() 
             .url(url) 
             .contentType("application/json") 
             .payload(jsonBody.toString()) 
             .execute(); 

      Integer responseCode = response.getStatusCode(); 
      String responseBody = response.getResponse(); 
      response.close(); 
      LOGGER.info("[" + responseCode + "]: " + responseBody); 
     } catch (ConnectorException e) { 
      LOGGER.severe(e.getMessage()); 
     } 


    } else { 

     LOGGER.info("No APISERVER provided"); 

    } 

    LOGGER.info("Exiting"); 

} 
} 

내가 필드 주입 클래스 인쇄 올바른 값 때문에 제대로 작동하는지 확신합니다. 나는 또한 아무런 문제없이 동일한 활동에서 javascript의 http 커넥터를 사용했다.

동일한 접근법에서 두 가지 외부 REST 서비스를 호출해야하므로이 접근법을 사용하므로 어떤 조언도 매우 환영받을 것입니다.

답변

0

프로세스 엔진 구성에서 Connect process engine plugin을 사용해야합니다. 이 과정 엔진을 구성하는 방법을 확실하지,

이 또한 의존성에 다음 사항을 확인 org.camunda.connect.plugin.impl.ConnectProcessEnginePlugin이 플러그인을 추가해야합니다

  1. 모두 종속성을 추가하지 마십시오 - 커넥터 - all 및 http-connector. 당신이 클래스

내가 HTTP 클라이언트 라이브러리와 클래스 로딩 문제가 확신 HttpClient를 관련된 클래스 로딩 문제가 있는지 여부를

  • 오류 로그를 확인하고보고해야합니다. 모든 커넥터의 올바른 버전을 포함하십시오. 모든 종속성

  • 관련 문제