2016-12-16 12 views
0

私はCitrusを使用して、URLエンコード後にservice1の入力パラメータがservice2 '入力に渡されるRESTfulサービスを自動化しています。URLEncode用のCitrusフレームワークを使用したJSON応答の解析

以下は、私が試した方法を説明するためのコードスニペットですが、designer.traceVariables()の上にURLEncodeを使用できないことがあります。

レスポンスパラメータをコンテキスト外に渡すことができないという制限があるため、私は以下のような同じGherkinメソッドで定義された複数のsend()、receive()呼び出しを呼び出す必要がありました。 designer.traceVariables()を使用して変数myVar(payLoadから抽出)を印刷できましたが、次のサービスコールに渡すためにさらなる使用のために&を処理できません。

@When("^I call CPAuth service for ChasePay$") 
public void i_call_CPAuth_service_for_ChasePay() throws Throwable { 
    designer.send("CitrusContext") 
    .messageType(MessageType.JSON) 
    .header(X_JPMC_CSRF_TOKEN_HEADER, csrfToken) 
    .header(HTTP.CONTENT_TYPE, APPLICATION_JSON) 
    .header(COOKIE, ConnRoutePNames.DEFAULT_PROXY + "=" + proxy) 
    .header("citrus_endpoint_uri", authUrl +"/auth/fcc/login") 
    .message(new HttpMessage("<large_string=no_issues_here>").method(HttpMethod.POST)); 

    designer.receive("CitrusContext").messageType(MessageType.JSON) 
    .validate("$.response", "secauth") 
    .validate("$.newstoken", false) 
    .validate("$.smtoken", "void") 
    .extractFromPayload("$.spid", "myVar"); 

    String request = URLEncoder.encode("appStoreBundleId=com.testmerchant.sampleapp&version=APP%2BBUILD%2BVERSION&channelId=MPD&spid=**${myVar}**&type=json&chasePayMerchantId=1390xxx", CharEncoding.UTF_8); 
    System.out.println("request: "+request); 
    designer.send("CitrusContext") 
    .messageType(MessageType.JSON) 
    .header(X_JPMC_CSRF_TOKEN_HEADER, csrfToken) 
    .header(HTTP.CONTENT_TYPE, APPLICATION_JSON) 
    .header(COOKIE, ConnRoutePNames.DEFAULT_PROXY + "=" + proxy) 
    .header("citrus_endpoint_uri", hostUrl +"/pwc/provisioning/pos/otp/contact/v20160313/list.action") 
    .message(new HttpMessage(request).method(HttpMethod.POST)); 

結果:符号化前 :(これは符号化される文字列であるべきである)MSZp2V/czcKsxej + Q04Da/QeVlo = MCwCFAqrBN/6/J8WZENecE7JQlEODnecAhQCcnXGBjMoiQ7deunlyXKacFo/lQの== 符号化後:%の3次元%24 %7BmyVar%7D%26

ご協力いただきありがとうございます。

答えて

0

Citrosがメッセージペイロードの一部として式を解析して解釈する前に、エンコード操作で "$ {myVar}"式が破棄されます。エンコード操作をCitrus関数として実行する必要があります。どのようにこの関数を記述するためにここで説明されていますhttp://citrusframework.org/docs/custom-functions/

次のようなものに終わる:

designer.send("CitrusContext") 
    .messageType(MessageType.JSON) 
    .message(new HttpMessage("custom:urlEncode('appStoreBundleId=com.testmerchant.sampleapp&version=APP%2BBUILD%2BVERSION&channelId=MPD&spid=**${myVar}**&type=json&chasePayMerchantId=1390xxx')").method(HttpMethod.POST)); 
関連する問題