在迁移到 Java 17 时,我尝试按照 JEP-403 建议包含外部 Xerces 依赖项。 JEP-403 在“风险和假设”下明确说明了以下内容:
“使用 Xerces XML 处理器的 JDK 内部副本的代码。此类代码应使用 Xerces 库的独立副本,可从 Maven Central 获取。” (否则,这样的代码可能会失败)https://openjdk.org/jeps/403
但是,在包含 Xerces2 版本 2.12.2 后,我们的 SAXParser 使用的两个属性不再受支持,即 ACCESS_EXTERNAL_DTD 和 ACCESS_EXTERNAL_SCHEMA。
这是一个已知问题,我发现的大多数解决方案建议排除外部 Xerces(当它作为传递依赖项引入时)或使用板载 JDK 版本。
有没有更好的符合JEP-403建议的解决方案?
因此,事实证明,JEP 部分的措辞有些误导性。他们大概想说的是,您不应该直接针对 Xerces API 进行编码,因为那样可能会出现问题。不过,使用 JAX-B API 就可以了。