Конфигурация ‹set-variable› с xpath дает пустую строку при извлечении из полезной нагрузки xml

Я работаю над службой, которая добавляет детали, отправленные в запросе, в две разные очереди.

Для этого я использую для извлечения части XML, не нарушая полезной нагрузки. Но он дает пустой.

Мой ввод выглядит следующим образом

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://example.org/HelloService">
   <soapenv:Header/>
   <soapenv:Body>
     <AddRequest>
      <Person>
         <firstName>Test</firstName>
         <lastName>Tesst</lastName>
         <age>23</age>
      </Person>
      <Company>
         <companyName>Test</companyName>
         <state>Tesst</state>
         <zip>12345</zip>
      </Company>
     </AddRequest>
   </soapenv:Body>
</soapenv:Envelope>

И часть моего потока, которая извлекает элемент Person, показана ниже.

    <set-variable value="#[xpath://Person]" variableName="person"></set-variable>

    <logger level="INFO" message="#[flowVars['person']]" />     
    ........
    ......

Но регистратор печатает его как пустой

2013-01-30 12:56:08,287 INFO  [HelloService.stage1.02] processor.LoggerMessageProcessor (LoggerMessageProcessor.java:108) - 

Любая идея, почему он извлекает пустое пространство вместо элемента xml.

Как я могу получить элемент «Человек» из paylaod, используя XPATH?


person user1760178    schedule 30.01.2013    source источник


Ответы (2)


Попробуйте использовать преобразователь XSLT для извлечения элемента xml.

<xsl:output omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="//Person" />                   
    </xsl:copy>     
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="@*|node()" />                  
    </xsl:copy>     
</xsl:template>
person Community    schedule 30.01.2013
comment
@user1985027 user1985027 Я попробовал XSLT, и он работает. Я хочу попробовать что-то прямо внутри потока мулов, вместо того, чтобы двигаться вне потока. - person user1760178; 30.01.2013

Использовать это:

<set-variable value="#[xpath('//Person')]" variableName="person" />

ИЗМЕНИТЬ:

<set-variable value="#[xpath('//Person').text]" variableName="person" />

вернет текстовое значение элемента, если оно есть.

person Charu Khurana    schedule 30.01.2013
comment
Это дало мне org.dom4j.tree.DefaultElement@23194cf5 [Элемент: ‹per:Person uri: example.org/HelloService атрибуты: []/›]. Это не послужит моей цели. Мне нужен элемент Person как XML. - person user1760178; 30.01.2013
comment
Я обновил свой ответ. Пожалуйста, проверьте сейчас, если это служит вашей цели. - person Charu Khurana; 30.01.2013
comment
Добавление .text снова привело к пустому месту. Свойства области действия INVOCATION: person= - person user1760178; 30.01.2013
comment
Я вижу, .text вернет значение, только если оно есть у элемента. Должен быть преобразователь для преобразования объекта в xml - person Charu Khurana; 30.01.2013
comment
Я пробовал даже это. Но результат xml представляет собой большой 80-строчный xml dom4j, а не элемент Person xml. ‹org.dom4j.tree.DefaultElement› ‹qname serialization=custom› ‹org.dom4j.QName› ‹string›per‹/string› ‹string›example.org/HelloService/person‹/string› ‹default›............. - person user1760178; 30.01.2013
comment
Каков следующий шаг после получения ‹Person›. Где ты будешь его кормить? - person Charu Khurana; 30.01.2013
comment
на данный момент я буду помещать XML-файл Person в очередь JMS. - person user1760178; 30.01.2013
comment
Как вы планируете помещать значение переменной в очередь JMS. Разве вам не нужно обновлять свою полезную нагрузку для этого? - person Charu Khurana; 30.01.2013
comment
Похоже, вам нужен такой трансформатор или что-то еще <xm:xpath-extractor-transformer expression="//person" resultType="NODESET" />, а не set-variable. @dossot, пожалуйста, просвети :) - person Charu Khurana; 30.01.2013
comment
этот преобразователь дал мне com.sun.org.apache.xml.internal.dtm.ref.DTMNodeList. :( - person user1760178; 31.01.2013