如何在OM属性中丰富一个节点值?

How to enrich a node value in OM property?

是否可以使用 enrich mediator 来丰富特定的节点值?

我的目标是丰富这个xpath:

$ctx:OriginalPayload//Partner[identifiers/businessId = $ctx:CorrelationId]/identifiers/otherId

我试过这些例子:

$ctx:OriginalPayload//Partner/identifiers/otherId
//Partner/identifiers/otherId
//Partner/identifiers/otherId/text()
//Partner/identifiers/otherId/node()

所有人都给我这个错误:

ERROR - EnrichMediator Invalid Target object to be enrich.

我正在使用这种语法:

<enrich>
    <source xpath="//plat:CustomerAccountId"/>
    <target xpath="//Partner/identifiers/otherId"/>
</enrich>

下面是我正在尝试丰富的有效载荷:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns0="http://iszkody.lsn.io/service/internal/ClaimService">
   <soapenv:Header/>
   <soapenv:Body>
      <ns0:createClaimRequest>
         <claim>
            <InsClaimData VER="1">
               <PartnerList>
                  <Partner>
                     <RoleList>
                        <Role>UBEZP</Role>
                     </RoleList>
                     <BusinessPartner>
                        <partnerType>person</partnerType>
                        <personData>
                           <firstName>JANUSZ</firstName>
                           <lastName>KOWALSKI</lastName>
                           <PESEL>83248328432</PESEL>
                        </personData>
                        <identifiers>
                           <businessId>123</businessId>
                           <otherId></otherId>
                        </identifiers>
                     </BusinessPartner>
                  </Partner>
               </PartnerList>
            </InsClaimData>
         </claim>
      </ns0:createClaimRequest>
   </soapenv:Body>
</soapenv:Envelope>

它看起来不像是负载或 xpath 的问题,但更像是中介没有实现自定义类型。

我刚刚在 WSO2 ESB 4.9.0 和 4.8.1 中测试了以下内容,在这两个版本中,以下代理确实有效(我用 businessId 丰富了 otherId):

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Test_XPath" transports="http" xmlns:avintis="http://www.avintis.com">
    <target faultSequence="faultSequence">
        <inSequence>
            <sequence key="initSequence" />
            <log level="full"></log>
            <log level="custom">
                <property expression="$body//businessId" name="xpath" />
            </log>
            <log level="custom">
                <property expression="$body//Partner/BusinessPartner/identifiers/businessId" name="xpath" />
            </log>
            <enrich>
                <source xpath="//businessId" />
                <target xpath="//otherId" />
            </enrich>
            <log level="full" />
        </inSequence>
    </target>
</proxy>

正如您评论说您现在使用 *[local-name()='BusinessPartner'] 语法,这表明 命名空间 存在问题。尝试使用 BusinessParter 元素的正确命名空间。