我在java中使用了我自己的xlst转换器(XSLTTransformator),但是转换非常大,我得到了错误:
Caused by: javax.xml.transform.TransformerConfigurationException: JAXP0801002: the compiler encountered an XPath expression containing '107' operators that exceeds the '100' limit set by 'FEATURE_SECURE_PROCESSING'.
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:990)
at com.aspp.dms.ruleengine.transformation.TemplatesCache.retrieveUncached(TemplatesCache.java:44)
at com.aspp.dms.ruleengine.transformation.TemplatesCache.retrieveUncached(TemplatesCache.java:21)
at com.gratex.java.util.SoftValueCache.get(SoftValueCache.java:41)
at com.aspp.dms.ruleengine.transformation.XSLTTransformator.transform(XSLTTransformator.java:73)
你能帮我找到正确的java参数来解决我的问题吗?比如-DxpathOperatorsLimit=150
谢谢
4条答案
按热度按时间cetgtptt1#
这种行为似乎来自新的FEATURE_SECURE_PROCESSING,Oracle在最近的Java“更新”中引入了该功能。https://www.oracle.com/java/technologies/javase/11-0-15-relnotes.html
他们引入了3个参数:
您的问题出现在#2(JAXP 0801002,默认值100)上。我们在#3(JAXP 0801003,默认值10.000)上遇到了一个非常类似的问题,包含以下消息(引用,以便Google可以找到它):
我们浪费了两天时间才摆脱了那件事。
我们在java调用中添加了一些参数:
参数1、2、3用于解决问题。值“0”将限制设置为“off”。由于XPath现在可以变得很大,因此设置堆和堆栈大小并更改垃圾收集的行为(参数4-6)可能是明智的。
希望对你也有帮助,玩得开心!
f0brbegy2#
如果你在MacBook M1或更新版本上遇到这个问题。请尝试亚马逊Corretto或Zulu的兼容JDK版本。我不得不尝试多个版本才能正常工作,但具体来说是8. 275. https://www.azul.com/downloads/?version=java-8-lts&os=macos&architecture=arm-64-bit&package=jdk&show-old-builds=true
希望这有帮助!
7uhlpewt3#
拉胡尔·米纳-Djdk.xml.xpathExprGrpLimit=0 -Djdk.xml.xpathExprOpLimit=0 -Djdk.xml.xpathTotalOpLimit=0
在你的重启文件里放3个步骤。
h5qlskok4#
我在使用Oracle OpenJDK17的M1 mbp中遇到了这个错误。在基于OpenJDK17和Centos的产品环境中运行时也会出现这个错误。
这个answer确实对我有帮助,但是我不能修改我们产品集群中的所有JVM配置。
我用Java代码设置了这三个参数:
注意:请在初始化TransformerFactory之前设置这些参数。