2017-08-04 1 views
0

J'ai une configuration de projet dans KIE Workbench, version 6.5.0 et un serveur d'exécution KIE 6.5.0 en cours d'exécution, tous sur la même Wildfly locale 10 Cela fonctionne bien. J'ai une règle simple qui est exécutée dans une KieSession sans état, aucun processus ou quoi que ce soit. Je m'attends à ce que la règle valide les informations de base et à ajouter des informations sur les validations déclenchées à une variable globale. Dans l'exemple que je suis en train de tester, je viens de modifier une variable globale pour voir si cela fonctionne, mais pour une raison quelconque, je n'obtiens jamais un résultat du service, ce que je pense avoir au moins quelque chose.ServiceResponse Le résultat est toujours nul (JAXB, KIE Workbench & KIE Server 6.5.0)

C'est la demande JAXB j'envoyer:

<?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> 

La règle qui est exécutée est assez simple:

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 

Et dans la console wildfly je vois la ligne imprimée sans aucune information supplémentaire (comme une pile d'une erreur), donc je conclus que tout fonctionne bien:

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

Mais j'ai toujours la même réponse: elle indique que le "processus" s'est terminé correctement (donc il semble à première vue) et donc je m'attends à ce que Result ait quelque chose (une réponse xml vide, une réponse xml avec des données, ...):

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.'] 

Le client est appelé avec 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()); 

je manque quelque chose, mais je ne sais vraiment pas quoi.

Tous les projets connexes sont sur GitHub. Comme je ne peux pas poster plus de deux liens, j'ajouterai les liens directs dans un commentaire.

Cette question est aussi: Drools User group

+0

Projet Workbench sur GitHub: https://github.com/eggsandbutter/kieworkbench // Projet de services sur GitHub: https://github.com/eggsandbutter/kieservices // Test de projet sur GitHub: https: // github. com/eggsandbutter/kietesting // Pour tester cette erreur, exécuter le test TestStateless.testJaxB – Ruurd

+0

Le problème que je rencontre est l'utilisation du workbench et du serveur d'exécution kie. Si j'utilise une architecture Java simple et personnalisée, je suis capable de résoudre ce problème sans aucun problème. – Ruurd

Répondre

0

j'ai pu terminer le cycle de vie et envoyer une demande valide et obtenir une réponse valable. Une partie de mon problème était le code utilisé pour construire le XML. La meilleure façon de construire une demande JAXB valide est d'utiliser l'API fournie par KIE, un exemple peut être trouvé here.

Quoi qu'il en soit intéressé à établir une connexion à un serveur KIE 6.5.0 avec un projet client générique peut consulter le code my GitHub.