2016-10-11 1 views
1

kann nicht verwendet werden Ich versuche, den HTTP-Connector, der mit der Standard-Camunda-Implementierung zur Verfügung gestellt wird, ohne Glück. Jedes Mal, wenn ich meinen Workflow ausführe, friert die Instanz einfach bei dieser Aktivität ein. Ich verwende diese Klasse in einer Ausführung listnener und der Code, den ich benutze, ist dies:http-Connector

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"); 

} 
} 

Ich bin sicher, dass die Felder Einspritzung arbeitet korrekt, da die Klasse druckt die korrekten Werte. Ich habe auch den http-Connector in Javascript in der gleichen Aktivität ohne Problem verwendet.

Ich benutze diesen Ansatz, da ich zwei verschiedene Aufrufe an externe REST-Dienste in der gleichen Aufgabe machen muss, so dass jede Beratung sehr willkommen ist.

Antwort

0

Sie müssen das Connect Process Engine-Plugin in der Process Engine-Konfiguration aktivieren. Nicht sicher, wie Sie den Prozess-Engine konfiguriert, stellen Sie sicher, dass dieses Plugin hinzufügen org.camunda.connect.plugin.impl.ConnectProcessEnginePlugin

Auch die in Abhängigkeiten folgende überprüfen

  1. Sie beide Abhängigkeiten nicht hinzufügen - Stecker- Alle und http-Connector.
  2. Vergewissern Sie sich die Fehlerprotokolle zu überprüfen und sehen, ob es jede Klasse Ladeproblem zu Httpclient Klassen

Ich bin da ziemlich sicher, dass im Zusammenhang haben, ist eine Klasse Laden Problem mit http-Client-Bibliothek. Stellen Sie sicher, dass die richtige Version der Konnektoren enthalten ist - alle Abhängigkeiten