2017-12-18 6 views
0

ここではJsonデータをCSV形式に変換しようとしていますが、最終的にこのファイルをOfbizサーバapiに送信しようとしていますが、URLにパラメータを送信するときにAPIのエンドポイントに認証情報が必要です。apache camel DSLまたはラクダプロセッサ内で追加の認証プロパティを設定するにはどうすればよいですか?

{ "_ERROR_MESSAGE _": "エラー呼び出しイベント:org.apache.ofbiz.webapp.event.EventHandlerException:実測URLパラメータは[ConfigIDの]イベントにURI [uploadAndImportFileFromCSVFile]で(HTTPS)要求マップを確保するために渡されますこれはサービス[uploadAndImportFile]を呼び出します;これはセキュリティ上の理由から許可されていません!リクエストURLではなくリクエスト本文(フォームフィールド)にデータを暗号化する必要があります。 https://issues.apache.org/jira/browse/OFBIZ-2330のサブタスク(このエラーのサブタスクが存在しない場合は前にチェックしてください)あなたがJiraの問題を作成する方法がわからない場合は、先にhttps://cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Contributors+Best+Practicesをご覧ください。セッションID: "someId .jvm1"、 "removePathAlias":false、 "loggedIn":true、 "USERNAME": "__" 、 "_ LOGIN_PASSED _": "TRUE"、 "webSiteId": "API"}

その後、私はMultipartBuilderを使用してリクエストを送信しました。

exchange.getIn().setHeader("bearer",token);   
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
File file =new File("//home/r2/Desktop/ofBizFile/orderFile.csv"); 
builder.addPart("configId",new StringBody("CON_ID")); 
builder.addPart("fileTypeEnumId",new StringBody("CSV_FILE")); 
builder.addPart("_uploadedFile_contentType",new StringBody("text/csv")); 
builder.addPart("uploadedFile",new FileBody(file)); 
exchange.getIn().setBody(builder.build()); 

私もこのような試みをしました。ここで

exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1"); 
exchange.getIn().setHeader(Exchange.HTTP_QUERY,"USERNAME=abc&PASSWORD=bc69"); 
exchange.getIn().setBody("configId=CON_ID&fileTypeEnumId=CSV_FILE"); 

私のラクダのルートが

//Route 1 
from("couchdb:http://localhost:5984/order") 
     .process(new JsonToCsvProcessor()) 
     //Storing file into local directory 
     .to("file:/home/r2/Desktop/ofBizFile?fileExist=append&fileName=order-${date:now:yyyyMMdd}.csv"); 

    .to("direct:jsonToCsv"); 
//Route 2 
    from("direct:jsonToCsv") 
    .setHeader(Exchange.HTTP_QUERY,constant("USERNAME=__&PASSWORD=__")) 
    //For get token 
    .to("https4://SomeAddress.com/centerAPI/getAuthenticationToken") 
    //Get the token and set required parameter for route 3 
    .process(new ProcessorGetToken()) 
    .to("direct:hold");  
//Route 3 
    from("direct:hold") 
    .setHeader(Exchange.HTTP_QUERY,constant("USERNAME=__&PASSWORD=__")) 
    .to("https4://SomeAddress.com/centerAPI/uploadAndImportFileFromCSVFile?throwExceptionOnFailure=false") 
    //How I know the file is submited successfuly ? 
    .to("stream:out").end(); 

あるので、問題は、私は次のRoute3ためRoute2 ProcessorGetTokenで体内のデータを送信することができますどのようにでしょうか?

答えて

0

私はここに暗闇の中に撃つでしょう。

データではなく、リクエストURL

のそれリクエストボディ(フォームフィールド)の一部することによって暗号化されなければならないあなたは、この統合に関するドキュメントをお持ちでない:あなたのエラーメッセージを読みます?私はあなたに、このプロセスと、それを送る前にあなたのデータを暗号化する必要があることについて、より明確な説明が必要だと思います。

はまた、このように、あなたのルートにPOSTからExchange.HTTP_METHODを設定しよう:

exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1"); 
exchange.getIn().setHeader(Exchange.HTTP_METHOD, "POST"); 
exchange.getIn().setHeader(Exchange.HTTP_QUERY,"USERNAME=abc&PASSWORD=bc69"); 
exchange.getIn().setBody("configId=CON_ID&fileTypeEnumId=CSV_FILE"); 

は、より多くの例が HTTPを介してデータを送信するために見る this unit testに見てみましょう。他にも多くのテストがあります。

関連する問題