扩展函数和类路径

时间:2012-05-14 00:38:39

标签: java xslt classpath saxon

我知道这是一篇相当漫长而详细的文章。如果可以的话,我会让它更短更简单。我很感激任何建议或想法。

背景

我正在编写XSLT以在两个应用程序之间传输数据 - 称之为Source和Target。 我的XSLT由源系统供应商提供的集成引擎调用 - 称之为Source Co。

集成引擎通过调用包含在Target系统供应商编写的API的引擎中的适配器来更新Target - 称之为Target Co.这一切都在J2EE服务器内运行。

当集成引擎部署到Java EE服务器时,它会复制实现Target System API的JAR文件,以便它位于引擎的类路径上。

我的情况

封装Target CO的API的Source Co的适配器仅公开API的子集。有时,我只能通过支持Source Co Adapter并直接从JAVA调用API来满足客户的业务需求。

我已经通过以下方式实现了这一目标:

  • 编写接受并返回DOM文档并调用API的Java类
  • 将它们作为JAR部署到Java EE引擎中,以便它们位于集成引擎可见的类路径上,因此我的XSLT
  • 在我的XSLT中,我通过声明命名空间指向Java类,然后通过该命名空间调用适当的公共静态方法

这一切都运作良好。然而...

我的问题

目标公司API的最新版本有:

  • 删除了几个弃用的方法
  • 在目标系统中公开访问其他业务实体

Source Co的适配器使用这些删除的方法,因此需要在其类路径上使用旧版本的Target Co API。

只有使用最新的API访问这些其他业务实体,才能满足客户的最新业务需求。

我的问题

如何在扩展函数的类路径中使用最新版本的API,而不是在集成引擎适配器的类路径上?

我当然可以使用自定义类加载器。我这样做是为了加载一个第三方数据库驱动程序jar,如果它已经在它的类路径上,它也会破坏集成引擎。在数据库驱动程序的情况下,这只涉及使用自定义类加载器一次。但是,在目前的情况下,我无法看到如何避免在我的代码中遍布很多很多对类加载器的调用,这感觉非常错误。

一些技术细节

源系统 - SAP

目标系统 - Oracle的Primavera

Java EE Engine - Netweaver 7.2

XSLT处理器 - Saxon

0 个答案:

没有答案
相关问题