Upgrade from 4.x to 6.5.0.Final - Can't buildAll from .XLS file

313 views
Skip to first unread message

arnie....@gmail.com

unread,
Nov 7, 2016, 11:20:57 AM11/7/16
to Drools Usage
I upgraded an application that was using 4.0.3 to 6.5.0.Final. The following code always dies in the same place:

try {
   
KieServices kieServices = KieServices.Factory.get();
   
KieFileSystem kfs = kieServices.newKieFileSystem();
   
String drl = new SpreadsheetCompiler().compile(this.getClass().getResourceAsStream(ruleName), InputType.XLS);
    kfs
.write(ruleFileName, drl);
   
KieBuilder kieBuilder = kieServices.newKieBuilder(kfs);
    kieBuilder
.buildAll();
   
if (kieBuilder.getResults().hasMessages(org.kie.api.builder.Message.Level.ERROR)) {
        LOGGER
.info("Drools XLS Run-Time Errors: ");
       
for ( Message r : kieBuilder.getResults().getMessages() ) {
            LOGGER
.info("id:{} column:{} level:{} line:{} path:{} text:{}",
                r
.getId(), r.getColumn(), r.getLevel(), r.getLine(), r.getPath(), r.getText());
       
}
   
}
    kieContainer
= kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
   
return kieContainer;
} catch (Throwable e) {
    LOGGER
.info("Exception while parsing XLS: {}", e.getMessage());
    e
.printStackTrace();
   
throw new DLSSystemException(e.getClass().getName()
           
+ " caught when attempting to invoke KnowledgeBaseLoader.loadFromInputStream() "
           
+ " with rule name: " + ruleName, e, LOGGER);
}



org.drools.template.parser.DecisionTableParseException: An error occurred opening the workbook. It is possible that the encoding of the document did not match the encoding of the reader.
    at org
.drools.decisiontable.parser.xls.ExcelParser.parseFile(ExcelParser.java:85)
    at org
.drools.decisiontable.SpreadsheetCompiler.parseResource(SpreadsheetCompiler.java:126)
    at org
.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:110)
    at org
.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:83)
    at org
.drools.decisiontable.DecisionTableProviderImpl.compileResource(DecisionTableProviderImpl.java:78)
    at org
.drools.decisiontable.DecisionTableProviderImpl.loadFromResource(DecisionTableProviderImpl.java:44)
    at org
.drools.compiler.compiler.DecisionTableFactory.loadFromResource(DecisionTableFactory.java:37)
    at org
.drools.compiler.builder.impl.KnowledgeBuilderImpl.decisionTableToPackageDescr(KnowledgeBuilderImpl.java:404)
    at org
.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl$12.map(CompositeKnowledgeBuilderImpl.java:441)
    at org
.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildResource(CompositeKnowledgeBuilderImpl.java:326)
    at org
.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:311)
    at org
.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:115)
    at org
.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105)
    at org
.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:244)
    at org
.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64)
    at org
.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230)
    at org
.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198)
    at txdps
.dl.bpr.common.rulesengine.RulesCacheManager.loadKnowledgeBase(RulesCacheManager.java:80)
    at txdps
.dl.bpr.common.rulesengine.RulesCacheManager.getRuleBase(RulesCacheManager.java:32)
    at txdps
.dl.bpr.common.rulesengine.RulesEngine.invoke(RulesEngine.java:39)
    at txdps
.dl.bpr.common.rulesengine.ConditionEvaluator.evaluate(ConditionEvaluator.java:28)
    at txdps
.dl.bpr.li.rules.performIssuance.determineTransactionEligibility.DetermineTransactionEligibilityConditionEvaluator.evaluate(DetermineTransactionEligibilityConditionEvaluator.java:86)
    at txdps
.dl.bpr.li.business.impl.ViewBasicManagerImpl.evaluateByFlowType(ViewBasicManagerImpl.java:666)
    at txdps
.dl.bpr.li.business.impl.ViewBasicManagerImpl.determineTransactionEligibility(ViewBasicManagerImpl.java:77)
    at txdps
.dl.bpr.li.ui.controller.ViewBasicRecordController.formBackingObject(ViewBasicRecordController.java:74)
    at org
