繁体   English   中英

如何在每秒钟服务器启动时修复“javax.xml.parsers.FactoryConfigurationError”

[英]How to fix 'javax.xml.parsers.FactoryConfigurationError on every second server startup'

我正在编写一个使用 JAXB 和 JAX-RS 的 web 应用程序。 用于获取/发送数据到服务器的内容类型是 XML。 web 应用程序在 GlassFish 服务器(4.1.2/5)中运行,使用的 JDK 为 1.8。

问题是内部 SAXParser 允许 doctype 声明,这使得 XEE 攻击成为可能。 我无法将特定功能注入 SAXParserFactory,因此我为 SAXParserFactory 构建了一个包装器,它设置了该功能。 SAXParserFactory 是使用系统属性注册的。

System.setProperty("javax.xml.parsers.SAXParserFactory","de.mycompany.sdk.parser.SAXParserFactoryWrapper");

不幸的是,服务器在每次启动时都会抛出ClassNotFoundException ,否则应用程序会正常运行。 有谁知道如何解决它?

我还尝试将 jar 包含到 class 路径中或使用清单指定它,但都没有工作。

我收到以下错误:

javax.xml.parsers.FactoryConfigurationError: Provider de.mycompany.sdk.parser.SAXParserFactoryWrapper not found
at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:200)
    at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:152)
    at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:232)
    at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:127)
    at com.sun.enterprise.deployment.io.DeploymentDescriptorFile.getSAXParser(DeploymentDescriptorFile.java:125)
    at com.sun.enterprise.deployment.io.DeploymentDescriptorFile.read(DeploymentDescriptorFile.java:305)
    at com.sun.enterprise.deployment.io.DeploymentDescriptorFile.read(DeploymentDescriptorFile.java:245)
Caused by: java.lang.ClassNotFoundException: de/mycompany/sdk/parser/SAXParserFactoryWrapper
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:124)
    at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:188)
    ... 56 more```

如果您的 class 路径中有多个版本的 class(在这种情况下为 de.mycompany.sdk.parser.SAXParserFactoryWrapper),则可能发生ClassNotFoundException 当您的类路径中有同一个库的多个版本时,通常会发生这种情况。

谢谢你的帮助。 我找到了解决我的问题的方法。 我使用 GlassFish CLI 部署了应用程序,它可以工作。 之前的尝试是使用 NetBeans 完成的。 似乎 NetBeans 在 GlassFish 服务器的启动或关闭过程中做了任何不同的事情,这涉及到异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM