2014-07-01 3 views
0

J'essaie de créer une route chameau pour transférer un fichier d'un serveur FTP vers un stockage AWS S3. J'ai écrit l'itinéraire suivantCamel aws-s3 ne fonctionne pas

private static class MyRouteBuilder extends RouteBuilder { 
@Override 
public void configure() throws Exception 
{ 
from("sftp://<<ftp_server_name>>&noop=true&include=<<file_name>>...") 
    .process(new Processor(){ 

     @Override 
     public void process(Exchange ex) 
     { 
      System.out.println("Hello"); 
     } 

     }) 

    .to("aws-s3://my-dev-bucket ?  
    accessKey=ABC***********&secretKey=12abc********+**********"); 
} 

La question est, cela me donne l'exception suivante:

Exception in thread "main" org.apache.camel.FailedToCreateRouteException: Failed to create route route1 at: >>> To[aws-s3://my-dev-bucket?accessKey=ABC*******************&secretKey=123abc******************** <<< in route: Route(route1)[[From[sftp://<<ftp-server>>... because of Failed to resolve endpoint: aws-s3://my-dev-bucket?accessKey=ABC***************&secretKey=123abc************** due to: The request signature we calculated does not match the signature you provided. Check your key and signing method. 

J'ai ensuite essayé de le faire dans l'autre sens. c'est-à-dire écrire une méthode comme ceci:

public void boot() throws Exception { 
    // create a Main instance 
    main = new Main(); 
    // enable hangup support so you can press ctrl + c to terminate the JVM 
    main.enableHangupSupport(); 
    // bind MyBean into the registery 
    main.bind("foo", new MyBean()); 
    // add routes 

    AWSCredentials awsCredentials = new BasicAWSCredentials("ABC*****************", "123abc*************************"); 
    AmazonS3 client = new AmazonS3Client(awsCredentials); 
    //main.bind("client", client); 
    main.addRouteBuilder(new MyRouteBuilder()); 
    main.run(); 
} 

et d'invoquer en utilisant la variable liée #client. Cette approche ne donne aucune exception, mais le transfert de fichier ne fonctionne pas.

Pour vous assurer qu'il n'y a rien de mal à mon approche, j'ai essayé SSFE-SQS au lieu de aws-s3 et qui fonctionne très bien (les transferts de fichiers de succès à la file d'attente SQS)

Toute idée pourquoi cela se passe? Y a-t-il un problème de base avec le connecteur "aws-s3" pour camel?

+0

Pouvez-vous utiliser l'exemple AWS SDK-S3 pour vérifier si votre titre a le droit d'accéder au service S3? –

Répondre

0

Tous les signes plus à vous clé secrète besoin d'être URL encodée en% 2B, dans votre cas **********+*********** devient **********%2B***********

0

Lorsque vous configurez des noeuds finaux Camel en utilisant URIs alors les valeurs de paramètres obtient URL encodée par défaut. Cela peut poser un problème si vous souhaitez configurer les mots de passe tels quels. Pour cela, vous pouvez demander à Camel d'utiliser la valeur brute en incluant la valeur RAW (valeur). Voir plus de détails sur Comment configurer les points de terminaison qui a aussi un exemple. See Camel Documentation

2

Avez-vous essayé d'utiliser la fonction RAW() pour envelopper comme comme RAW(secretkey or accesskey).

Il vous aidera à passer vos touches comme il est sans codage.

0

Votre URL devrait ressembler à:

aws-s3:bucketName?accessKey=RAW(XXXX)&secretKey=RAW(XXXX) 
Questions connexes