最近升级到Java11并开始执行回归检查。当前在尝试调用com.itextpdf.text.pdf.pdf.pdfreader.close
时出现非法反射访问错误。目前在Itext版本5.5.13上,但也在Itext 7.0.0上试用过,出现了相同的问题。
有人对如何修复Java-11和iText之间的兼容性问题有什么建议吗?
警告:发生了非法反射访问操作警告:com.itextpdf.io.source.ByteBufferRandomAccessSource$1(文件:...repository/com/itextpdf/io/7.0.0/io-7.0.0.jar)对方法java.nio.directByteBuffer.Cleaner()进行非法反射访问警告:请考虑将此情况报告给com.itextpdf.io.source.ByteBufferRandomAccessSource$1的维护人员警告:使用--illegal-access=warn启用进一步非法反射访问操作的警告警告:所有非法访问操作将在以后的版本中被拒绝
虽然我支持一些建议,鼓励您调试代码并找到根本原因(然后提交拉请求),或者在iText Jira中创建一个问题,如果您是一个有支持合同的客户(这会提高问题的优先级),但这里有一个解决方案建议(我还没有测试过,但它可能会起作用):
使用分别接受InputStream
和OutputStream
的PDFReader
和PDFWriter
构造函数。在这种情况下,不应调用导致问题的代码。对于iText与您的文件系统交互的所有其他情况也是如此--将所有内容包装到InputStream
/OutputStream
中,或者处理Byte[]
数组。
所以这一行:
new PdfDocument(new PdfReader(inFilePath), new PdfWriter(outFilePath))
变成了这个:
new PdfDocument(new PdfReader(new FileInputStream(inFilePath)),
new PdfWriter(new FileOutputStream(outFilePath)))
您可能还希望将流包装到BufferedInputStream
/BufferedOutputStream
中。
同样,在处理pdffontFactory
时,使用接受byte[]
而不是表示文件路径等的string
的方法。
JDK11+spring批处理 有人知道那些警告是什么意思吗: 警告:发生了非法的反射访问操作警告:org.springframework.cglib.core.reflectutils$1(jar:file:/users/boru/downloads/spcljr/build/libs/spcljr-0.0.1-snapshot.jar!/boot-inf/lib/spring-core-5.0
在Java9中有很多关于非法反射访问的问题。 我发现了很多关于如何处理错误消息的讨论,但我想知道非法反射访问实际上是什么。 所以我的问题是: 我认为这与Java9中引入的封装原则有关,但我找不到一个解释,说明它们是如何联系在一起的,是什么触发了警告,以及在什么场景中。
我正在使用反射来调用java.util.Stream.Stream上的方法,但由于实际实现(ReferencePipeline等)具有运行的实际代码,因此在调用时会收到非法的反射访问警告,如果没有该调用,它将无法工作。我想知道是否有一种方法可以自动将其委托给一个访问不非法的超级方法?也就是说,我想调用,其中是合法的,而不是或任何实现。 编辑这里是一些代码。是通过反射获得的流的具体实例。
我正在使用Apache POI处理excel文件,从Java9开始,我得到了这条消息,根据这篇文章JDK9:发生了非法的反射访问操作。pySystemState我们应该等待开发人员修复这个问题,但是我应该在新的生产版本中保留它吗?我想跳过警告应该没问题。
在尝试构建时,。我按照其他人的建议添加了,但仍然得到相同的错误。 有什么建议吗? pom.xml