2015-06-30 45 views
0

我有一個下面的嵌套結構,我想在soap頭中插入,並且我正在使用標題中介器。如何在WSO2 ESB中的SOAP頭中插入嵌套的XML結構4.8.1

XML需要被插入在SOAP頭:

<res:PageHeader xmlns:res="http://example.com"> 
    <res:PageId>32332323</res:PageId> 
    </res:PageHeader> 

我想從被稱爲 「SavedPageId」 的財產動態挑 「的PageId」 值。

部首中保代碼:

<header xmlns:res="http://example.com" name="res:&lt;PageHeader&gt;&lt;PageId&gt;&lt;/PageId&gt;&lt;/PageHeader" scope="default" expression="get-property('SavedPageId')"/> 

結果:

<soapenv:Header> 
    <res:<PageHeader> 
    <PageId></PageId> 
    </PageHeader xmlns:res="http://example.com">232323232</res:<PageHeader> 
    <PageId></PageId> 
    </PageHeader> 
    </soapenv:Header> 

預期結果:

<soapenv:Header> 
    <res:PageHeader xmlns:res="http://example.com"> 
    <res:PageId>32332323</res:PageId> 
    </res:PageHeader> 
    </soapenv:Header> 

我應該如何配置我的Header介體爲這個嵌套的xml結構,我也想填充屬性的值。請幫忙。

回答

1

據我所知,你需要使用XPath你的水箱內,如:

<header xmlns:res="http://example.com" name="res:PageHeader" scope="default" expression="//xpath/for/SavedPageId"/> 

否則,請嘗試使用payloadFactory建立你的消息:

<property name="soapBody" 
      expression="//soapenv:Body/*" 
      scope="default" 
      type="STRING"/> 
<payloadFactory media-type="xml"> 
<format> 
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soapenv:Header> 
      <res:PageHeader xmlns:res="http://example.com"> 
       <res:PageId>$1</res:PageId> 
      </res:PageHeader> 
     </soapenv:Header> 
     <soapenv:Body> 
      $2 
     </soapenv:Body> 
    </soapenv:Envelope> 
</format> 
    <args> 
     <arg evaluator="xml" expression="get-property('SavedPageId')"/> <!-- Can also use : expression="$ctx:SavedPageId" --> 
     <arg evaluator="xml" expression="get-property('soapBody')"/> 
    </args> 
</payloadFactory> 
1

首先,你需要保存將動態值轉換成屬性。 然後使用下面的代碼:

<header scope="default"> 
       <res:PageHeader xmlns:res="http://example.com"> 
        <res:PageId/> 
       </res:PageHeader> 
      </header> 
      <enrich> 
       <source type="property" property="saveValueInProperty"/> 
       <target xmlns:res="http://example.com" action="child" xpath="$header/res:PageHeader/res:PageID/text()"/> 
      </enrich> 

這也許應該工作。

+0

我試過了你的方法。我已經將頁面ID值存儲在以下屬性「SavePageId」中,但是當我嘗試在富集中介器中使用它時,它給我錯誤「無法獲取富集源」 –

+0

只記錄屬性值並查看是否有任何值正在被保存或未被保存。 也請發佈你的eclipse語法。 – rohan

+0

我已經解決了上面提到的問題。現在它給出了以下錯誤。無效的目標對象將被充實。當我從Xpath的末尾刪除「text()」。然後它可以工作,但字段pageId不會被填充。它仍然是空的。 –