【问题标题】:While fetching drl project jar from drools workbench, Java code not able to validate kmodule.xml从 drools 工作台获取 drl 项目 jar 时,Java 代码无法验证 kmodule.xml
【发布时间】:2022-06-15 02:44:59
【问题描述】:

我的 drools 引擎在远程服务器上运行,可以从我的机器访问。当尝试获取可以在该机器上的工件下看到的 jar 时,我收到以下错误。

Caused by: java.lang.RuntimeException: XSD validation failed against the new schema (cvc-complex-type.3.2.2: Attribute 'sequential' is not allowed to appear in element 'kbase'.) and against the old schema (cvc-elt.1.a: Cannot find the declaration of element 'kmodule'.).
    at org.drools.compiler.kproject.models.KieModuleModelImpl$KieModuleValidator.validate(KieModuleModelImpl.java:317)
    at org.drools.compiler.kproject.models.KieModuleModelImpl$KieModuleValidator.validate(KieModuleModelImpl.java:282)
    at org.drools.compiler.kproject.models.KieModuleModelImpl$KieModuleValidator.access$100(KieModuleModelImpl.java:257)
    at org.drools.compiler.kproject.models.KieModuleModelImpl$kModuleMarshaller.fromXML(KieModuleModelImpl.java:204)
    at org.drools.compiler.kproject.models.KieModuleModelImpl.fromXML(KieModuleModelImpl.java:152)
    at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:289)
    ... 113 common frames omitted
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.3.2.2: Attribute 'sequential' is not allowed to appear in element 'kbase'.
    at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
    at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:135)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284)
    at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:511)
    at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3587)
    at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processAttributes(XMLSchemaValidator.java:2992)
    at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:2286)
    at java.xml/com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:829)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2725)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:541)
    at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
    at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
    at java.xml/com.sun.org.apache.xerces.internal.jaxp.validation.StreamValidatorHelper.validate(StreamValidatorHelper.java:176)
    at java.xml/com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(ValidatorImpl.java:115)
    at java.xml/javax.xml.validation.Validator.validate(Validator.java:124)
    at org.drools.compiler.kproject.models.KieModuleModelImpl$KieModuleValidator.validate(KieModuleModelImpl.java:308)
    ... 118 common frames omitted

当我在本地机器上按照完全相同的步骤运行 drools docker 时,相同的代码可以正常工作。

public KieContainer kieContainer()
            throws IOException {
        KieServices ks = KieServices.Factory.get();

        KieResources resources = ks.getResources();
                String url = ""; // url of the jar created in the drools workbench UI
        
        UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);
        urlResource.setUsername("Username");
        urlResource.setPassword("Password"`enter code here`);
        urlResource.setBasicAuthentication("enabled");
        InputStream stream = urlResource.getInputStream();

        KieRepository repo = ks.getRepository();
        KieModule k = repo.addKieModule(resources.newInputStreamResource(stream));

        return ks.newKieContainer(k.getReleaseId());
    }

工作台中的 Kmodule:

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.drools.org/xsd/kmodule">

  <kbase name="ShipmentCheck" default="false" eventProcessingMode="stream" equalsBehavior="identity" packages="splitshipment">
    <ksession name="ShipmentCheck" type="stateful" default="true" clockType="realtime"/>
  </kbase>
  <kbase name="InventoryCheck" default="false" eventProcessingMode="stream" equalsBehavior="identity" packages="inventoryavailability">
    <ksession name="InventoryCheck" type="stateful" default="true" clockType="realtime"/>
  </kbase>
  <kbase name="CapacityCheck" default="false" eventProcessingMode="stream" equalsBehavior="identity" packages="capacity">
    <ksession name="CapacityCheck" type="stateful" default="true" clockType="realtime"/>
  </kbase>
  <kbase name="SafetyStockCheck" default="false" eventProcessingMode="stream" equalsBehavior="identity" packages="safetystock">
    <ksession name="SafetyStockCheck" type="stateful" default="true" clockType="realtime"/>
  </kbase>
</kmodule>

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 请包含工作台返回的 kmodule。

标签: java spring jar drools rule-engine


猜你喜欢
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多