2012-02-08 8 views
15

के बाद स्टोर वैरिएबल का उपयोग कैसे करें, मैं निम्नलिखित समस्या में आया। मान लीजिए की उम्मीद संदेश प्रवाह इस तरह दिखता है:अपाचे कैमल: स्प्रिंग डीएसएल का उपयोग करते हुए ऊंट के साथ 'चारों ओर खेलते समय'

  1. ग्राहक, एक्सएमएल शरीर के साथ HTTP POST संदेश भेजता है
  2. केमल प्रॉक्सी ऊंट करने के लिए सर्वर की ओर HTTP POST संदेश के साथ यूआरआई थोड़ा (प्राप्त एक्सएमएल शरीर से जानकारी का उपयोग कर अनुकूलित उदाहरण के लिए: XPATH का उपयोग एक निश्चित पैरामीटर को फिल्टर करने)
  3. केमल एक उत्तर प्राप्त हुआ था, केमल सर्वर की ओर HTTP PUT संदेश भेजता है, 1

में प्राप्त एक्सएमएल शरीर से बाहर पैरामीटर का उपयोग कर तो कुछ की तरह:

<route> 
    <from uri="..."> 
    <to uri="..."> 
    <to uri="..."> 
</route> 

प्रश्न: मैं चरण 1 में स्प्रिंग डीएसएल में पैरामीटर कैसे स्टोर करूं, ताकि मैं उन्हें बाद में चरण 3 में उपयोग कर सकूं?

तो, मैं चरण 1 में प्राप्त संदेश के एक्सएमएल बॉडी से एक्सएमएल पैरामीटर निकालना चाहता हूं और उन्हें चर में डाल देना चाहता हूं, जिसे बाद में मैं चरण 3 में भेजे जाने वाले संदेश को लिखने के लिए उपयोग कर सकता हूं।

पैरामीटर निकालने के लिए, मैं XPATH का उपयोग करने के बारे में सोच रहा था। यह ठीक दिखता है, लेकिन मुझे नहीं लगता कि XPATH के आउटपुट को एक चर में कैसे रखा जाए और फिर उस चर का उपयोग बाद में करें ... (वाक्यविन्यास ??)

नोट: जैसा कि आप देख सकते हैं, मेरा विकास ज्ञान बल्कि सीमित है ... इसके लिए खेद है। लेकिन अगर यह किसी के साथ मदद कर सकता है तो यह अभी भी अच्छा होगा :)।

उत्तर

18

आप Exchange गुण या इस तरह संदेश हेडर में दुकान डेटा सेट कर सकते हैं ...

.setHeader("ID", XPathBuilder.xpath("/order/@id", String.class)) 
.setProperty("ID", XPathBuilder.xpath("/order/@id", String.class)) 

और फिर उन्हें इस तरह एक्सचेंज से एक सेम/प्रोसेसर में पुनः प्राप्त ...

String propId = (String) exchange.getProperty("ID"); 
String headerId = (String) exchange.getIn().getHeader("ID");      } 
+2

पहले से ही उत्तर के लिए धन्यवाद। हालांकि, एक ही कोड प्राप्त करने का कोई मौका लेकिन स्प्रिंग डीएसएल (एक्सएमएल नोटेशन) के लिए? चीयर्स। – opstalj

+0

इस बीच, मैंने जावा डीएसएल के साथ फिर से कोड किया और यह अच्छी तरह से काम करता है। एक बार और धन्यवाद।मेरे पास 1 और प्रश्न है: सेटहेडर और सेटप्रोपर्टी का उपयोग करने के बीच क्या अंतर है? – opstalj

+3

ऊंट अवधारणाओं के बारे में जानने के लिए इस अध्याय को पढ़ें, और आपको पता चलेगा कि गुणों और शीर्षकों के बीच क्या अंतर है: http://manning.com/ibsen/chapter1sample.pdf –

2

मैं तुम्हें कुछ उदाहरण छोड़:

<setHeader headerName="token"> 
    <constant>someValue</constant> 
</setHeader> 

<setHeader headerName="userName"> 
    <simple>${properties:userName}</simple> //from config 
</setHeader> 

<setProperty propertyName="bodyBkp"> 
    <simple>${in.body}</simple> 
</setProperty> 

<setProperty propertyName="orderNumber"> 
    <xpath resultType="String">//item[1]/orderNumber/text()</xpath> 
</setProperty> 

मनुष्य

${exchangeProperty[orderNumber]} 

${in.headers.token} 

प्रलेखन

चेक सरल अभिव्यक्ति भाषा: http://camel.apache.org/simple.html

कभी कभी ऊंट के परीक्षण मामलों को देख स्प्रिंग डीएसएल के लिए भी सहायक हो सकता है विशेष रूप से,:

संबंधित मुद्दे