2017-08-04 90 views
0

我在KIE Workbench 6.5.0版本和KIE执行服务器6.5.0运行中都有一个项目设置,全部位于同一本地Wildfly 10它工作正常。 我有一个简单的规则正在无状态的KieSession中执行,没有任何进程或任何其他。我希望规则能够验证基本信息并将关于激发的验证的信息添加到全局变量。在我测试的例子中,我只是修改一个全局变量来查看它是否有效,但由于某种原因,我从来没有从服务中得到结果,我期望至少有一些结果。ServiceResponse结果始终为空(JAXB,KIE Workbench和KIE Server 6.5.0)

这是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 

但我总是得到相同的回应:它表明“进程”已经正确终止(所以它似乎乍一看),因此我期望结果有一些东西(一个空的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

+0

GitHub上的Workbench项目:https://github.com/eggsandbutter/kieworkbench // GitHub上的服务项目:https://github.com/eggsandbutter/kieservices //在GitHub上测试项目:https:// github。 com/eggsandbutter/kietesting //要测试这个错误,可以执行测试TestStateless.testJaxB – Ruurd

+0

我遇到的问题是使用工作台和kie执行服务器。如果我使用简单的定制构建Java架构,我可以毫无问题地解决这个问题。 – Ruurd

回答

0

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

无论如何,有兴趣通过通用客户端项目建立与KIE服务器6.5.0的连接,可以参考my GitHub上的代码。

相关问题