我正在编写一个使用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");
不幸的是,服务器在每次启动时都会抛出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```
最佳答案
ClassNotFoundException
如果您的类路径中有多个版本的类(在这种情况下为de.mycompany.sdk.parser.SAXParserFactoryWrapper),则会发生这种情况。当您的类路径中有同一个库的多个版本时,通常会发生这种情况。