2013-01-24 17 views
6

अपाचे कैमल डेटा ट्रांसफॉर्म करने के कई तरीकों की पेशकश करता है: ट्रांसफॉर्म ईआईपी, कस्टम डेटाफॉर्मैट्स की इसकी अवधारणा, साथ ही कस्टम टाइप कन्वर्टर्स के लिए इसके भत्ते।कौन सा ऊंट निर्माण बदलने के लिए उपयुक्त है?

मेरे पास एक ऐसी स्थिति है जहां मुझे ऊंट मार्ग के अंदर से एक बहुत ही जटिल परिवर्तन करने की आवश्यकता है। मैं अपने खुद के प्रकार कनवर्टर, मेरे अपने DataFormat को लागू किया जाना चाहिए, या मैं org.apache.camel.Expression को लागू करने और रखना चाहिए सब वहाँ में सामान को बदलने:

public class MyTransformer implements Expression { 
    @Override 
    public <T> T evaluate(Exchange arg0, Class<T> arg1) { 
     // ... 
    } 
} 

मुझे लगता है मैं जहां/यह अपने स्वयं के उपयोग करने के लिए उचित जब है लेकर संदेह में हूँ कनवर्टर टाइप करें, .transform(myTransformer) प्रोसेसर का उपयोग कब करें, या कस्टम डेटाफॉर्मैट का उपयोग कब करें। अग्रिम में धन्यवाद!

उत्तर

9

मतभेद सूक्ष्म हैं, हालांकि वे सभी अलग-अलग चीजों के लिए उपयोग किए जाते हैं। आप का उपयोग करना चाहिए:

  • एक transformer जब आप एक आकार से एक "व्यापार पेलोड" परिवर्तित कर रहे हैं। उदाहरण के लिए, जब आप वैल्यू ऑब्जेक्ट्स को कनवर्ट कर रहे हैं जिसे आपने डीएओ से जेएक्सबी एनोटेटेड ऑब्जेक्ट्स में खींच लिया है जिसे आप एक webservice का आह्वान करने के लिए उपयोग करने जा रहे हैं।
  • data format जब आप उच्च स्तर के प्रतिनिधित्व जैसे कि किसी प्रकार के ऑब्जेक्ट को निम्न स्तर के प्रतिनिधित्व में मार्शल करना चाहते हैं - कुछ ऐसा जो आप तार पर भेजते हैं। डेटा स्वरूपों में क्रमबद्धता, Google प्रोटोकॉल बफर, JSON, JAXB इत्यादि शामिल हैं
  • type converter जब आप किसी संदेश का प्रतिनिधित्व करने के तरीके को बदल रहे हैं। जैसे एक स्ट्रिंग और बाइट सरणी या इनपुट इनपुट अभी भी वही अक्षर पढ़ता है, इसलिए वहां आप लिख सकते हैं (हालांकि वहां वास्तव में अंतर्निहित हैं) कन्वर्टर्स जो इन दोनों में से किसी एक के बीच परिवर्तित होते हैं।
2

जेक ने जो कहा उससे जोड़ने के लिए बस। यह सब निर्भर करता है।

और आपको ऐसा करने के लिए किसी भी कैमेल एपीआई का उपयोग करने की आवश्यकता नहीं है। ऐसी स्थितियां हो सकती हैं जहां आपको केवल एक बार या कुछ बार संदेश पेलोड को बदलने की आवश्यकता हो। और इसके लिए आप एक सादे POJO का उपयोग कर सकते हैं और इसे ऊंट मार्ग आदि से आह्वान कर सकते हैं

उदाहरण के लिए पीओजेओ में एक विधि जो स्ट्रिंग को मायऑर्डर उदाहरण में परिवर्तित करती है।

public MyOrder doSomething(String data) { 
    ... 
    return ... 
} 

और फिर मार्ग

.transform().method(MyBusinessClass.class, "doSomething") 

संदेश परिवर्तन के लिए ऊंट तरीके जेक जवाब के रूप में के किसी भी उपयोग हालांकि में संदेश ट्रांसफार्मर में एक विधि कॉल का उपयोग करें, आप कैमल में इस सहज एकीकृत करने के लिए अनुमति देता है और इसे प्रथम श्रेणी के नागरिक के रूप में उपयोग करें क्योंकि इसे ऊंट से बॉक्स से बाहर प्रदान किया गया था। और आपको अन्य मार्गों और ऊंट अनुप्रयोगों में इसका पुन: उपयोग करने की अनुमति देता है।

एक org.apache.camel कार्यान्वित करना। संदेश पेलोड को बदलने के लिए एक्सप्रेशन, हालांकि अक्सर उपयोग नहीं किया जाता है। जेक कहते हैं कि बेहतर तरीके हैं। या ऊपर दिखाए गए पीओजेओ का उपयोग करें। यद्यपि ऊपर दिए गए पीओजेओ को अंततः org.apache.camel.Expression के रूप में मूल्यांकन किया जाता है, और इसलिए आप एक बार क्यों कार्यान्वित कर सकते हैं और स्वयं भी इसका उपयोग कर सकते हैं।

यदि आपके पास एक्शन बुक में ऊंट की एक प्रति है, तो अध्याय 3 सभी कैमेल के साथ डेटा बदल रहा है।

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

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