5.3. 使用 KIE 服务器 REST API 执行 DMN 服务


直接与 KIE 服务器的 REST 端点交互,可在调用代码和决策逻辑定义之间提供最大的隔离。调用代码完全免费直接依赖项,您可以在完全不同的开发平台(如 Node.js.NET )中实施它。本节中的示例演示了 Nix 风格的 curl 命令,但提供相关信息以适应任何 REST 客户端。

当您使用 KIE 服务器的 REST 端点时,最佳实践是定义一个域对象 POJO Java 类,使用标准 KIE Server marshalling 注解进行注解。例如,以下代码使用正确注解的域对象 Person 类:

POJO Java 类示例

@javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
public class Person implements java.io.Serializable {

    static final long serialVersionUID = 1L;

    private java.lang.String id;
    private java.lang.String name;
    @javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(org.kie.internal.jaxb.LocalDateXmlAdapter.class)
    private java.time.LocalDate dojoining;

    public Person() {
    }

    public java.lang.String getId() {
        return this.id;
    }

    public void setId(java.lang.String id) {
        this.id = id;
    }

    public java.lang.String getName() {
        return this.name;
    }

    public void setName(java.lang.String name) {
        this.name = name;
    }

    public java.time.LocalDate getDojoining() {
        return this.dojoining;
    }

    public void setDojoining(java.time.LocalDate dojoining) {
        this.dojoining = dojoining;
    }

    public Person(java.lang.String id, java.lang.String name,
            java.time.LocalDate dojoining) {
        this.id = id;
        this.name = name;
        this.dojoining = dojoining;
    }

}
Copy to Clipboard Toggle word wrap

有关 KIE Server REST API 的更多信息,请参阅使用 KIE API 与 Red Hat Process Automation Manager 交互

先决�件

  • KIE 服务器已安装并配置,包括具有 kie-server 角色的用户的已知用户名和凭证。有关安装选项,请参阅 规划 Red Hat Process Automation Manager 安装
  • 您已将 DMN 项目构建为 KJAR 工件,并将其部署到 KIE 服务器中。理想情况下,您已将 DMN 项目构建为可执行模型,以便更有效地执行:

    mvn clean install -DgenerateDMNModel=yes
    Copy to Clipboard Toggle word wrap

    有关项目打包和部署以及可执行模型的更多信息,请参阅打包和部署 Red Hat Process Automation Manager 项目

  • 您有包含 DMN 模型的 KIE 容器的 ID。如果有多个模型,还必须知道相关模型的模型命名空间和模型名称。

