helloworld на Kie Workbench и Kie Server версии 6.3.0

Я мог настроить KIE Execution Server (6.3.0.Final) и Workbench (6.3.0.Final) на Wildfly 8.1.0.Final, используя информацию, доступную в блоге: http://mswiderski.blogspot.in/2015/10/installing-kie-server-and-workbench-on.html Сервер и Workbench работают нормально, и сервер отображается в Workbench на вкладке "Обозреватель управления сервером".

Мой следующий шаг - развернуть простой контейнер на сервере и протестировать вызовы REST GET и POST, поэтому я выполнил шаги, упомянутые в вопросе: HelloWorld с использованием 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

Код успешно собран и развернут как контейнер на сервере. Запрос GET с использованием RESTClient/PostMan/Advanced REST Client дает правильный ответ.

<?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.match(SegmentNode.java:375) [resteasy-jaxrs-3.0.8.Final.jar:] в org.jboss.resteasy.core.registry.SegmentNode.match(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:] в org.jboss.resteasy.core.registry.SegmentNode.match (SegmentNode.java:114) [Resteasy-jaxrs-3.0.8.Final.jar:]

1 ответ

Это работает сейчас. Необходимо внести следующие изменения:

URL для вызова во время POST: http://localhost:8080/kie-server/services/rest/server/containers/instances/myproject

Начиная с версии 6.3.0 необходимо использовать экземпляры (запишите это:))

KIE Server в 6.3.0 поддерживает JAXB, JSON и Xstream. Поскольку по умолчанию используется JAXB, вам необходимо предоставить JAXB действительный контент. В качестве альтернативы вы можете установить HTTP-заголовок, чтобы сообщить KIE Server об использовании 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>

Смотрите выход "Привет, Джо!" в командной строке.

Спасибо Maciej Swiderski за всю поддержку

Другие вопросы по тегам