tomcat环境中file.encoding的修改方法

本文解决了一个JBPM流程引擎中出现的NullPointerException问题,原因是文件编码设置与操作系统默认编码不一致导致XML解析错误。通过修改Tomcat中catalina.bat文件的JAVA_OPTS参数,设置file.encoding为UTF-8来解决。

花了3天时间终于解决了这个问题,还是很开心的;)

问题:

严重: Servlet.service() for servlet default threw exception
java.lang.NullPointerException
 at org.jbpm.pvm.internal.util.XmlUtil.attribute(XmlUtil.java:311)
 at org.jbpm.pvm.internal.util.XmlUtil.attribute(XmlUtil.java:302)
 at org.jbpm.jpdl.internal.xml.JpdlParser.parseDocumentElement(JpdlParser.java:175)
 at org.jbpm.pvm.internal.xml.Parser.parseDocument(Parser.java:475)
 at org.jbpm.pvm.internal.xml.Parser.execute(Parser.java:394)
 at org.jbpm.pvm.internal.xml.Parse.execute(Parse.java:157)
 at org.jbpm.jpdl.internal.repository.JpdlDeployer.deploy(JpdlDeployer.java:60)
 at org.jbpm.pvm.internal.repository.DeployerManager.deploy(DeployerManager.java:46)
 at org.jbpm.pvm.internal.repository.RepositorySessionImpl.deploy(RepositorySessionImpl.java:55)
 at org.jbpm.pvm.internal.cmd.DeployCmd.execute(DeployCmd.java:46)
 at org.jbpm.pvm.internal.cmd.DeployCmd.execute(DeployCmd.java:32)
 at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
 at org.jbpm.pvm.internal.spring.CommandTransactionCallback.doInTransaction(CommandTransactionCallback.java:50)
 at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:128)
 at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:79)
 at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:54)
 at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:55)
 at org.jbpm.pvm.internal.repository.DeploymentImpl.deploy(DeploymentImpl.java:89)

 

原因是因为file.encoding默认的字符集跟操作系统有关,中文操作系统下面默认的字符集是GBK,如果流程定义的xml文件中用UTF-8,

则不能正确转换,所以需要修改file.encoding的值为UTF-8。

部署在tomcat中的文件要修改file.encoding的值,可以tomcat的catalina.bat文件中set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%的后面加上 -Dfile.encoding="UTF-8"

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值