Конечная точка Mule VM

Мул 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>

person Tad    schedule 13.09.2013    source источник
comment
Ничего себе (o_O) Можете ли вы попробовать использовать MEL вместо синтаксиса выражений в старом стиле, чтобы увидеть, устраняет ли это проблему. См.: mulesoft.org/documentation/display/current/   -  person David Dossot    schedule 13.09.2013
comment
Я был бы рад, но я не могу понять, что такое соответствующий синтаксис. Документация Mule довольно схематична на примерах. Если старый синтаксис #[xpath:local-name(/S:Envelope/S:Body/*[1])]... т. е. имя локального узла для первого потомка Body, каким будет эквивалент MEL? Я пробовал #[local-name(xpath('/S:Envelope/S:Body/*[1]'))] и #[xpath('/S:Envelope/S:Body/*[1]' ).local-name], но ни один из них не является правильным.   -  person Tad    schedule 13.09.2013
comment
Поскольку вы используете диспетчер выражений, я думаю, вам нужно префикс функций XPath с префиксом 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
comment
@ Дэвид, MEL в некотором смысле усугубляет ситуацию. Используя старый синтаксис, я могу проанализировать, не имеет ли поток входящей конечной точки виртуальной машины, но не может. Используя синтаксис MEL, он дает сбой даже без входящей конечной точки виртуальной машины. Я отредактировал вопрос выше, чтобы показать примеры. Кстати, я попробовал оба синтаксиса xpath, которые вы предложили; они оба дали одинаковые результаты.   -  person Tad    schedule 13.09.2013
comment
Я не вижу никакой рекурсии в конфигурации выше?   -  person David Dossot    schedule 13.09.2013
comment
Ой, на самом деле удалил мой последний комментарий по ошибке. Нет, вы не увидите рекурсию, потому что я свел это к минимальному потоку, чтобы создать проблему. Я собираюсь попытаться решить проблему рекурсии другим способом, я думаю, пока я отбиваюсь от этого.   -  person Tad    schedule 13.09.2013
comment
Каков тип полезной нагрузки входных данных, отправляемых на входящую виртуальную машину? Нить? байт[]? разное?   -  person David Dossot    schedule 13.09.2013
comment
Это строка полезной нагрузки.   -  person Tad    schedule 16.09.2013
comment
Одна из вещей, которую мне трудно понять, заключается в том, что в исключениях говорится, что есть два преобразователя, которые могут переводить из строки в документ... а затем дважды перечисляет один и тот же преобразователь.   -  person Tad    schedule 16.09.2013
comment
Я видел, как это происходило, когда использовалось несколько версий одних и тех же JAR-файлов Mule. У вас не так?   -  person David Dossot    schedule 16.09.2013
comment
Я так не думаю. У меня есть 3.3.1 CE на этой машине и связанная с ней Mule Studio. Я проведу некоторые исследования, чтобы убедиться, что я случайно не скопировал что-то в путь к классам. Странно, что старый синтаксис работает, а новый нет. Или это то, чего вы ожидаете?   -  person Tad    schedule 16.09.2013
comment
Нет, это пахнет жуком. Не могли бы вы попробовать 3.4.0 CE, пожалуйста?   -  person David Dossot    schedule 16.09.2013


Ответы (1)


Вы найдете решение здесь:

http://forum.mulesoft.org/mulesoft/topics/no_idea_why_i_am_getting_this_error-csv8r

Речь идет о наличии двух копий mule-module-xml.jar в вашем пути к классам.

person Larry Gorlin    schedule 27.09.2013
comment
Даже если ссылка содержит полный ответ, пожалуйста, добавьте объяснение. Ваш ответ должен стоять сам за себя без ссылки. - person IvanH; 27.09.2013