Лучше всего , а не , чтобы (не) маршаллизовать и не компилировать файл DMN вручную ;вместо этого использовать стандартные средства стандартной сборки KieContainer из KJAR; как описано в руководстве пользователя в документации .
Другими словами, это правильно работает с вашим файлом DMN:
KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
DMNRuntime dmnRuntime = KieRuntimeFactory.of(kieContainer.getKieBase()).get(DMNRuntime.class);
DMNModel dmnModel = dmnRuntime.getModel(namespace, modelName);
DMNContext context = dmnRuntime.newContext();
((DMNRuntimeImpl) dmnRuntime).setOption(new RuntimeTypeCheckOption(true));
DMNResult result = dmnRuntime.evaluateAll(dmnModel, context);
, в результате получается 9
.
Если вы действительно хотите использовать KieHelper, лучше всего передать файл DMN в качестве KieResource на вызов KieHelper.getKieContainer(...)
, например, так:
KieContainer kieContainer = KieHelper.getKieContainer(ks.newReleaseId("org.kie", "dmn-test-" + UUID.randomUUID(), "1.2"),
ks.getResources().newFileSystemResource(new File(dmnFile)));
DMNRuntime dmnRuntime = KieRuntimeFactory.of(kieContainer.getKieBase()).get(DMNRuntime.class);
((DMNRuntimeImpl) dmnRuntime).setOption(new RuntimeTypeCheckOption(true));
DMNModel dmnModel = dmnRuntime.getModel(namespace, modelName);
DMNContext context = dmnRuntime.newContext();
DMNResult result = dmnRuntime.evaluateAll(dmnModel, context);
System.out.println(result);
вы можете при необходимости изменить ks.getResources().newFileSystemResource(...)
на ресурс на основе URL, ClassPath, Byte, ... на основе вашего варианта использования.Таким образом, KieHelper будет отвечать за демаршаллинг
Также этот второй фрагмент работает для меня с вашим файлом DMN, в результате получается 9
.
Проблема в вашем коде - инициализацияDMNCompiler на самом деле не предназначен для ручного запуска пользователем, и фактически нигде в документации нет необходимости управлять этим вручную;оба вышеупомянутых метода делегируют это внутренним компонентам KieContainer / KieHelper, что будет стандартным способом.
Я бы посоветовал следовать сборке KieContainer, как подробно описано в документации, как в предыдущем примере, но яНадеюсь, что этот ответ поможет вам решить в любом случае - локально оба работают на меня.
Надеюсь, это поможет!