HelloWorld using Drools Workbench & KIE Server

2020-04-18 09:53发布

问题:

Have KIE Drools Workbench 6.2.0 Final installed inside a JBoss 7 Application Server local instance and Kie Server 6.2.0 Final inside a local Tomcat 7 instance.

Using the web based KIE Workbench strictly for evaluation purposes (am using it to code generate Java based Maven projects and am not using a particular IDE such as Eclipse or IntelliJ IDEA):

  1. Created a new repository called testRepo

  2. Created a new project called HelloWorld

  3. Created a new Data Object called HelloWorld with a String property called message:

    package demo;
    
    /**
     * 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;
      }
    
    } 
    
  4. Created a new DRL containing the following contents:

    package demo;
    
    import demo.HelloWorld;
    
    rule "hello"
    
    when 
        HelloWorld(message == "Joe");
    then
        System.out.println("Hello Joe!");
    end
    
  5. When I deploy it to my Kie Server under this URL:

http://localhost:8080/kie-server-6.2.0.Final-webc/services/rest/server/containers/helloworld

I get the following response when I copy and paste the above URL in Google Chrome:

<response type="SUCCESS" msg="Info for container hello">
<kie-container container-id="hello" status="STARTED">
    <release-id>
        <artifact-id>Hello</artifact-id>
        <group-id>demo</group-id>
        <version>1.0</version>
    </release-id>
    <resolved-release-id>
        <artifact-id>Hello</artifact-id>
        <group-id>demo</group-id>
        <version>1.0</version>
    </resolved-release-id>
    <scanner status="DISPOSED"/>
</kie-container>
</response>
  1. When I try to do a POST using the following payload (using Postman or SoapUI):

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

  2. Received the following:

    HTTP Status 415 - Cannot consume content type type Status report message Cannot consume content type

    description The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

What am I possibly doing wrong? I went to Deploy -> Rule Deployments and registered my kie-server along with creating a container called helloworld and as one can see from Step # 5, it worked. Perhaps I am not deploying it correctly?

Btw, I used the following Stack Overflow post as a basis (prior to asking this question)...

Most of the search results from Google just explain how to programmatically create Drools projects by setting up Maven based projects. Am evaluating KIE Drools Workbench to see how easily a non-technical person can use KIE Drools Workbench to generate Drools based rules and execute them.

Am I missing a step? Under Tomcat 7, it only contains the following directories under apache-tomcat-7.0.64/webapps/kie-server-6.2.0.Final-webc:

META-INF

WEB-INF

Thanks for taking the time to read this...

回答1:

What content type are you using in your POST request header? As far as I remember, that error message happened if you didn't provide a content-type: application/xml in your request's header.

Hope it helps,



回答2:

are you ok?

The response of Esteban is right, but, you should add a another header, the header that you need to add is "Authorization", and the value of Authorization is the user that you registered to you application realm to your kie-server converted in base64. e.g.:

kieserver:system*01

converted to base64:

a2llc2VydmVyOnN5c3RlbSowMQ==

Anyway, the complete header of my request is like this:

Authorization : Basic a2llc2VydmVyOnN5c3RlbSowMQ==
Content-Type  : application/xml

I hope it was helpful.

Sorry for my english! :)



回答3:

I got it working with using Postman (Chrome app / plugin) with the Authorization tab selected to No Auth. Really cool response!

<response type="SUCCESS" msg="Container helloworld successfully called.">
     <results>
         <![CDATA[<execution-results>
           <result identifier="message">
                <demo.HelloWorld>
                    <message>Joe</message>
                </demo.HelloWorld>
           </result>
           <fact-handle identifier="message" external-form="0:4:1864164041:1864164041:4:DEFAULT:NON_TRAIT"/>
</execution-results>]]>
           </results>
</response>