Мул та же полезная нагрузка отображается в другом формате в логгере для разных условий
У меня есть поток мулов:-
<jdbc-ee:connector name="Database_Global" dataSource-ref="DB_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database">
<jdbc-ee:query key="UpdateQuerySOAPRequest" value="UPDATE getData SET ID=#[xpath('//v1:Id').text], NAME=#[xpath('//v1:Name').text], AGE=#[xpath('//v1:Age').text], DESIGNATION = #[xpath('//v1:Designation').text] where ID=#[xpath('//v1:Id').text]"/>
</jdbc-ee:connector>
<flow name="NodeNameFlow" doc:name="NodeNameFlow" initialState="started">
<file:inbound-endpoint responseTimeout="10000" connector-ref="File_Input" doc:name="File" path="E:\backup\test">
<file:filename-regex-filter pattern="XMLRequest.xml" caseSensitive="false"/>
</file:inbound-endpoint>
<splitter evaluator="xpath" expression="//v1:updateDataRequest" doc:name="Splitter_For_MultipleSameNodes"/>
<mulexml:dom-to-xml-transformer name="DomToXmlSOAPUpdate2" doc:name="Dom To XmlSOAPUpdate"/>
<jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="UpdateQuerySOAPRequest" queryTimeout="-1" connector-ref="Database_Global" doc:name="Database (JDBC)"/>
<choice doc:name="Choice">
<when expression="#[flowVars['MULE_JDBC_UPDATE_COUNT']==0]"> <!-- If not updated -->
<logger message="Updated #[flowVars['MULE_JDBC_UPDATE_COUNT']] rows... Failed!!! No rows were Updated" level="INFO" doc:name="Logger"/>
</when>
<otherwise> <!-- if updated -->
<set-payload value="Updated Successfully !!!" doc:name="Set Payload"/>
</otherwise>
</choice>
<mulexml:object-to-xml-transformer doc:name="Object to XML"></mulexml:object-to-xml-transformer>
<async doc:name="Async_Database_Response_in_File">
<logger message="Request *************************** #[payload:java.lang.String] *************************" level="INFO" doc:name="Logger"/>
<file:outbound-endpoint path="E:\backup\test" outputPattern="SimpleResponse.txt" responseTimeout="10000" doc:name="File" connector-ref="File_Global"/>
</async>
</flow>
Теперь вы можете видеть, что он принимает XML-файл в качестве входных данных, разделяет его и обновляет базу данных на основе идентификатора, и в конце он регистрирует полезную нагрузку в исходящем файле..... если он может успешно обновить базу данных, умеет отображать полезную нагрузку в логгере <logger message="Request *************************** #[payload:java.lang.String] *************************" level="INFO" doc:name="Logger"/>
в конце правильно, как:-
org.mule.api.processor.LoggerMessageProcessor: Request ***************************<string> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://services.test.com/schema/MainData/V1">
<soapenv:Header/>
<soapenv:Body>
<v1:updateDataRequest>
<v1:Id>1</v1:Id>
<v1:Name>BnnnnnnBB !!!!!</v1:Name>
<v1:Age>66</v1:Age>
<v1:Designation>EEEEEE</v1:Designation>
</v1:updateDataRequest>
</soapenv:Body>
</soapenv:Envelope> </string> *************************
Но если он не сможет обновить базу данных на основе идентификатора, он будет отображать полезную нагрузку следующим образом:
org.mule.api.processor.LoggerMessageProcessor: Request *************************** <string><?xml version="1.0" encoding="UTF-8"?>
<v1:updateDataRequest xmlns:v1="http://services.test.com/schema/MainData/V1">
<v1:Id>1</v1:Id>
<v1:Name>BnnnnnnBB !!!!!</v1:Name>
<v1:Age>66</v1:Age>
<v1:Designation>EEEEEE</v1:Designation>
</v1:updateDataRequest></string> *************************
... Итак, мой вопрос, почему он отображает ту же полезную нагрузку в этом формате, если он не может обновлять.... любое предложение... Есть ли.. Мне нужно преобразовать полезную нагрузку в любом формате... любое предложение????
3 ответа
К вашему сведению синтаксис MEL для #[payload:java.lang.String]
является #[message.payloadAs(java.lang.String)]
Есть что-то нелогичное в потоке: в случае успеха set-payload
устанавливает полезную нагрузку в не-XML строку (т.е. "Updated Successfully !!!"
).
Но потом, после choice
mulexml:object-to-xml-transformer
включается и пытается преобразовать эту случайную строку в XML, что на самом деле не может работать. Вы должны это исправить.
FYI the MEL syntax for #[payload:java.lang.String] is #[message.payloadAs(java.lang.String)]
There's something not logical in the flow: in case of success set-payload sets the payload to a non-XML string (i.e "Updated Successfully !!!").
But then, after choice the mulexml:object-to-xml-transformer kicks-in and tries to transfrom this random String into XML, which can't really work. You need to fix this.
Итак, я закончил с #[message.payloadAs(java.lang.String)]
вместо #[payload:java.lang.String]
как предложил Дэвид, а также сохранил полезную нагрузку в переменной потока непосредственно перед компонентом БД и установил ее в полезную нагрузку, поскольку полезная нагрузка нарушалась.... это работало!!!!