�程

  1. 确定用于访问 KIE 服务器 REST API 端点的基本 URL。这需要了解以下值(默认本地部署值作为示例):

    • 主机(localhost)
    • 端口(8080)
    • 根上下文(kie-server)
    • 基本 REST 路径(services/rest/)

    本地部署中的基本 URL 示例:

    http://localhost:8080/kie-server/services/rest/

  2. 确定用户身份验证要求。

    当在 KIE 服务器配置中直接定义用户时,会使用 HTTP 基本身份验证,并且需要用户名和密码。成功请求要求用户具有 kie-server 角色。

    以下示例演示了如何在 curl 请求中添加凭证:

    curl -u username:password <request>
    Copy to Clipboard Toggle word wrap

    如果使用 Red Hat Single Sign-On 配置 KIE 服务器,请求必须包含 bearer 令牌:

    curl -H "Authorization: bearer $TOKEN" <request>
    Copy to Clipboard Toggle word wrap
  3. 指定请求和响应的格式。REST API 端点可用于 JSON 和 XML 格式,并使用请求标头设置:

    JSON

    curl -H "accept: application/json" -H "content-type: application/json"
    Copy to Clipboard Toggle word wrap

    XML

    curl -H "accept: application/xml" -H "content-type: application/xml"
    Copy to Clipboard Toggle word wrap

  4. (可选)查询容器以获取部署的决策模型列表:

    [GET] server/containers/{containerId}/dmn

    curl 请求示例:

    curl -u krisv:krisv -H "accept: application/xml" -X GET "http://localhost:8080/kie-server/services/rest/server/containers/MovieDMNContainer/dmn"
    Copy to Clipboard Toggle word wrap

    XML 输出示例:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <response type="SUCCESS" msg="OK models successfully retrieved from container 'MovieDMNContainer'">
        <dmn-model-info-list>
            <model>
                <model-namespace>http://www.redhat.com/_c7328033-c355-43cd-b616-0aceef80e52a</model-namespace>
                <model-name>dmn-movieticket-ageclassification</model-name>
                <model-id>_99</model-id>
                <decisions>
                    <dmn-decision-info>
                        <decision-id>_3</decision-id>
                        <decision-name>AgeClassification</decision-name>
                    </dmn-decision-info>
                </decisions>
            </model>
        </dmn-model-info-list>
    </response>
    Copy to Clipboard Toggle word wrap

    JSON 输出示例:

    {
      "type" : "SUCCESS",
      "msg" : "OK models successfully retrieved from container 'MovieDMNContainer'",
      "result" : {
        "dmn-model-info-list" : {
          "models" : [ {
            "model-namespace" : "http://www.redhat.com/_c7328033-c355-43cd-b616-0aceef80e52a",
            "model-name" : "dmn-movieticket-ageclassification",
            "model-id" : "_99",
            "decisions" : [ {
              "decision-id" : "_3",
              "decision-name" : "AgeClassification"
            } ]
          } ]
        }
      }
    }
    Copy to Clipboard Toggle word wrap
  5. 执行模型:

    [POST] server/containers/{containerId}/dmn

    curl 请求示例:

    curl -u krisv:krisv -H "accept: application/json" -H "content-type: application/json" -X POST "http://localhost:8080/kie-server/services/rest/server/containers/MovieDMNContainer/dmn" -d "{ \"model-namespace\" : \"http://www.redhat.com/_c7328033-c355-43cd-b616-0aceef80e52a\", \"model-name\" : \"dmn-movieticket-ageclassification\", \"decision-name\" : [ ], \"decision-id\" : [ ], \"dmn-context\" : {\"Age\" : 66}}"
    Copy to Clipboard Toggle word wrap

    JSON 请求示例:

    {
      "model-namespace" : "http://www.redhat.com/_c7328033-c355-43cd-b616-0aceef80e52a",
      "model-name" : "dmn-movieticket-ageclassification",
      "decision-name" : [ ],
      "decision-id" : [ ],
      "dmn-context" : {"Age" : 66}
    }
    Copy to Clipboard Toggle word wrap

    XML 请求示例(DSLB 格式):

    <?xml version="1.0" encoding="UTF-8"?>
    <dmn-evaluation-context>
        <model-namespace>http://www.redhat.com/_c7328033-c355-43cd-b616-0aceef80e52a</model-namespace>
        <model-name>dmn-movieticket-ageclassification</model-name>
        <dmn-context xsi:type="jaxbListWrapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <type>MAP</type>
            <element xsi:type="jaxbStringObjectPair" key="Age">
                <value xsi:type="xs:int" xmlns:xs="http://www.w3.org/2001/XMLSchema">66</value>
            </element>
        </dmn-context>
    </dmn-evaluation-context>
    Copy to Clipboard Toggle word wrap
    注意

    无论请求格式是什么,请求需要以下元素:

    • 模型命名空间
    • å�‹å�·å��ç§°
    • 包含输入值的上下文对象

    JSON 响应示例:

    {
      "type" : "SUCCESS",
      "msg" : "OK from container 'MovieDMNContainer'",
      "result" : {
        "dmn-evaluation-result" : {
          "messages" : [ ],
          "model-namespace" : "http://www.redhat.com/_c7328033-c355-43cd-b616-0aceef80e52a",
          "model-name" : "dmn-movieticket-ageclassification",
          "decision-name" : [ ],
          "dmn-context" : {
            "Age" : 66,
            "AgeClassification" : "Senior"
          },
          "decision-results" : {
            "_3" : {
              "messages" : [ ],
              "decision-id" : "_3",
              "decision-name" : "AgeClassification",
              "result" : "Senior",
              "status" : "SUCCEEDED"
            }
          }
        }
      }
    }
    Copy to Clipboard Toggle word wrap

    XML (DSLB 格式)响应示例:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <response type="SUCCESS" msg="OK from container 'MovieDMNContainer'">
          <dmn-evaluation-result>
                <model-namespace>http://www.redhat.com/_c7328033-c355-43cd-b616-0aceef80e52a</model-namespace>
                <model-name>dmn-movieticket-ageclassification</model-name>
                <dmn-context xsi:type="jaxbListWrapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                      <type>MAP</type>
                      <element xsi:type="jaxbStringObjectPair" key="Age">
                            <value xsi:type="xs:int" xmlns:xs="http://www.w3.org/2001/XMLSchema">66</value>
                      </element>
                      <element xsi:type="jaxbStringObjectPair" key="AgeClassification">
                            <value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema">Senior</value>
                      </element>
                </dmn-context>
                <messages/>
                <decisionResults>
                      <entry>
                            <key>_3</key>
                            <value>
                                  <decision-id>_3</decision-id>
                                  <decision-name>AgeClassification</decision-name>
                                  <result xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Senior</result>
                                  <messages/>
                                  <status>SUCCEEDED</status>
                            </value>
                      </entry>
                </decisionResults>
          </dmn-evaluation-result>
    </response>
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat