ServiceResponse结果始终为空(JAXB,KIE Workbench& KIE Server 6.5.0)

时间:2017-08-04 10:17:39

标签: jaxb kie drools-kie-server

我在KIE Workbench,6.5.0版本和KIE执行服务器6.5.0上运行了一个项目,所有这些都在同一个本地Wildfly 10上运行。它工作正常。 我有一个简单的规则,正在无状态的KieSession中执行,没有任何过程或任何过程。我希望该规则可以验证基本信息并将有关已触发的验证的信息添加到全局变量中。在我测试的示例中,我只是修改一个全局变量以查看它是否有效,但由于某种原因,我从来没有从服务中得到结果,我希望至少有一些结果。

这是我发送的JAXB请求:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<batch-execution lookup="kieSessionStateless">
    <insert disconnected="false" entry-point="DEFAULT" return-object="false" out-identifier="myorganization.myproject.bom.MyObject">
        <object xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="myObject">
            <myDescription>description</myDescription>
            <myID>0</myID>
        </object>
    </insert>
    <set-global out-identifier="globalList" identifier="globalList">
        <object xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="jaxbListWrapper">
            <type>LIST</type>
        </object>
    </set-global>
    <get-objects out-identifier="globalList"/>
    <fire-all-rules max="-1"/>
</batch-execution>

执行的规则非常简单:

rule "MY FIRST RULE"

    when
        myorganization.myproject.bom.MyObject( myID == 0 )
    then
        myorganization.myproject.bom.GlobalResponses globalResponses = new myorganization.myproject.bom.GlobalResponses();
        globalResponses.setRuleName("MY FIRST RULE");
        globalResponses.setRuleResponse("MY ID IS 0");
        globalList.add(globalResponses);
        System.out.println("MY ID IS 0");

end

在Wildfly控制台中,我看到打印的行没有任何其他信息(如错误的堆栈跟踪),所以我总结一切都运行良好:

13:04:36,315 INFO  [stdout] (default task-39) MY ID IS 0

但是我总是得到相同的响应:它表明“进程”已经正确终止(所以它似乎乍一看),因此我期待Result有一些东西(一个空的xml响应,带有一些数据的xml响应)在其中,...):

System.out.println("Message: "+response.getMsg());
System.out.println("Result: "+response.getResult());
System.out.println("Type: "+response.getType());

Message: Container KieContainer successfully called.
Result: null
Type: SUCCESS
Response: ServiceResponse[SUCCESS, msg='Container KieContainer successfully called.']

使用KieServicesClient调用客户端:

KieServicesConfiguration config =  KieServicesFactory.
                newRestConfiguration(urlKieServer,
                    name,
                    password);
config.setMarshallingFormat(MarshallingFormat.JAXB); 
KieServicesClient client = KieServicesFactory.newKieServicesClient(config);  

JAXBContext jaxbContext = DroolsJaxbHelperProviderImpl.createDroolsJaxbContext(classNames, null);
Marshaller marshaller = jaxbContext.createMarshaller(); 
StringWriter xml = new StringWriter(); 
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

marshaller.marshal(command, System.out);
marshaller.marshal(command, xml);

ServiceResponse<String> response = client.executeCommands("instances/"+containerName, xml.toString()); 

我错过了一些东西,但我真的不知道是什么。

所有相关项目都在GitHub。由于我不能发布两个以上的链接,我将在评论中添加直接链接。

这个问题也在: Drools User group

1 个答案:

答案 0 :(得分:0)

我能够完成生命周期并发送有效请求并获得有效答案。我的部分问题是用于构造XML的代码。构造有效JAXB请求的最佳方法是使用KIE提供的API,可以找到一个示例  here

无论如何,对使用通用客户端项目建立与KIE Server 6.5.0的连接感兴趣,可以参考my GitHub上的代码。