Есть ли способ записать класс внутри функции в слюнях, как это было в слюнях 2.x? - PullRequest
0 голосов
/ 05 августа 2020

В нашем приложении мы используем правила drools 2.x XML, когда мы перешли на jdk 8, у нас было исключение «ошибка построения импорта», так как мы использовали операторы импорта внутри <java:functions><![CDATA[ ]]><java:functions>. Это продукт с более чем 140 правилами. Ищу способ исправить это. если нет, нам нужно перейти на последние версии слюнявчиков, возможно 4.x или 5.x.

Любая подсказка здесь поможет ИЛИ Можем ли мы написать весь класс внутри функции в новом .drl или. xml файлы, как мы делаем в слюнявых 2.x?

ОШИБКА:

    org.xml.sax.SAXParseException; error constructing import
    at org.drools.io.FunctionsHandler.end(FunctionsHandler.java:112)
    at org.drools.io.RuleSetReader.endElement(RuleSetReader.java:618)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:392)
    at org.drools.io.RuleSetReader.read(RuleSetReader.java:445)
    at org.drools.io.RuleSetReader.read(RuleSetReader.java:325)
    at org.drools.io.RuleBaseLoader.loadFromReader(RuleBaseLoader.java:313)
    at org.drools.io.RuleBaseLoader.loadFromReader(RuleBaseLoader.java:271)
    at org.drools.io.RuleBaseLoader.loadFromReader(RuleBaseLoader.java:256)

Ниже показано, как мой XML выглядит

<?xml version="1.0"?>
<rule-set name="WorkingRuleSet" xmlns="http://drools.org/rules" xmlns:java="http://drools.org/semantics/java">
<application-data identifier="enabled">java.util.HashMap</application-data>
<application-data identifier="audit">com.business.service.AuditService</application-data>
<java:functions><![CDATA[
    public static class MappingHelper {
        public static method1(){
        ..........
        }
    }
import java.util.*;
import java.util.concurrent.locks.*;
    public static class LoggerUtil{
        public static method1(){
        ..........
        }
    }
]]></java:functions>
<rule name="Ping adapter_0" xmlns:java="http://drools.org/semantics/java">
   <parameter identifier="action">
     <java:class>com.business.action.Action</java:class>
   </parameter>
   <java:condition>action != null</java:condition>
   <java:condition>action.getName().equals(constant.ACTION_PING_ADAPTER)</java:condition>
   <java:consequence>
        import com.business.ejb.rules.RulesHelper;
        RulesHelper.getPlatformAPI().getDispatcher(ctx).ping(); 
   </java:consequence>
 <java:condition>enabled.get("Ping adapter_0") != null</java:condition></rule>
 <rule name="Ping adapter_1" xmlns:java="http://drools.org/semantics/java">
   <parameter identifier="action">
     <java:class>com.business.action.Action</java:class>
   </parameter>

   <java:condition>action != null</java:condition>
   <java:condition>action.getName().equals(constant.ACTION_PING_ADAPTER)</java:condition>

   <java:consequence>
        import com.business.ejb.rules.RulesHelper;
        RulesHelper.getPlatformAPI().getDispatcher(ctx).ping();
   </java:consequence>
 <java:condition>enabled.get("Ping adapter_1") != null</java:condition></rule>
 </rule-set>

При выполнении нижеприведенного метода возникает ошибка. Это происходит при вызове метода ниже.

'org.drools.io.RuleBaseLoader.loadFromReader (new StringReader (finalResult.toString ()));'

мы передаются xml в виде буфера.

...