- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
背景:
我们有一个 Oracle 11g 数据库,运行带有 JRE 版本 1.6.0_43 的 Java 虚拟机。我们的用户界面托管在 Apache Web 服务器上,该服务器通过 mod-plsql 与数据库交互。
我们有一些 PLSQL 过程调用存储在数据库中 Java 源中的 Java 过程 - 一个例子是我们用来生成 XLS 文件的 Java 过程。
我们之前一直使用 Apache POI 套件版本 3.8 通过 DOM 解析器从 XML 生成 XLS 文件,但我们已升级到 POI 3.9,以便我们可以使用 Streaming XSSF Workbook 类高效生成 XLSX 文件(SXSSF 在 POI 3.8 中可用,但核心过程 dispose() 直到 POI 3.9 才可用)。
此外,出于效率原因,我们在生成 XLSX 文件时使用 StAX 解析 ( XMLStreamReader ),而不是我们在生成 XLS 时使用的更耗内存的 DOM 解析器方法。
要将数据库中的 Java POI 3.8 升级到 3.9,我们分两步进行:
1) 在包含 POI 3.8 套件的 jar 上运行 dropjava:
dropjava -user=xxxxxx@xxxxxx poi-3.8-20120326.jar poi-examples-3.8-20120326.jar poi-excelant-3.8-20120326.jar poi-ooxml-3.8-20120326.jar poi-ooxml-schemas-3.8-20120326.jar poi-scratchpad-3.8-20120326.jar lib\commons-logging-1.1.jar lib\junit-3.8.1.jar lib\log4j-1.2.13.jar ooxml-lib\dom4j-1.6.1.jar ooxml-lib\stax-api-1.0.1.jar ooxml-lib\xmlbeans-2.3.0.jar
2) 然后我们运行 loadjava 命令来安装 3.9 套件:
loadjava -user=xxxxxx@xxxxxx -genmissing -resolve -force poi-3.9-20121203.jar poi-examples-3.9-20121203.jar poi-excelant-3.9-20121203.jar poi-ooxml-3.9-20121203.jar poi-ooxml-schemas-3.9-20121203.jar poi-scratchpad-3.9-20121203.jar lib\commons-logging-1.1.jar lib\junit-3.8.1.jar lib\log4j-1.2.13.jar ooxml-lib\dom4j-1.6.1.jar ooxml-lib\stax-api-1.0.1.jar ooxml-lib\xmlbeans-2.3.0.jar
XLSX一代一开始根本不起作用;我们在运行时在 Java 中收到了这个异常:
java.lang.ClassCastException
我们没有确认是哪个特定类导致了问题,但我们注意到,在安装 POI 3.9(其中包括 StAX stax-api-1.0.1 jar)后,数据库中的 Java 类库中有一些重复项。具体来说,这些类及其路径是重复的(并被导入到我们生成 xlsx 的 Java 源代码中):
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
由于重复项可能导致异常,我们删除了 StAX 解析器 jar(StAX 套件在 Java 版本之前的某个时刻被“折叠”到核心 JDK 中,因此无需导入 POI 3.9 中包含的 StAX jar):
dropjava -user=xxxxxx@xxxxxx ooxml-lib\stax-api-1.0.1.jar
这删除了重复的类并解决了 ClassCastException,即它不再发生。但有一个新问题。
问题:
新的 XLSX 方法现在在运行时间歇性失败并出现以下错误:
javax.xml.stream.FactoryFinder$ConfigurationError: Provider com.sun.xml.stream.ZephyrParserFactory not found
有问题的类 com.sun.xml.stream.ZephyrParserFactory, 似乎已正确安装在我们的数据库中。我们在一个单独的平台上做了一些测试,我们发现删除该类会完全破坏我们的解析,即我们确信该类已安装在我们的实时平台上,因为我们的代码在大多数情况下都可以工作,但如果未安装该类,则任何时候都不会工作。
该错误大约每 10 次左右的 XLSX 生成尝试才会发生一次(我们每次都使用不同的文件和相同的文件进行测试 - XML 的内容是什么似乎并不重要)。这行代码生成错误:
XMLInputFactory factory = XMLInputFactory.newInstance();
通过一些调查,我们发现错误是否发生取决于哪个 Oracle session 正在处理 Web 服务器收到的初始 HTTP 请求。 我觉得这里真正的问题是,是什么导致只有某些 Oracle session 无法作为提供者访问 Zephyr 类并产生错误?任何想法将不胜感激。
最佳答案
这可能与此处描述的 CDATA 事件
的处理有关 http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP5.html 。
根据输入文件是否触发此事件。如果引发该事件,您将收到 Provider com.sun.xml.stream.ZephyrParserFactory not found
错误。
您需要调查哪些代码尝试实例化这个具体的服务提供者。
通常,实现特定接口(interface)的服务提供者在 Jar 文件内的 META-INF/services
目录中声明。在这里找到 ServiceLoader 的描述它提供了一个简单的服务提供商加载工具
关于java - Oracle JVM 运行时错误 : Provider com. sun.xml.stream.ZephyrParserFactory 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37160733/
我正在尝试实现具有以下签名的方法: public static Pair, Stream> flatten(Iterator, Stream>> iterator); 该方法的目标是将每种流类型展平
我有两个流从两个不同的 api 获取。 Stream get monthOutStream => monthOutController.stream; Stream get resultOutStre
Stream.of(int[])返回 Stream ,而 Stream.of(String[])返回 Stream . 为什么这两种方法的行为不同?两者都应该返回 Stream和 Stream或 St
我正在使用 rxdart在 dart 中处理流的包。我被困在处理一个特殊的问题上。 请看一下这个虚拟代码: final userId = BehaviorSubject(); Stream getSt
我到处都找遍了,还是没弄明白。我知道你可以用流建立两个关联: 用于支持数据存储的包装器意味着作为消费者和供应商之间的抽象层 数据随着时间的推移变得可用,而不是一次全部 SIMD 代表单指令,多数据;在
考虑下面的代码: List l=new ArrayList<>(); l.add(23);l.add(45);l.add(90); Stream str=l.stream
我有一个大型主干/requirejs 应用程序,我想迁移到 webpack,最新的“webpack”:“^4.27.1”,但我遇到了一个我无法解决的错误。 我一直在阅读 https://webpack
我正在使用 xmpp 开发聊天应用程序,根据我们的要求,我们有三台服务器 Apache Tomcat 7、ejabbered 2.1.11 和 mysql 5.5, to run xmppbot on
我知道如何使用 Java 库,并且我可以编写一些循环来执行我需要的操作,但问题更多,为什么 scala.collection.JavaConverters 中没有任何内容或scala.collecti
我正在尝试创建一个单一的衬里,它应该计算一个非常长的文本文件中的唯一单词。独特的词例如:márya fëdorovna scarlet-liveried,...所以基本上都是非英语词。 我的问题是我的
如果我有以下情况: StreamWriter MySW = null; try { Stream MyStream = new FileStream("asdf.txt"); MySW =
有人可以帮我将以下语句转换为 Java8: 我有一个像这样的 HashMap : private Map, List>> someMap; 我想在java8中转换以下逻辑: private Strin
有人可以帮我将以下语句转换为 Java8: 我有一个像这样的 HashMap : private Map, List>> someMap; 我想在java8中转换以下逻辑: private Strin
考虑两种测试方法parallel()和sequential(): @Test public void parallel() throws Exception { System.ou
我是 NodeJS 的新手,我基本上想做的是通过 HTTP 将 .pdf 上传到我的服务器。我正在使用 POST rquest 来处理 Content-Type multipart/form-data
哪个更好:MemoryStream.WriteTo(Stream destinationStream) 或 Stream.CopyTo(Stream destinationStream)?? 我正在谈
给定一个 Stream,我想创建一个新的 Stream,其中的元素在它们之间有时间延迟。 我尝试使用 tokio_core::reactor::Timeout 和 Stream 的 and_then
我是 Kafka Streams 和 Spring Cloud Stream 的新手,但在将集成相关代码移动到属性文件方面已经阅读了有关它的好东西,因此开发人员可以主要专注于事物的业务逻辑方面。 这里
源代码看起来非常相似:pump , pipe .为什么我要使用一个而不是另一个?一个只是另一个的更好版本吗? 最佳答案 Stream.pipe 现在显然是自 0.3.x 以来的首选方法,因此尽可能尝试
我正在寻找是否有更好的方法来解决我不得不使用这些签名的困境(注意:由于 Spock 测试,T[][] 是必需的,我提供 T[][] 作为数据提供商) 我的方法签名是: public T[][] cr
我是一名优秀的程序员,十分优秀!