繁体   English   中英

如何使用 Castor - XML 解决 Java 升级 15 到 16 的问题

[英]how to solve the Java upgrade 15 to 16 issue with Castor - XML

我已将 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

看来您遇到了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.java BaseXercesJDK5Serializer.java

您可以将属性设置为使用自己的 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);

暂无
暂无

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

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