2017-08-18 7 views
5

में निर्माता के रूप में एक विधि का उपयोग करें मेरे पास विधि है जो हर अब एक स्ट्रिंग उत्पन्न करती है। मैं यूरी के रूप में विधि पंजीकृत करना चाहता हूं और एक एक्सचेंज विधि तैयार करना चाहता हूं जिसका उपयोग मार्ग के लिए इनपुट के रूप में किया जाएगा।ऊंट मार्ग

विधि का एक अलग वर्ग द्वारा कॉल है

SampleClass sc = new SampleClass(); 
sc.sampleMethod("Hello"); 

उदाहरण के लिए:

public class SampleClass{ 
    @Produce(uri = "direct:consumerMethod") 
    ProducerTemplate producer; 
    public sampleMethod(Object obj){ 
      producer.sendBody(object); 
    } 
} 

मार्ग नीचे के रूप में परिभाषित किया गया है:

@Override 
    public void configure() { 
     from("direct:consumerMethod").process(new GenerateD()); 
    } 

लेकिन मार्ग नहीं करता कॉल वर्ग जब उत्पन्न मैं नमूना विधि का उपयोग कर उत्पादन। क्या यह व्यवहार्य नहीं है या क्या मैं कुछ गलत कर रहा हूं?

+0

मेरा मानना ​​है कि '.process (...) 'के पैरामीटर को' प्रोसेसर 'या उत्तराधिकारी/कार्यान्वित करने की आवश्यकता है - अपने प्रोसेसर के अंदर, फिर आप अपनी विधि को कॉल कर सकते हैं। मैं अपने नमूना कोड के पास कहीं भी नहीं हूं लेकिन यह आपको सही दिशा में दबा सकता है। – ochi

+1

आपको क्या त्रुटि मिलती है? – Strelok

+0

मैंने producer.sendBody() के चारों ओर पकड़ने की कोशिश की और पाया कि निर्माता शून्य है। तो क्या इसका मतलब प्रत्यक्ष है: उपभोक्ता विधि शुरू नहीं हुई है? –

उत्तर

1

अंततः यह मेरे उपयोग के मामले के लिए काम करता है।

शुरू camelcontext नीचे के रूप में:

CamelContext camelContext = new DefaultCamelContext(); 
camelContext.addRoutes(new SampleRoute()); 
camelContext.start(); 

मेरे routebuilder वर्ग:

class SampleRoute extends RouteBuilder { 

    @Override 
    public void configure() { 
     try 
     { 
      from("direct:consumerMethod").process(new DDT()); 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 
} 

मैं तो एक इंटरफ़ेस जो एक SendMessage विधि है बनाएँ।

public interface DDTConsumer { 

    public String sendMessage(Object object); 

} 

अब मैं इस इंटरफ़ेस का समापन बिंदु बनाने और एंडपॉइंट पर एक संदेश भेजने के लिए इस विधि को लागू करता हूं।

DDTConsumer ddt; 
try { 
    ddt = new ProxyBuilder(camelContext).endpoint("direct:consumerMethod").build(DDTConsumer.class); 
    ddt.sendMessage(msg.getValue()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

इससे मेरी समस्या हल हो गई और मार्ग ठीक काम कर रहा है। उम्मीद है कि यह दूसरों की भी मदद करता है।

0

अपने वर्ग में जहां sampleMethod(Object) निम्नलिखित क्षेत्र को जोड़ने के लिए है:

@Produce(uri = "direct:consumerMethod") 
ProducerTemplate template; 

अपने sampleMethod(Object) आप उपयोग कर सकते हैं पहले से template इस तरह कहा:

public sampleMethod(Object obj){ 
     template.sendBody(object); 
} 

और यह एक संदेश भेजना चाहिए direct:consumerMethod मार्ग पर।

+0

यदि आप मेरा कोड देखते हैं तो यह पहले से ही ऐसा कर रहा है। फिर भी प्रक्रिया को कॉल नहीं किया जा रहा है। –

+0

क्या आप वाकई 'प्रत्यक्ष: उपभोक्ता विधि' मार्ग शुरू कर चुके हैं? क्या आप वसंत के साथ ऊंट का उपयोग करते हैं? – mgyongyosi

0

कुछ इस तरह का प्रयोग करें, यदि आप कॉल करना चाहते हैं somemethod

@Override 
public void configure() { 
    from("direct:consumerMethod").log(simple("${bean:generateD?method=generateDMethod}")); 
} 

ऊपर अभिव्यक्ति फोन generateD वस्तु (सेम) की generateDMethod और लॉग तरीकों उत्पादन सांत्वना देने (डिफ़ॉल्ट लॉग लेखक) होगा। उपर्युक्त अभिव्यक्ति कार्य करने के लिए, आपको रजिस्ट्री में generateD बीन स्टोर करना होगा, जो आपके एप्लिकेशन के CamelContext से आगे जुड़ा होगा। आप निम्नानुसार

@Autowired 
private GenerateD generateD; 

@Override 
protected CamelContext createCamelContext() throws Exception { 
    SimpleRegistry registry = new SimpleRegistry(); 
    registry.put("generateD", generateD); //the generateD bean,which can be used anywhere in the camelcontext 
    SpringCamelContext camelContext = new SpringCamelContext(); 
    camelContext.setRegistry(registry); //add the registry 
    camelContext.setApplicationContext(getApplicationContext()); 
    camelContext.start(); 
    return camelContext; 
} 

यह बीम को camelContext में जोड़ता है। पूरा उदाहरण प्राप्त करने के लिए कृपया इस उत्तर को link पर देखें।

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