[英]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.