我正在尝试为Oracle XSQL Servlet编写一些自定义序列化程序。我正在尝试将我的两个序列化程序保留在本地.ear中,因为它们仍在开发和测试中,我不想损害生产代码。但是,我收到以下错误
XML-25021:XSQL配置文件
中未定义Serializer 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>
我错过了什么?
答案 0 :(得分: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,我很乐意听到它。