Мул 3.3.1 CE
Я, наверное, буду пинать себя, но что происходит со следующим?
У меня есть частный поток, который принимает полезную нагрузку XML и извлекает значение среди прочего. Этот сокращенный пример работает.
<flow name="MyFlow">
<set-session-variable variableName="xyzMethod" value="#[xpath:local-name(/S:Envelope/S:Body/*[1])]"/>
</flow>
Я хочу установить входящую конечную точку виртуальной машины, чтобы решить некоторые проблемы с повторным использованием. Однако, когда я это делаю, я получаю исключение при вызове xpath. Это показывает проблему.
<flow name="MyFlow">
<vm:inbound-endpoint exchange-pattern="request-response" path="execute.xyz"/>
<set-session-variable variableName="dnbMethod" value="#[xpath:local-name(/S:Envelope/S:Body/*[1])]"/>
</flow>
Я не вижу чего-то очевидного. Что вызывает вставка конечной точки виртуальной машины?
Message : There are two transformers that are an exact match for input: "class java.lang.String", output: "interface org.dom4j.Document". Transformers are: "XmlToDom4jDocument(class org.mule.module.xml.transformer.XmlToDomDocument)" and "XmlToDom4jDocument(class org.mule.module.xml.transformer.XmlToDomDocument)"
Code : MULE_ERROR-255
ИЗМЕНИТЬ на основе обсуждения ниже
Основываясь на обсуждении синтаксиса MEL, вот некоторые результаты.
Ввод (кроме информации о безопасности):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://applications.dnb.com/webservice/schema/">
<soapenv:Header>
</soapenv:Header>
<soapenv:Body>
<sch:AdvancedCompanySearchRequest>
</sch:AdvancedCompanySearchRequest>
</soapenv:Body>
</soapenv:Envelope>
Ниже приведен точный код, который успешно выполняется. Я вижу AdvancedCompanySearchRequest в консоли.
<flow name="ExecuteDandB" doc:name="ExecuteDandB">
<!-- <vm:inbound-endpoint exchange-pattern="request-response" path="execute.dnb" doc:name="DnB"/>-->
<set-session-variable variableName="dnbMethod" value="#[xpath:local-name(/S:Envelope/S:Body/*[1])]"/>
<!-- <set-session-variable variableName="dnbMethod" value="#[xpath('/S:Envelope/S:Body/*[1]').name]"/>-->
<logger level="INFO" message="#[sessionVars['dnbMethod']]"/>
</flow>
Ниже приведен точный код, который не выполняется. Я вижу исключение по поводу двух трансформаторов, описанных выше.
<flow name="ExecuteDandB" doc:name="ExecuteDandB">
<!-- <vm:inbound-endpoint exchange-pattern="request-response" path="execute.dnb" doc:name="DnB"/>-->
<!-- <set-session-variable variableName="dnbMethod" value="#[xpath:local-name(/S:Envelope/S:Body/*[1])]"/>-->
<set-session-variable variableName="dnbMethod" value="#[xpath('/S:Envelope/S:Body/*[1]').name]"/>
<logger level="INFO" message="#[sessionVars['dnbMethod']]"/>
</flow>
fn
, то есть:#[xpath('fn:local-name(/S:Envelope/S:Body/*[1])')]
. Если это не сработает, мы можем получить локальное имя от узла Dom4J с помощью:#[xpath('/S:Envelope/S:Body/*[1]').name]
- person David Dossot   schedule 13.09.2013