- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个网络应用程序,它使用 Saxon 库进行 XSLT 转换。当 Web 应用程序使用自己的名称(等于 webapps 目录中的子目录的名称)部署在 Tomcat 上时,此应用程序运行良好。但是现在我改了server.xml
将此 Web 应用程序用作根应用程序,现在它无法加载 Saxon 库。
我认为这与类加载器有关。我使用类加载器查找配置文件,当我将此应用程序设置为 tomcat 根应用程序时,这些配置文件也崩溃了。我能够使用 ServletContext 加载配置文件,这样问题就解决了。
但现在我得到以下错误:
Caused by: javax.xml.transform.TransformerFactoryConfigurationError: Provider net.sf.saxon.TransformerFactoryImpl not found
调用时使用:
TransformerFactory tf = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl",null);
我对 server.xml
所做的更改(我添加了 <Context>
元素):
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context docBase="foodvoc-pipelines" path="/" reloadable="true"/>
</Host>
似乎tomcat 在TransformerFactory
时找不到SAXON 库。使用 newInstance
中的类名创建方法。
我可以通过编程方式将目录(Web 应用程序中的 lib 目录)添加到类路径吗?或者我应该将 SAXON 库添加到 tomcat 在其类路径中使用的另一个目录(哪个?)?我可以创建撒克逊人吗 TransformerFactory
直接(没有类加载器)?还是我将此应用程序设置为根应用程序的配置有误?
最佳答案
我能够通过以编程方式将 tomcat webapp 中的 lib 目录添加到类加载器来实现这一点。
老实说,我对这个解决方案不是很满意,但它确实有效...
路径必须按照 answer to this question 中的描述静态添加.这是我的 FoodVocApplication
类中的一个静态方法。
private static void addPath(File file) throws NoSuchMethodException, MalformedURLException, InvocationTargetException, IllegalAccessException {
URI u = file.toURI();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Class<URLClassLoader> urlclass = URLClassLoader.class;
Method method = urlclass.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(classLoader, new Object[]{u.toURL()});
}
然后可以在初始化期间调用此方法:
FoodVocApplication.addPath(new File(webInff, "lib"));
其中 webInff
是一个 File 对象,指向 webapp 中的 WEB-INF 目录。
关于java - 在 tomcat root 的 Web 应用程序中找不到 TransformerFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28194374/
我正在尝试在 Windows 上运行的小于 1GB 的 VM 上设置 YouTrack 和 TeamCity。使用率将非常低(用户和请求)。这是一个 POC 环境,如果它有效,我可能会将它推送到一个超
所以我在尝试使用 FORFILES 解决这个问题时遇到了麻烦。我正在尝试获取不超过 4 天的文件。所以基本上少于 4 天。然而,这似乎不太可能,因为/d -4 获取所有 4 天或更早的项目。 以下是我
如何从下面的 events 表中选择小于 15 分钟前创建的 events? CREATE TABLE events ( created_at timestamp NOT NULL DEFAU
Google Analytics Realtime提供 rt:minutesAgo ,可以过滤查询。 然而,它是一个维度而不是一个度量标准,<=不能在过滤器中使用。 假设我想在最后 n 分钟内获得一些
iOS 核心数据 - 严重的应用程序错误 - 尝试插入 nil 你好, 我的应用程序实际上运行稳定,但在极少数情况下它会崩溃并显示此错误消息... 2019-04-02 20:48:52.437172
我想制作一个 html div 以快速向右移动(例如不到 1 秒)并消失。然后1秒后再次直接出现在这个过程最开始div的位置。此过程将由单击按钮并重复 10 次触发。 我试图在 CSS 中使用过渡属性
我发现使用 TimeTrigger 是 Windows 10 (UWP) 上计划后台任务的方式。但是看起来我们需要给出的最小数字是 15 分钟。只是想知道,即使我们安排它在接下来的 1 分钟内运行,警
我必须在 1 秒内在屏幕上打印 2^20 行整数 printf 不够快,还有其他易于使用的快速输出替代方法吗? 每一行只包含 1 个整数。 我要求它用于竞争性编程问题,我必须将其源代码提交给法官。 最
我是一名优秀的程序员,十分优秀!