簡體   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