2017-08-18 19 views
5

Şimdi her biri bir dize üreten bir yöntemim var. Yöntemi uri olarak kaydetmek ve bir rota için girdi olarak kullanılacak bir değişim yöntemi üretmek istiyorum.Deve yolunda üretici olarak bir yöntem kullanın

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

yol aşağıdaki şekilde tanımlanır:

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

Ancak yol doesnt çağrı sınıfı oluşturulan

yöntem

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

Örneğin, farklı bir sınıfın çağrı sampleMethod kullanarak üretiyorum. Bu uygun değil mi yoksa yanlış bir şey mi yapıyorum? Eğer sampleMethod(Object) aşağıdaki alanı ekleyin sahip olduğunuz sınıfında

+0

".process (...)" parametresinin bir "İşlemci" olması veya bunu devralması/uygulamanız gerektiğine inanıyorum - İşlemcinizin içinde, yönteminizi çağırabilirsiniz. Örnek kodumun yakınında değilim ama bu sizi doğru yönde dürtüyor. – ochi

+1

Hangi hatayı alıyorsunuz? – Strelok

+0

Ben producer.sendBody() etrafında bir deneyin yakalamak ve üretici null bulundu. Yani bu doğrudan anlamına geliyor: consumerMethod başlatılmamış mı? –

cevap

1

Son olarak, kullanım durumum için çalışılan budur. aşağıdaki gibi

Başlangıç ​​camelcontext:

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

My routebuilder sınıfı:

class SampleRoute extends RouteBuilder { 

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

    } 
} 

sonra bir sendMessage yöntem olan bir arayüz oluşturur.

public interface DDTConsumer { 

    public String sendMessage(Object object); 

} 

Şimdi ben bu arayüzün bir uç noktasını oluşturmak ve bitiş noktasına bir mesaj göndermek için bu yöntemi uygulamak.

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

Bu, sorunumu çözdü ve rota şu anda çalışıyor. Umarım başkalarına da yardım eder.

0

: sampleMethod(Object) kullanabileceğiniz senin içinde

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

daha önce böyle template ekledi:

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

Ve bu mesajı göndermesi gerektiğini direct:consumerMethod rotasına. Aramak istediğiniz takdirde böyle

+0

Kodumu görüyorsanız bunu zaten yapıyor. İşlem aranmıyor. –

+0

'direct: consumerMethod' yolunun başlatıldığından emin misiniz? Camel'i Spring ile kullanıyor musunuz? – mgyongyosi

0

Kullanım şey birYöntem

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

Yukarıdaki ifade çağrı generateD nesne (fasulye) ait generateDMethod ve (varsayılan günlük yazar) konsola yöntemler çıkışını oturum olacaktır. İfadenin çalışmasını sağlamak için, Kayıt Defterinde generateD Bean'i saklamanız gerekir; bu, uygulamanızın CamelContext ile daha da ilişkili olacaktır. Aynı işlemi aşağıdaki gibi de yapabilirsiniz: Bu, fasulyeyi camelContext'e ekler. Tam bir örnek olması için lütfen cevabımı bu link numaralı telefondan kontrol edin.