Oracle SOA通过添加Sensor过滤实例(二)

在Composite中添加Sensor后,在EM中Sensor的值有时候是一个xml字符串,并不是实际值,而且通过sensor字段查实例只能用"类似"来查询不能使用“相等”,更有时候当值是xml类型的时候,通过sensor关键字查询不到实例。

登录到SOA数据源数据库,通过表COMPOSITE_INSTANCE_ID找到实例sensor信息,如下

这里有个VALUE_TYPE字段,如果该字段为2005则sensor的值就以xml的形式保存在CLOB_VALUE里,如果该字段的值为12则sensor就以实际值保存在STRING_VALUE字段里,因此一种解决方法就是将CLOB_VALUE里面的值写到STRING_VALUE再将VALUE_TYPE改为12,但最好的解决方法是在composite中修改sensor的值类型。

回到JDeveloper中,一般JCA适配器组件比如DBAdapter,BAMAdapter等都会从数据源中自动解析数据类型生成的相应的xsd文件,如果是字符串类型,则做如下的解析:

<element minOccurs="0" name="_ID"> 
  <simpleType> 
    <restriction base="xsd:string"> 
      <maxLength value="100"/> 
    </restriction> 
  </simpleType> 
</element>

系统将字符串类型解析成了simpleType类型,为该字段添加sensor后,打开sensor.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<sensors xmlns="http://xmlns.oracle.com/bpel/sensor">
    <sensor sensorName="ID" kind="reference" target="undefined" filter="" xmlns:imp1="http://xmlns.oracle.com/bam">
        <referenceConfig reference="InsertOrder" expression="$in._Order1Collection/imp1:_Order1Collection/imp1:_Order1/imp1:_ID" operation="writetoBAM" outputDataType="anonymous" outputNamespace="anonymous"/>
    </sensor>
</sensors>

outputDataType的类型为anonymous,如果类型为anonymou则sensor的值就会以xml的形式存储。

找到原因后解决方法就很简单,一个是修改xsd文件将类型修改为xsd:string类型,比如上面的xml可以做如下修改

<element  name="_ID" type="xsd:string" /> 

然后删除sensor.xml文件重新添加sensor,但这样做会丢失验证信息,不建议修改xsd文件。

最好的解决方法是修改sensor.xml文件,将outputDataType修改为string并修改名称空间,如上面的sensor.xml可以做如下修改

<?xml version="1.0" encoding="UTF-8"?>
<sensors xmlns="http://xmlns.oracle.com/bpel/sensor">
    <sensor sensorName="ID" kind="reference" target="undefined" filter="" xmlns:imp1="http://xmlns.oracle.com/bam">
        <referenceConfig reference="InsertOrder" expression="$in._Order1Collection/imp1:_Order1Collection/imp1:_Order1/imp1:_ID" operation="writetoBAM" outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/>
    </sensor>
</sensors>

这样就可以解决EM中sensor的值以xml形式出现的问题,也可以对sensor的值进行精确查找。

PS:如果修改outputDataType后发现EM中sensor没有值,那可能是sensor记录的字段不是字符串类型,则要做相应的类型转换。

原文地址:https://www.cnblogs.com/weisuoc/p/3406273.html