.springframework.web.servlet.mvc.AbstractFormController.getErrorsForNewForm(AbstractFormController.java:361)
    at org
.springframework.web.servlet.mvc.AbstractFormController.showNewForm(AbstractFormController.java:341)
    at org
.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:281)
    at org
.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
    at org
.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
    at org
.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    at org
.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    at org
.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)
    at org
.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574)
    at javax
.servlet.http.HttpServlet.service(HttpServlet.java:618)
    at javax
.servlet.http.HttpServlet.service(HttpServlet.java:725)
    at org
.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org
.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at txdps
.dl.bpr.common.servlet.filter.UserFunctionFilter.doFilter(UserFunctionFilter.java:123)
    at org
.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org
.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org
.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org
.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org
.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at txdps
.dl.bpr.common.servlet.filter.SelectedApplicantFilter.doFilter(SelectedApplicantFilter.java:62)
    at org
.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org
.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org
.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
    at org
.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
    at org
.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
    at org
.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
    at org
.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
    at org
.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
    at org
.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
    at org
.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
    at org
.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
    at org
.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
    at org
.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
    at org
.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
    at org
.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org
.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at txdps
.dl.bpr.common.servlet.filter.TrimFilter.doFilter(TrimFilter.java:56)
    at org
.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org
.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at ch
.qos.logback.classic.selector.servlet.LoggerContextFilter.doFilter(LoggerContextFilter.java:70)
    at org
.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org
.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org
.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org
.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:106)
    at org
.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
    at org
.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org
.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org
.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org
.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
    at org
.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org
.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
    at org
.apache.coyote.ajp.AbstractAjpProcessor.process(AbstractAjpProcessor.java:831)
    at org
.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
    at org
.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
    at org
.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
    at java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org
.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java
.lang.Thread.run(Thread.java:745)
Caused by: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Your InputStream was neither an OLE2 stream, nor an OOXML stream
    at org
.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:183)
    at org
.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:140)
    at org
.drools.decisiontable.parser.xls.ExcelParser.parseFile(ExcelParser.java:83)
   
... 83 more
Nov07 10:17:47.710 ERROR[RulesCacheManager             ][am20909::86] - org.drools.template.parser.DecisionTableParseException caught when attempting to invoke KnowledgeBaseLoader.loadFromInputStream()  with rule name: /properties/txdps/dl/bpr/li/rules/DetermineTransactionEligibility_ADMIN.xls
org
.drools.template.parser.DecisionTableParseException: An error occurred opening the workbook. It is possible that the encoding of the document did not match the encoding of the reader.
    at org
.drools.decisiontable.parser.xls.ExcelParser.parseFile(ExcelParser.java:85) ~[drools-decisiontables-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.decisiontable.SpreadsheetCompiler.parseResource(SpreadsheetCompiler.java:126) ~[drools-decisiontables-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:110) ~[drools-decisiontables-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.decisiontable.SpreadsheetCompiler.compile(SpreadsheetCompiler.java:83) ~[drools-decisiontables-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.decisiontable.DecisionTableProviderImpl.compileResource(DecisionTableProviderImpl.java:78) ~[drools-decisiontables-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.decisiontable.DecisionTableProviderImpl.loadFromResource(DecisionTableProviderImpl.java:44) ~[drools-decisiontables-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.compiler.DecisionTableFactory.loadFromResource(DecisionTableFactory.java:37) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.builder.impl.KnowledgeBuilderImpl.decisionTableToPackageDescr(KnowledgeBuilderImpl.java:404) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl$12.map(CompositeKnowledgeBuilderImpl.java:441) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildResource(CompositeKnowledgeBuilderImpl.java:326) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackageDescr(CompositeKnowledgeBuilderImpl.java:311) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:115) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:244) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]
    at org
.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198) ~[drools-compiler-6.5.0.Final.jar:6.5.0.Final]



Which is an internal POI error. The spreadsheets are 97-2003 format. I tried saving them as .xslx and udpating to 2010 version but gave a different error.

Oddly enough, it reads the .xls just fine and generates a .drl file w/o issue. It is just the buildAll that fails.

The examples show the usage of the deprecated/internal API which of course we shouldn't be using... right?
Reply all
Reply to author
Forward
0 new messages