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?