0

我正在尝试为 Oracle XSQL Servlet 编写一些自定义序列化程序。我试图将我的两个序列化程序保留在本地 .ear 中,因为它们仍在开发和测试中,我不想损害生产代码。但是,我收到以下错误

XML-25021:XSQL 配置文件中未定义序列化程序 XLSv2

.war/WEB-INF 的目录列表看起来像

classes/
        scott/
              XLSv2Serializer.class
              XLSXSerializer.class
lib/
    <empty>
web.xml
MyConfig.xml

我的 WEB-INF/web.xml 看起来像:

<web-app>
  <display-name>demoSerializer</display-name>
  <distributable />
    <init-param>
        <param-name>xsql.config</param-name>
        <param-value>MyConfig.xml</param-value>
        <description>use my dev config file</description>
    </init-param>
</web-app>

MyConfig.XML 看起来像:

<XSQLConfig>
  <serializerdefs>
    <serializer>
      <name>XLSv2</name>
      <class>scott.XLSv2Serializer</class>
    </serializer>
    <serializer>
      <name>XLSX</name>
      <class>scott.XLSXSerializer</class>
    </serializer>
  </serializerdefs>
</XSQLConfig>

我错过了什么?

4

1 回答 1

0

弄清楚了。首先,我换了

<?xml-stylesheet serializer="{@serializer}"?>

<?xml-stylesheet serializer="java:scott.XLSXSerializer"?>

这迫使它在 WEB-INF/classes 中查找。由于我无权编辑 XSQLConfig 并且我的序列化程序是 .war 的本地文件,因此我有点烦恼,我必须在测试时手动更改序列化程序。

在此之后,我收到“无法加载序列化程序错误”。

Apache POI ooxml 需要 xmlbeans。第二个问题是在服务器上没有找到 xmlBeans,因此 Serializer 会安静地死掉并且永远不会被加载。由于某种原因,被抛出的异常没有进入日志。在移动代码之后,主要是创建工作簿的位置,我终于看到了异常。修复将 xmlbeans 放在 WEB-INF/ 中的 lib 目录中

最后附注:我如何覆盖 xsql.config 从来没有工作过,即使文档说它应该这样做。我通过故意在 MyConfig.XML 中编写格式错误的 XML 发现了这一点。该应用程序在应该失败时仍然部署并运行良好。

如果有人知道为单个 .ear 覆盖 XSQLConfig.xml 的方法,我很想听听。

于 2010-09-30T20:17:57.407 回答