2

我的问题有两个。首先,我将解释这个问题,其次,假设解决方案是实现一个类加载器,那么如何在 Web 应用程序上执行此操作。

我的问题是:我们公司正在使用另一家公司制作的框架。它使用 xml 文件生成网页,这些 xml 文件位于另一个库(jar 文件)中。它并不意味着是动态的,因为这些库是经常生成的(每周?),但它们决定了有多少字段,它收集什么类型的信息(日期时间、组合框等)等等。

现在我的公司提出了一个问题,是否可以动态地移动这些字段(通过动态,我的意思是理想情况下您可以刷新页面并查看对布局所做更改的效果)。我做了一些初步测试,发现修改 xml 确实会在网页上产生预期的效果,但是,由于这些 xml 文件位于 jars 中,这意味着我有两种可能性:

  1. 创建一个在我的 Web 应用程序范围之外修改 jar 的工具,尽管这显然意味着它绝对不能是动态的。此外,为了管理该工具,我必须在 Web 应用程序之外创建一个界面。此外,我似乎无法摆脱这样一种印象,即这是一种令人难以置信的 hacky 方法,我应该不惜一切代价避免这种解决方案。
  2. 我实现了一个类加载器(特别是getResourceAsStream),当我看到加载一个这样的 xml 文件的调用,而不是执行默认行为时,我根据原始生成 xml 文件,根据需要修改信息,然后将资源返回到调用者(在这种情况下是第三方框架)。

第一个问题是,#2 是我最好的选择还是存在其他选择(或者我应该坚持 #1)?

我的第二个问题是,假设我应该实现自己的类加载器,我怎样才能最好地在我的 Web 应用程序上做到这一点?我正在使用 Tomcat 7,但如果可能的话,我希望解决方案独立于我正在使用的 Web 容器。

任何帮助将不胜感激!

4

2 回答 2

1

您可能可以简单地将 jar 分解到类路径上的目录并即时更新 XML 文件。这不会考虑应用程序中的任何内部缓存(如果有的话,那是一个不同的问题),但它实现起来很简单,并且不会让您陷入充满恶作剧的 ClassLoader 业务。

于 2012-05-08T21:24:59.023 回答
0

我不确定我是否理解你的问题。但我想你可以尝试使用 thinkworks 的 xstream api。它可以为你动态生成 xml,给你一个 Java 对象,从这一点开始你可以按照你的方式处理这些 xml现在生成您的网页。我知道这个答案非常琐碎,但是如果这可以引导您找到一个新的 api,可以帮助您以最小的麻烦生成 xml 的新方法,那么我想它会很好地满足您的目的。

于 2012-05-08T20:47:25.300 回答