EJB的接口-使用JAXB接口的XML
我试图将XML模式添加到现有的EJB项目中。 JAXB用于将XML-Schema绑定到Java类。当我们使用EJB进行会话时,我们将使用搜索引擎通过DTO进行爬网。
我找不到将实体类文件映射到XML-Schema的任何直接方法。
到目前为止,我们唯一可以实现的方法是创建Web服务,生成WSDL,该WSDL生成xml-schema(XSD),然后通过JAXB(xjc命令)解析XSD文件以创建Java类文件。现在,使用mapping-binding.xml文件,我们可以映射XML和Java类文件。
但是现在的问题是如何将其映射到实体类。
这是我们要实现的目标:
- 具有XML模式的XML数据对象(在JAXB规范中已经存在)。
- 然后,实体Bean扩展或者具有与此JAXB对象的接口。
- 所有持久性功能均由实体Bean管理...
- 然后,实体Bean将包含JAXB中的XML编组和解组功能。
- 可以从实体Bean对象以二进制或者XML形式检索值对象。
- JSP可以轻松地从Value Object中提取XML Schema和XML Data并对其执行操作,例如XSL转换。
我的观点是,实体Bean没有与JAXB对象接口的标准方法。
Castor可能是解决方案,但是我们还是必须实现Web服务或者使用Castor JDO。
我发现XStream非常有用,因为它使用转换器类,我们可以在其中调用实体bean类对象并生成xml文件。但是我不喜欢使用其他类,而是将功能合并到现有的bean类中。
我们能在这方面帮助我吗?
我将告诉我们我实际上要实现的目标。我正在创建一个搜索引擎,该引擎将在会话期间的EJB中引发,并将通过DTO使用搜寻器并以XML格式获取快照。搜索将基于不同的条件。
Lucene是搜索引擎工具之一,但随后使用其自己的属性和文件(其行为将更像独立的)
我已经有DTO,Web服务已使用DTO在PHP和Java应用程序(EJB层)之间进行通信。我想将jaxb中的那些DTO用作爬虫,以从XML表中获取输出,而JAXB通过xml-schema使用它自己的生成类,因此我无法做到。就像我们说的那样,我还没有找到一种方法来指示JAXB到bean类。
解决方案
将数据模型(entity bean)与XML接口紧密耦合可能不是世界上最好的主意。它可以防止我们更改一个而不更改另一个。
我不是100%肯定我了解我们要做什么,但是我认为有一种方法可以指示JAXB扩展类而不是创建新的类。我们可以正常创建Entity Bean,并让JAXB生成的Bean用额外的信息扩展它们。
我可以说,从持久层以外的其他地方获取Entity Bean实例(例如从XML反序列化它们)对我们来说将是一个巨大的问题。
还要注意,使用XML在Java应用程序之间(例如,在JSP / Servlet和EJB层之间)进行通信不是一个好主意。 XML的编组和增加的冗长性几乎不会给我们带来什么好处;通过RMI(EJB将为我们完成)序列化对象将更容易实现,测试和维护。
EclipseLink JAXB(MOXy)可用于将JPA实体映射到XML。
有关更多信息,请参见:
- http://wiki.eclipse.org/EclipseLink/Examples/MOXy/JPA