2014-01-31 1 views
0

У меня есть следующее мыло: телоКак вставить мыло: содержание тела как ребенок в другой тег

<soapenv:Body> 
    <Message> 
     <Context> 
     <id>10</id> 
     <subject>sub10</subject> 
     <body>body10</body> 
     </Context> 
    </Message> 
</soapenv:Body> 

Но мне нужно вставить содержимое внутри <SendMessageRequest> тега перед отправкой запроса:

<soapenv:Body> 
    <SendMessageRequest> 
     <Message> 
      <Context> 
      <id>10</id> 
      <subject>sub10</subject> 
      <body>body10</body> 
      </Context> 
     </Message> 
    </SendMessageRequest> 
</soapenv:Body> 

Я использую Enrich Mediator, но не понял, как это сделать ...
Вот код, который я пытаюсь:

<enrich> 
    <source type="body"/> 
    <target action="child" type="custom" xpath="SendMessageRequest"/> 
</enrich> 

ответ

3

Вы не можете напрямую добавить промежуточный элемент. Это та, которая обертывает ваш текущий контент. Вместо этого вы можете сохранить содержимое, которое будет включено в свойство. Обратите внимание на использование переменной xpath $body (с учетом класса SynapseXPath), который относится к элементу тела мыла независимо от используемой мыльной версии.

<property name="payload" expression="$body/*[1]" type="OM"/> 

Затем с помощью PayloadFactory посредника, чтобы построить свой новый запрос окурок:

<payloadFactory> 
    <format> 
    <SendMessageRequest xmlns=""/> 
    </format> 
    <args/> 
</payloadFactory> 

Впоследствии вы можете обогатить свое прежнее содержание во вновь созданной полезную нагрузку.

<enrich> 
    <source clone="true" property="payload" type="property"/> 
    <target action="child" type="custom" xpath="$body/SendMessageRequest"/> 
</enrich> 
+0

Thanks Kallja. Дополняя ... в цели Enrich, необходим атрибут 'type =" body "'. – elias

Смежные вопросы