昨天利用truelicense生成了证书文件,今天在项目中加入了验证代码,在项目启动时会安装license.lic证书。但是在启动过程中,报了下面的错误
2020-06-18 08:35:43,464 [INFO] [main] org.springframework.scheduling.quartz.SchedulerFactoryBean [SchedulerFactoryBean.java : 711] Will start Quartz Scheduler [SysScheduler] in 30 seconds
2020-06-18 08:35:43,475 [INFO] [main] com.dhcc.lic.listener.LicenseCheckListener [LicenseCheckListener.java : 58] ++++++++ 开始安装证书 ++++++++
2020-06-18 08:36:05,081 [ERROR] [main] com.dhcc.lic.core.LicenseVerify [LicenseVerify.java : 40] 证书安装失败!
de.schlichtherle.xml.PersistenceServiceException: java.lang.reflect.UndeclaredThrowableException
at de.schlichtherle.xml.PersistenceService.load(PersistenceService.java:397)
at de.schlichtherle.xml.PersistenceService.load(PersistenceService.java:455)
at de.schlichtherle.xml.PersistenceService.load(PersistenceService.java:484)
at de.schlichtherle.xml.GenericCertificate.getContent(GenericCertificate.java:425)
at de.schlichtherle.license.LicenseManager.install(LicenseManager.java:432)
at de.schlichtherle.license.LicenseManager.install(LicenseManager.java:406)
at de.schlichtherle.license.LicenseManager.install(LicenseManager.java:382)
at com.dhcc.lic.core.LicenseVerify.install(LicenseVerify.java:37)
at com.dhcc.lic.listener.LicenseCheckListener.onApplicationEvent(LicenseCheckListener.java:69)
at com.dhcc.lic.listener.LicenseCheckListener.onApplicationEvent(LicenseCheckListener.java:19)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:400)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:354)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:886)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:161)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
at com.dhcc.SysApplication.main(SysApplication.java:27)
Caused by: java.lang.reflect.UndeclaredThrowableException: null
at de.schlichtherle.xml.PersistenceService$1.exceptionThrown(PersistenceService.java:79)
at com.sun.beans.decoder.DocumentHandler.handleException(DocumentHandler.java:359)
at com.sun.beans.decoder.DocumentHandler$1.run(DocumentHandler.java:385)
at com.sun.beans.decoder.DocumentHandler$1.run(DocumentHandler.java:372)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at com.sun.beans.decoder.DocumentHandler.parse(DocumentHandler.java:372)
at java.beans.XMLDecoder$1.run(XMLDecoder.java:201)
at java.beans.XMLDecoder$1.run(XMLDecoder.java:199)
at java.security.AccessController.doPrivileged(Native Method)
at java.beans.XMLDecoder.parsingComplete(XMLDecoder.java:199)
at java.beans.XMLDecoder.close(XMLDecoder.java:174)
at de.schlichtherle.xml.PersistenceService.load(PersistenceService.java:395)
... 24 common frames omitted
Caused by: org.xml.sax.SAXParseException: 文件提前结束。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1472)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1014)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:327)
at com.sun.beans.decoder.DocumentHandler$1.run(DocumentHandler.java:375)
... 34 common frames omitted
2020-06-18 08:36:05,082 [INFO] [main] com.dhcc.lic.listener.LicenseCheckListener [LicenseCheckListener.java : 71] ++++++++ 证书安装结束 ++++++++
在论坛上看到fuwen1989相同的错误
但是他这个问题在我这里没有,因此花费了好些时间之后,我发现其实隐藏了另外一个错误才导致的这个问题。问题就是服务端和客户端的 licenseCheck(自定义需要校验的License参数) 的类路径是否一致,比如我在生成证书的服务端这个类的路径是xxx.xxx.license.xxx,但是在我的项目客户端的路径却是xxx.xxx.lic.xxx,因此在项目启动安装证书时其实还是按照服务端的路径去映射查找这个类的,因此导致出现这个错误。
解决方法就是客户端路径改成跟服务端一样就可以了。