2012-04-16 21 views
9

Attualmente sto usando un metodo HTTP per invocare un URL che creerà un problema JIRA.Come posso invocare un servizio RESTful tramite Apache Camel?

Ora voglio usare Apache Camel, come posso usarlo?

ho bisogno di richiamare il seguente link attraverso Camel:

http://localhost:8080/rest/api/2/project/" + key + /components 

Come Sono nuovo di cammello, si prega di suggerire alcune soluzioni ed esempi troppo.

Grazie

risposta

7

Si potrebbe facilmente utilizzare il CXFRS Component; se hai bisogno di farlo utilizzando il HTTP Component per qualche motivo si potrebbe facilmente utilizzare anche quello:

<setHeader headerName="CamelHttpUri"> 
     <simple>http://localhost:8080/rest/api/2/project/${header.myKey}/components</simple> 
</setHeader> 
<inOut uri="http://doesnt.matter.we/override/it/anyways" /> 

E naturalmente è necessario arricchire il vostro messaggio con l'intestazione myKey prima di arrivare a questa parte del percorso.

+0

Come utilizzare CXFRS per eseguire una semplice richiesta HTTP? – Phil

8

Vedi anche questa FAQ sull'utilizzo dinamica agli endpoint in Camel http://camel.apache.org/how-do-i-use-dynamic-uri-in-to.html

In sostanza il modello EIP per questo è l'elenco dei destinatari.

Quindi nel tuo caso potrebbe anche essere semplificata come uno EIP

<recipientList> 
    <simple>http://localhost:8080/rest/api/2/project/${header.myKey}/components</simple> 
</recipientList> 

mente la componente http in cammello è completamente sincrono. Se si vuole fare richiesta/risposta su HTTP e evitare che il blocco chiamante durante l'attesa per il messaggio di risposta, quindi è possibile utilizzare alcuni degli altri componenti HTTP da Camel come ad esempio:

  • cammello-AHC
  • cammello-http4
  • cammello molo
1

sto usando apache cammello molo

CamelContext context = new DefaultCamelContext(); 
    public void configure(){ 
      context.addRoutes(new RouteBuilder(){ 
      from("jetty:localhost:9000/offers") 
      .to("direct:getOffers") 
      .end(); 

    } 

}); 

così qui quando l'utente colpirà http://localhost:9000/offers poi i endpoint diretti: getOffers avranno invocato

così ora la definizione del punto getOffers fine

context.addRoutes(new RouteBuilder(){ 
    public void configure(){ 
      from("direct:getOffers") 
      .to("jetty:http://localhost:9008/api/v2.0/offers? 
      bridgeEndpoint=true") 
     .end(); 

    } 

}); 

Ecco un altro servizio è in esecuzione a 9008 avendo una risorsa resto http://localhost:9008/api/v2.0/offers e questo è la risorsa che sto cercando di consumare.

così quando esempio cammello comincia registra entrambi i percorsi, allora non trattamento come descritto sopra

Nota sua importante aggiungere l'opzione di?bridgeEndpoint = true affinché funzioni correttamente

Problemi correlati