【问题标题】:Parse XML file in GWT server-side在 GWT 服务器端解析 XML 文件
【发布时间】:2011-05-04 16:45:51
【问题描述】:

如何在服务器端解析 GWT 中的 XML 文件?我不能使用 XMLParser,因为它只适用于客户端。我需要在服务器端读取一个 XML 文件,将内容转换为 List 并使用 GWT-RPC 将它们返回给客户端。

提前致谢。

【问题讨论】:

  • 这完全取决于服务器端运行的应用程序堆栈。它可能是一个 Java EE WAR 容器。它可能是一个 PHP 框架。它可能是在运行 Django 的 wsgi 上运行的 Python。或任何其他网络框架。
  • 请注意,客户端 GWT 基本上是 JavaScript。它不对服务器 AFAIK 做任何假设。
  • @Santa - 谢谢,这有帮助。我正在使用 GAE 并尝试使用 XStream,但 GAE 有问题。我应该在我的 OP 中提到这一点。我现在正在尝试根据以下建议使用 Apache Digester。

标签: xml gwt


【解决方案1】:

我使用来自 Apache 项目的 JAXB。 http://jaxb.java.net/

它与 GWT XML 库有点不同。您无需编写代码来爬取 xml 树并进行自己的处理,而是使用 xsd 定义文件定义,运行程序来创建一堆数据传输类,然后一次性解析所有 xml 文件。

一些注意事项:

确保 JAXB jar 位于构建路径中的 jre 库之上。 最新版本和 GAE 存在问题,所以如果您使用 GAE,请使用 20090708 版本。

【讨论】:

  • 谢谢,我很快就会对此进行更多探索。
  • Re: Memcache 如果您通过重新部署应用程序来更新 xml,则会自动刷新 memcache。否则,您可以编写一个允许您强制重新读取的小 GWT 服务。最后,如果你想要一些非常复杂的东西,你可以在决定是从 memcache 还是从文件系统中提取时进行版本检查。
  • 我明白你在说什么。我有2个场景。 1.我当前的默认是v5,我重新部署了v5。 2.当前默认是v5,我上传v6,默认v6。在这两种情况下都会刷新内存缓存吗?顺便说一句,我最终使用 JAXB 进行解析,到目前为止它运行良好。感谢您的帮助。
  • AFAICT 当您部署程序的新版本(例如从 Eclipse 内部)时,内存缓存始终会完全刷新。此外,如果您有新版本,则永远不会与旧版本共享 memcache 版本。因此,如果您通过将 XML 放入您的 jar 文件并简单地重新部署来更新 XML,则不会出现任何缓存问题。如果您将新的 xml 放在具有单独更新过程的其他位置,则会出现问题。然后你必须手动刷新缓存。我有一个非常相似的设置,所以我很乐意提供帮助。
  • 我的 XML 包含在应用程序 jar 中。所以,按照你说的,我应该没问题。我正在试一试,最初会在代码中放入一些日志条目以测试确切的行为。我会回来的。感谢您分享您的经验。
【解决方案2】:

你的问题有点不清楚。 “将内容转换为列表”是什么意思?

如果您传递给客户端的只是一个可序列化/IsSerializable POJO 的列表,那么您如何获取这些 POJO 对客户端来说并不重要。

您可以使用任何与 Java 兼容的第三方解析器或类似 Apache Digester 的工具来构建对象

【讨论】:

  • 感谢您的回复。是的,它是可序列化 POJO 的列表。我使用了 Apache Digester,它成功了。但是读取一个只有 600 条记录的文件似乎有点慢,尽管我没有做太多测试。另一方面,我正在使用 GAE 并尝试权衡将记录存储在 XML 与应用程序引擎数据存储中的选项。就获取记录而言,您知道从性能角度来看哪种方法更好吗?
  • 您正在阅读的文件有多大?您确定缓慢是在读取文件而不是在分配 POJO 方面?
  • 我对 GAE 不太熟悉。我是 XML 的忠实拥护者,但它是一种在 Google 内部几乎没有使用的技术。我的印象是应用引擎中可用的东西应该更适合大文件,但我不确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多