如何在 BPMN 模型的脚本任务中使用 Javascript 发送 HTTP 请求?

问题描述 投票:0回答:2

我希望从 Camunda 使用 Javascript 执行的 BPMN 模型中的脚本任务中发送 HTTP 请求。有谁知道该怎么做吗?

我已经测试过了:

var xmlhttp;
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "http://test.local/append.php", true);
xmlhttp.send();

但是一旦进入包含上述代码的脚本任务,

Tasklist
提示找不到
XMLHttpRequest

javascript camunda
2个回答
1
投票

根据您的 Java 版本,您可以使用 Rhino(Java 7 之前)或 Nashorn(Java 8 开始)Javascript 引擎。两者都没有 XmlHttpRequest 的概念,正如您从 Web 浏览器中的 Javascript 引擎中了解到的那样。所以你必须使用一个允许你发送 HTTP 请求的库。这个Post链接了Rhino的XmlHttpRequest实现。


0
投票

Camunda 使用的 Nashorn JavaScript 引擎可能不支持

XmlHttpRequest
本身,但它支持 Java“互操作”,因此您可以在 JavaScript 中实例化和使用 Java 类,并按照您的方式发送 HTTP 请求在爪哇。例如,如果您只想使用默认的 Camunda docker 映像而无需在服务器端自定义或安装任何内容,则这特别有用:

// HttpClient version (Java 11+)
// get Java types
var HttpClient = Java.type("java.net.http.HttpClient");
var HttpRequest = Java.type("java.net.http.HttpRequest");
var HttpResponse = Java.type("java.net.http.HttpResponse");
var URI = Java.type("java.net.URI");
// create JSON object
var data = {
    activityInstanceId: execution.getActivityInstanceId(),
    currentActivityInstanceId: execution.getCurrentActivityId()
};
var jsonData = JSON.stringify(data);
// create request
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
    .uri(URI.create("http://10.0.0.5:9090/notify"))
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(jsonData))
    .build();
// fire and forget
client.send(request, HttpResponse.BodyHandlers.ofString());

请参阅 Java 11

HttpClient
文档Nashorn Java API 了解更多信息。同样,您可以在旧平台上使用
URLConnection
,甚至只是打开 TCP 套接字。

© www.soinside.com 2019 - 2024. All rights reserved.