1

我可以使用博客中提供的信息在 Wildfly 8.1.0.Final 上设置 KIE 执行服务器 (6.3.0.Final) 和 Workbench (6.3.0.Final):http: //mswiderski.blogspot.in/2015/10/installing -kie-server-and-workbench-on.html 服务器和工作台都工作正常,服务器在“服务器管理浏览器”选项卡下的工作台中可见。

我的下一步是在服务器上部署一个简单的容器并测试 REST GET 和 POST 调用,因此我遵循了问题中提到的步骤:HelloWorld using Drools Workbench & KIE Server

Java 和 DRL 代码的唯一变化是关于包。下面是我的Java代码:

package test.myproject;

/**
 * This class was automatically generated by the data modeler tool.
 */

public class HelloWorld implements java.io.Serializable
{

   static final long serialVersionUID = 1L;

   private java.lang.String message;

   public HelloWorld()
   {
   }

   public java.lang.String getMessage()
   {
      return this.message;
   }

   public void setMessage(java.lang.String message)
   {
      this.message = message;
   }

   public HelloWorld(java.lang.String message)
   {
      this.message = message;
   }

}

DRL 文件代码:

package test.myproject;

import test.myproject.HelloWorld;

rule "hello"

when 
    HelloWorld(message == "Joe");
then
    System.out.println("Hello Joe!");
end

该代码已成功构建并作为容器部署在服务器上。使用 RESTClient/PostMan/Advanced REST Client 的 GET 查询会给出正确的响应。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response type="SUCCESS" msg="Info for container myproject">
    <kie-container container-id="myproject" status="STARTED">
        <release-id>
            <artifact-id>MyProject</artifact-id>
            <group-id>test</group-id>
            <version>1.0</version>
        </release-id>
        <resolved-release-id>
            <artifact-id>MyProject</artifact-id>
            <group-id>test</group-id>
            <version>1.0</version>
        </resolved-release-id>
        <scanner status="DISPOSED"/>
    </kie-container>
</response>

但是,当我发布到具有以下内容的容器时:

<batch-execution lookup="defaultKieSession">
<insert out-identifier="message" return-object="true" entrypoint="DEFAULT">
    <test.myproject.HelloWorld>
        <message>Joe</message>
    </test.myproject.HelloWorld>
</insert>

请注意,我确实根据代码的更改对 XML 进行了更改。我确实尝试了不同的选项,例如等,但我得到的回应是:

Status Code: 405 Method Not Allowed
Allow: HEAD, DELETE, GET, OPTIONS, PUT
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive
Content-Length: 0
Date: Thu, 10 Dec 2015 05:29:09 GMT
Expires: 0
Pragma: no-cache
Server: WildFly/8
X-Powered-By: Undertow/1

看起来不允许使用 POST 选项,因此尝试了 PUT 但得到的响应为:

Status Code: 415 Unsupported Media Type
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive
Content-Length: 0
Date: Thu, 10 Dec 2015 05:32:17 GMT
Expires: 0
Pragma: no-cache
Server: WildFly/8
X-Powered-By: Undertow/1

谁能告诉我哪里出错了。我还检查了日志文件,并在调用 POST 时看到以下错误:

2015-12-10 10:59:09,208 WARN [org.jboss.resteasy.core.ExceptionHandler](默认任务 48)未能执行:javax.ws.rs.NotAllowedException:找不到 POST 的资源方法,返回 405在 org.jboss.resteasy.core.registry.SegmentNode 的 org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:375) [resteasy-jaxrs-3.0.8.Final.jar:] 允许标头。匹配(SegmentNode.java:114)[resteasy-jaxrs-3.0.8.Final.jar:]

调用 PUT 时出现错误:

2015-12-10 11:02:17,127 WARN [org.jboss.resteasy.core.ExceptionHandler](默认任务 50)未能执行:javax.ws.rs.NotSupportedException:无法在 org.jboss.resteasy 使用内容类型.core.registry.SegmentNode.match(SegmentNode.java:380) [resteasy-jaxrs-3.0.8.Final.jar:] at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:114) [resteasy-jaxrs-3.0.8.Final.jar:]

4

1 回答 1

2

它现在正在工作。所需更改如下:

POST 期间调用的 URL 是:http://localhost:8080/kie-server/services/rest/server/containers/instances/myproject

从 6.3.0 开始需要使用实例(记下它:))

6.3.0 中的 KIE 服务器支持 JAXB、JSON 和 Xstream。由于默认为 JAXB,因此您需要提供 JAXB 有效内容。或者,您可以设置 HTTP 标头以通知 KIE 服务器使用 Xstream 作为编组器: 标头名称:X-KIE-ContentType 标头值 XSTREAM

因此设置适当的标题

最后,XML 应采用以下形式:

<batch-execution lookup="defaultKieSession">
  <insert out-identifier="test">
    <test.myproject.HelloWorld>
      <message>"Joe"</message>
    </test.myproject.HelloWorld>
  </insert>
  <fire-all-rules/>
  <get-objects out-identifier="test"/>
</batch-execution>

注意输出“Hello Joe!” 在命令提示符下。

感谢Maciej Swiderski 的所有支持

于 2015-12-11T05:39:14.443 回答