【问题标题】:how to solve the Java upgrade 15 to 16 issue with Castor - XML如何使用 Castor - XML 解决 Java 升级 15 到 16 的问题
【发布时间】:2022-06-24 17:17:25
【问题描述】:

我已将 java 版本从 15 升级到 16,运行时出现以下错误。

java.lang.RuntimeException:无法实例化序列化程序 com.sun.org.apache.xml.internal.serialize.XMLSerializer:java.lang.IllegalAccessException:类 org.exolab.castor.xml.BaseXercesJDK5Serializer 无法访问类 com。 sun.org.apache.xml.internal.serialize.XMLSerializer(在模块 java.xml 中)因为模块 java.xml 不会将 com.sun.org.apache.xml.internal.serialize 导出到未命名模块 @646cb2e

【问题讨论】:

  • 嗯......你不应该升级到 Java 16,因为 Java 16 已经报废了。

标签: java spring


【解决方案1】:

您似乎遇到了https://github.com/castor-data-binding/castor/issues/76 的另一种表现形式(已关闭)。

这种事情是由应用程序代码(例如 Castor)直接引用内部 JDK 类(在本例中为 com.sun.org.apache.xml.internal.serialize.XMLSerializer)引起的。这应该作为 Castor 问题提出。

不幸的是,Castor 数据绑定似乎是一个垂死的项目,因此您可能需要开发自己的修复程序才能使其在 Java 16 及更高版本上运行。

如果你要这样做,这里就是注入 JDK 内部包名的地方:

https://github.com/castor-data-binding/castor/blob/master/xml/src/main/java/org/exolab/castor/xml/

XercesJDK5Serializer.javaBaseXercesJDK5Serializer.java

【讨论】:

  • 如果可能的话,请您详细解释一下可以针对此脚轮问题实施的修复。
  • 嗯......鉴于我自己没有做过,不,我做不到。但是您需要尝试创建com.sun.org.apache.xml.internal.serialize.XMLSerializer 实例的代码,该实例使用XMLSerializer ......不是JDK 内部结构的一部分。
【解决方案2】:

您可以将属性设置为使用自己的 Xerces 来防止该问题。

context.setProperty(org.castor.xml.XMLProperties.SERIALIZER_FACTORY, org.exolab.castor.xml.XercesXMLSerializerFactory.class.getName());

更改 Marshaller marshaller = new Marshaller(myWriter);

这样的事情

StringWriter myWriter= new StringWriter(); XMLContext xmlContext = new XMLContext(); xmlContext.setProperty(org.castor.xml.XMLProperties.SERIALIZER_FACTORY, org.exolab.castor.xml.XercesXMLSerializerFactory.class.getName()); Marshaller marshaller = xmlContext.createMarshaller(); marshaller.setWriter(myWriter);

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2010-11-05
    • 2018-02-20
    • 1970-01-01
    • 2014-04-04
    • 2018-10-04
    相关资源
    最近更新 更多