5

我试图将 XML 模式添加到现有的 EJB 项目中。JAXB 用于将 XML-Schema 绑定到 Java 类。因为我们将在 EJB 处于会话状态时使用搜索引擎通过 DTO 进行爬网。

我找不到将实体类文件映射到 XML-Schema 的任何直接方法。

到目前为止,我们可以实现的唯一方法是创建 Web 服务,生成生成 xml-schema (XSD) 的 WSDL,然后通过 JAXB(xjc 命令)解析 XSD 文件以创建 java 类文件。现在使用 mapping-binding.xml 文件,我们可以映射 XML 和 Java 类文件。

但现在的问题又是如何将其映射到实体类。

这就是我们想要实现的目标:

  • 带有 XML 模式的 XML 数据对象,(这已经存在于 JAXB 规范中)。
  • 实体 Bean 然后扩展或具有此 JAXB 对象的接口。
  • 所有持久性功能都由实体 Bean 管理...
  • 然后,实体 Bean 将包含 JAXB 中的 XML Marshalling 和 UnMarshalling 功能。
  • 可以从实体 Bean 对象中以二进制或 XML 形式检索值对象。
  • JSP 可以轻松地从值对象中提取 XML 模式和 XML 数据,并对它执行诸如 XSL 转换之类的操作。

我的论点是实体 Bean 没有与 JAXB 对象交互的标准方法。

Castor 可能是解决方案,但是我们必须再次实现 Web 服务或使用 Castor JDO。

我发现 XStream 非常有用,因为它使用转换器类,您可以在其中调用实体 bean 类对象并生成 xml 文件。但我不喜欢使用另一个类,而是将这些功能合并到现有的 bean 类中。

你能在这方面帮助我吗?


我会告诉你我真正想要达到的目标。我正在创建一个搜索引擎,它将在会话中的 EJB 期间被调用,并将通过 DTO 使用爬虫并获取 XML 格式的快照。搜索将根据不同的标准。

Lucene 是搜索引擎工具之一,但它使用自己的属性和文件(将更像是独立的)

我已经有 DTO,Web 服务使用它在 PHP 和 Java 应用程序(EJB 层)之间进行通信。我想重新使用 jaxb 中的那些 DTO 作为爬虫来从 XML 中的表中获取输出,这是我无法做到的,因为 JAXB 通过 xml-schema 使用它自己生成的类。就像你说的那样,我还没有找到一种方法来指示 JAXB 到 bean 类。

4

2 回答 2

2

将数据模型(实体 bean)与 XML 接口紧密耦合可能不是世界上最好的主意。它会阻止您更改一个而不更改另一个。

我不是 100% 确定我了解您要做什么,但我认为有一种方法可以指示 JAXB 扩展类而不是创建新类。您可以像往常一样创建实体 Bean,并让 JAXB 生成的 bean 使用额外信息扩展这些实体 Bean。

我可以说从持久层以外的地方获取实体 bean 实例例如从 XML 反序列化它们)对您来说将是一个问题。

另请注意,使用 XML 在 Java 应用程序之间进行通信(例如在 JSP/Servlet 和 EJB 层之间)是一个坏主意;XML 的编组和增加的冗长对您的影响很小;通过 RMI 序列化对象(这是 EJB 将为您做的)将更容易实现、测试和维护。

于 2008-09-19T15:33:16.827 回答
1

EclipseLink JAXB (MOXy)可用于将 JPA 实体映射到 XML。

有关更多信息,请参阅:

于 2010-07-07T16:52:11.887 回答