2017-10-13 1 views
0

Im nouveau à Apache Camel. Im essayant de copier ce fichier dans un dossier: https://www.dnb.no/portalfront/datafiles/miscellaneous/csv/kursliste_ws.xmlCamel chercher des données de http

Je reçois l'erreur:

Exception in thread "main" java.lang.UnsupportedOperationException: Cannot consume from http endpoint

package route; 

import org.apache.camel.CamelContext; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.impl.DefaultCamelContext; 
import org.apache.log4j.BasicConfigurator; 

public class CurrencyRoute { 

     public static void main(String args[]) throws Exception { 
      // Log 4j 
      BasicConfigurator.configure(); 

      // Create camel context 
      CamelContext context = new DefaultCamelContext(); 


      // New route 
      context.addRoutes(new RouteBuilder() { 
       public void configure() { 
        from("https://www.dnb.no/portalfront/datafiles/miscellaneous/csv/kursliste_ws.xml") 
          .log("Read file") 
          .to("file:src/main/resources/data/inbox"); 
       } 
      }); 

      // start the route and let it do its work 
      context.start(); 
      Thread.sleep(10000); 

      // stop the CamelContext 
      context.stop(); 


     } 

} 

Je sais que je dois définir un itinéraire pour elle, mais où dois-je définir (en quel fichier ??), et comment devrait-il être défini?

code mis à jour 13.10.2017 13:06

package route; 

import org.apache.camel.CamelContext; 
import org.apache.camel.Exchange; 
import org.apache.camel.ProducerTemplate; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.impl.DefaultCamelContext; 
import org.apache.log4j.BasicConfigurator; 

public class CurrencyRoute { 

     public static void main(String args[]) throws Exception { 
      // Log 4j 
      BasicConfigurator.configure(); 

      // Create camel context 
      CamelContext context = new DefaultCamelContext(); 

      // Template 
      ProducerTemplate template = context.createProducerTemplate(); 

      // New route 
      context.addRoutes(new RouteBuilder() { 
       public void configure() { 
        from("direct:start").setHeader(Exchange.HTTP_METHOD, constant("GET")) 
          .to("https://www.dnb.no/portalfront/datafiles/miscellaneous/csv/kursliste_ws.xml") 
          .to("file:src/main/resources/data/inbox/?autoCreate=true"); 
       } 
      }); 

      // SendBody 
      template.sendBody("direct:start", null); 

      // start the route and let it do its work 

      context.start(); 
      Thread.sleep(10000); 

      // stop the CamelContext 
      context.stop(); 


     } 

} 

Répondre

1

Pour la configuration des routeurs à dos de chameau, vous pouvez jeter un oeil à d'excellents exemples fournis par Camel here avec le code sur GitHub. Votre route n'est pas non plus valide, d'une part, le point de terminaison uri sysntax est faux, d'autre part, un point de terminaison http ne peut être utilisé qu'en tant que consommateur non producteur. Pour votre cas, regardez here. Fondamentalement, vous devez faire comme ce

from("direct:start").setHeader(Exchange.HTTP_METHOD, constant("GET")) 
.to("https://www.dnb.no/portalfront/datafiles/miscellaneous/csv/kursliste_ws.xml") 
.to("file:src/main/resources/data/inbox/?autoCreate=true"); 

puis appeler le point de terminaison directe

template.sendBody("direct:start", null); 

ou vous pouvez utiliser une minuterie comme expliqué here et votre itinéraire comme quelque chose comme ça

from(timer).to(http).to(file); 
+0

Je n'ai pas de variables nommées "template". Voulez-vous dire context.sendBody ("direct: start", null); ? – Solo

+0

Vous pouvez créer un ProducerTemplate simple en utilisant ProducerTemplate template = context.createProducerTemplate(); – Shailendra

+0

J'ai mis à jour le code avec le modèle (voir mon premier message) puis j'ai eu cette erreur: Exception dans le fil "principal" org.apache.camel.CamelExecutionException: Une exception est survenue lors de l'exécution de l'échange: Exchange [Message: [Body is null ]] – Solo