में पेलोड को ओवरराइट कैसे कर सकता हूं मेरे पास एक साबुन अनुरोध है जो खच्चर प्रवाह में आ रहा है। मुझे पेलोड से जानकारी प्राप्त करने और परिणाम के आधार पर कार्य करने के लिए जिम्मेदार ठहराया गया है, मूल अनुरोध को विभिन्न जेएम कतारों पर धक्का दें।मैं mule
पेलोड से वांछित जानकारी प्राप्त करने के लिए, मैं एक्सएसएलटी ट्रैनफॉर्मर का उपयोग कर रहा हूं (XPath नहीं, क्योंकि मुझे आईडीआरईएफ के आधार पर किसी तत्व से आईडीआरईएफ विशेषता प्राप्त करने की आवश्यकता है, तत्व प्राप्त करें और उसके बाद आईडीआरएफ से एक बच्चा तत्व प्राप्त करें वस्तु)।
एक्सएसएलटी ट्रांज़ॉर्मेशन के नतीजे के आधार पर, मैं मूल पेलोड को धक्का देने के लिए पसंद तत्व का उपयोग करता हूं। एक सत्र में मूल पेलोड संग्रहीत कर रहा हूं (इसे इनबाउंड में भी कर सकता है)। एक्सएसएलटी टैन्सफॉर्मेशन के बाद, उपयुक्त कतार का पता लगाने के लिए विकल्प राउटर लागू करें, और फिर मूल पेलोड को कतार में धक्का देना चाहते हैं (एक सत्र चर में संग्रहीत मूल पेलोड)। मैं <expression-component>
तत्व का उपयोग कर रहा हूं। नीचे खच्चर-प्रवाह का टुकड़ा है: जब पेलोड का मूल्यांकन
<flow name="ProcessXML121Order">
<jms:inbound-endpoint queue="mviq.121.order" exchange-pattern="one-way" />
<logger message="121 order payload is #[payload]" level="INFO" />
<message-properties-transformer scope="session">
<add-message-property key="mviPayload" value="#[payload]"/>
</message-properties-transformer>
<xm:xslt-transformer xsl-file="chooseVendor.xslt" />
<logger message="After xsl file payload is #[payload]" level="INFO" />
<choice>
<when expression="'EMSI'">
<logger message="Vendor is EMSI" level="INFO" />
<expression-component>payload=#[header:SESSION:mviPayload]</expression-component>
<jms:outbound-endpoint queue="mviq.121.order.emsi" />
</when>
<when expression="'PRMD'">
<logger message="Vendor is PRMD" level="INFO" />
<jms:outbound-endpoint queue="mviq.121.order.prmd" />
</when>
<when expression="'RSA'">
<logger message="Vendor is RSA" level="INFO" />
<logger message="RSA payload is #[payload]" level="INFO" />
<jms:outbound-endpoint queue="mviq.121.order.rsa" />
</when>
<otherwise>
<logger message="Vendor is Error" level="INFO" />
<logger message="Vendor error payload is #[payload]" level="INFO" />
<jms:outbound-endpoint queue="mviq.error" />
</otherwise>
</choice>
</flow>
बाद अपवाद फेंक दिया जाता है = # [हैडर: सत्र: mviPayload]:
- मैं मूल पेलोड को कैसे ओवरराइट कर सकता हूं? (यह नहीं कह रहा कि यह जाने का सबसे अच्छा तरीका है)
- इस परिदृश्य में बेहतर दृष्टिकोण क्या है? क्या यह मूल पेलोड बरकरार रखने के लिए सलाह दी जाती है (इस मामले में) और अन्य चर में एक्सएसएलटी आउटपुट स्टोर करें? मैं उसे कैसे कर सकता हूँ? पथ (खंभे घटक) क्या है जिसे मैं प्राप्त करने के लिए उपयोग कर सकता हूं? मैं मुले के लिए बहुत नया हूं और सामुदायिक सलाह लेता हूं।
[ProcessXML121Order.stage1.02] exception.AbstractExceptionListener (AbstractExceptionListener.java:296) -
********************************************************************************
Message : Execution of the expression "payload=#[header:SESSION:mviPayload]" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: byte[]
Code : MULE_ERROR-29999
--------------------------------------------------------------------------------
Exception stack is:
1. [Error: illegal use of operator: +]
[Near : {... Unknown ....}]
^
[Line: 1, Column: 0] (org.mvel2.CompileException)
org.mvel2.ast.OperatorNode:46 (null)
2. Execution of the expression "payload=#[header:SESSION:mviPayload]" failed. (org.mule.api.expression.ExpressionRuntimeException)
org.mule.el.mvel.MVELExpressionLanguage:211 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/ExpressionRuntimeException.html)
3. Execution of the expression "payload=#[header:SESSION:mviPayload]" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: byte[] (org.mule.api.MessagingException)
org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor:35 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
[Error: illegal use of operator: +]
[Near : {... Unknown ....}]
^
[Line: 1, Column: 0]
at org.mvel2.ast.OperatorNode.getReducedValueAccelerated(OperatorNode.java:46)
at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85)
at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:105)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
2 सवाल है
आपके समय के लिए धन्यवाद।
<expression-component>payload=#[header:SESSION:mviPayload]</expression-component>
के रूप में:
वर्क्स एक आकर्षण की तरह। बहुत बहुत धन्यवाद डेविड –
बिल्कुल वही मुझे जो चाहिए वह भी। धन्यवाद! अब इतना आसान लगता है कि मुझे पता है कि यह कैसे करें। – SteveS
जितना अधिक मैं खंभे में आता हूं, उतना ही मैं देखता हूं कि इसे करने के सही तरीके से पता लगाने के बाद ज्यादातर चीजें बहुत सरल होती हैं। मैंने सरल कार्यों को पूरा करने के लिए दस लाख जटिल तरीकों का प्रयास किया है और उत्तर आमतौर पर बहुत आसान है – Aheinlein