如何在第二次服务器启动时修复'javax.xml.parsers.FactoryConfigurationError'

问题描述 投票:0回答:1

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

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

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

不幸的是,服务器在每次second启动时都会引发ClassNotFoundException,否则应用程序将表现正常。有谁知道如何解决它?

我也尝试过将jar包含在类路径中或使用清单指定它,但两者均无效。

我收到以下错误:

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```
java jaxb glassfish classloader
1个回答
0
投票
ClassNotFoundException

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

© www.soinside.com 2019 - 2024. All rights reserved.