云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

中间件_听说百度云_0元

小七 141 0

处理XML是我们在PI中最常见的事情之一,使用java映射或在UDF中编写逻辑可能是任何PI开发项目中的日常活动。在使用下面的任何import语句之前,我们通常不会考虑这些import语句将如何加载或幕后发生什么,因为这些都是非常基本的JAVA语句,没有什么大不了的,不是吗

让我们举一个简单的DocumentBuilder示例:

为了解析任何XML,构建文档对象将是我们首先要做的事情之一(除非使用基于字符串的模式ex REGEX的方法进行解析)。

下面是从输入XML字符串创建文档对象的示例代码,提供document builder对象的语句是

"DocumentBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();"

我们将在相关类下面导入以使用上述语句。

导入javax.xml.parsers.文档生成器;导入javax.xml.parsers.DocumentBuilderFactory;

因为这些类是JRE的一部分(基础类库)我们一般不会做任何进一步的事情来使用它们,比如为这个对象加载第三方库,我们只会继续UDF或JAVA映射中的接口逻辑。

下面的代码显示了使用字符串对象(数据进入映射)创建文档生成器对象的最常见方法

让我们分析一下使用

导入时会发生什么javax.xml.parsers.DocumentBuilderFactory在我们的程序中。

我们的目的是获得DocumentBuilderFactory的新实例使用它我们可以创建文档生成器对象来解析XML,就像XML解析器对象一样,transformers(XSLT)具有标准接口,不同的供应商可能有不同的接口实现,开源项目,所以我们在某种程度上说我们想通过import语句使用DocumentBuilderFactory,但没有指定要使用哪一个。com.sun.org网站.apache.xerces.internal文件.jaxp.DocumentBuilderFactoryImpl文件(例如:rt.jar公司在ORACLE和SAP JVM中)。2网址:apache.xerces.jaxp.DocumentBuilderFactoryImpl文件(例如:xercesImpl.jar文件)

第一个是JRE提供的默认值,不管您使用哪个供应商的JVM,物联网的应用实例,另一个是第三方的JVM提供者。如果我们不使用xerces图书馆或任何第三方图书馆,我想我们大多数人都不使用,那么加载默认的JRE类应该足够简单,不是吗?

在我方代码中的进口声明之后,类加载器需要知道应该使用以上两个中的哪一个&因为我们让SAP PI类加载器仍然不知道选择哪一个,所以它需要通过下面的4个步骤或选项来确定。

这是它将变得有趣的地方。

下面是决定使用哪个实现类的步骤:

步骤1:类加载器可以使用javax.xml.parsers.DocumentBuilderFactory系统属性来知道要使用哪个实现类,如果未设置,它将移动到步骤2.

步骤2:

类加载器将使用属性文件"lib/jaxp.properties属性"在JRE目录中。在SAP PI中,JRE目录由(java.home=usr/sap//J40/exe/sapjvm\u 8/jre)此配置文件是标准配置文件java.util.Properties属性格式并包含实现类的限定名,键是上面定义的系统属性。

如果第一次尝试读取时文件不存在,则不再尝试检查其存在。如果未指定步骤2,则转至步骤3.

步骤3:类加载器使用服务API(如果可用)来确定类名。服务API将查找类名

META INF/Services/javax.xml.parsers.DocumentBuilderFactory

在运行时可用的jar中。如果在步骤3中找不到任何内容,则转到步骤4,这是大多数情况下发生的情况。

步骤4:平台默认DocumentBuilderFactory实例。

大多数情况下,我们不设置设置系统属性的步骤1,也不设置设置的步骤2jaxp.properties属性在JRE文件夹中指定在运行时。让我们看看第3步在SAP PI中做了什么。

第3步和第4步是我们感兴趣的,所以让我们看看这一点的内容。

第3步执行细节:SAP PI中的服务API不同于通常的执行,当执行mapping class loader时,它尝试按照transform()的顺序运行,您可以看到class loader的执行顺序,大数据行业分析,

在本例中我只列出了几个步骤,淘客文案,详情请参见下图

FactoryFinder.find查找()方法尝试运行serviceLoader以查看是否可以找到jar,因为没有指定步骤1和步骤2,它基本上是查找任何包含条目

"META-INF/services"的jar/javax.xml.parsers.DocumentBuilderFactory"

它检查两个可能的位置:

1。在加载JARForJava映射的相同路径(导入的存档)中,您可以只在相同的导入存档位置加载第三方jar。2如果第三方jar没有加载到Java映射的同一导入归档位置,那么它将转到数据库表XI\u RUNMAPPINGS以查找包含条目的jar"META-INF/服务/javax.xml.parsers.DocumentBuilderFactory",在某种程度上XI\u RUNMAPPINGs保存有关所有导入jar文件的信息。

在表XI\u RUNMAPPINGs中运行的select语句具有以下参数。

参数1=META-INF/services/javax.xml.transform文件.变压器厂•参数2=创建映射的接口的名称空间。•参数3=-1•参数4=89447120FF8711E58ADDCFBE0AF0F062(SWCV的GUID)

注意:(当您运行interface查看这些条目时打开SQL跟踪,因为这是直接DB调用,连接不是使用数据源建立的)