我知道这是一篇相当漫长而详细的文章。如果可以的话,我会让它更短更简单。我很感激任何建议或想法。
背景
我正在编写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来满足客户的业务需求。
我已经通过以下方式实现了这一目标:
这一切都运作良好。然而...
我的问题
目标公司API的最新版本有:
Source Co的适配器使用这些删除的方法,因此需要在其类路径上使用旧版本的Target Co API。
只有使用最新的API访问这些其他业务实体,才能满足客户的最新业务需求。
我的问题
如何在扩展函数的类路径中使用最新版本的API,而不是在集成引擎适配器的类路径上?
我当然可以使用自定义类加载器。我这样做是为了加载一个第三方数据库驱动程序jar,如果它已经在它的类路径上,它也会破坏集成引擎。在数据库驱动程序的情况下,这只涉及使用自定义类加载器一次。但是,在目前的情况下,我无法看到如何避免在我的代码中遍布很多很多对类加载器的调用,这感觉非常错误。
一些技术细节
源系统 - SAP
目标系统 - Oracle的Primavera
Java EE Engine - Netweaver 7.2
XSLT处理器 - Saxon