0

ワークライト用の HTTP アダプターを作成する必要がありますが、パラメーターを介してプログラムで URL を提供する必要があります。

1) ユーザー/パスワードは渡すことができましたが、URL は渡すことができませんでした。それを行う方法はありますか?

また、REST API を呼び出すための独自の Java アダプターを作成しようとしました。アダプターをテストすると機能しますが、応答がワークライトで期待される形式になっていないようです。このエラーが発生しました:

2) BAD_PARAMETER_EXPECTED_DOCUMENT_OR_ARRAY_OF_DOCUMENT.

私の Java アダプターは JSONArtifact (JSONObject) を返しますが、ワークライトはこれを { "array":{...}} などの別の JSONObject に埋め込むことを望んでいるようです。JSONObject をワークライトが期待する形式に変換する方法はありますか?

    org.apache.wink.json4j.JSON をインポートします。
    org.apache.wink.json4j.JSONArtifact をインポートします。
    org.apache.wink.json4j.JSONException をインポートします。

private Header headerUserAgent = new Header("User-Agent", "Mozilla");
private Header headerAccept = new Header("Accept", "application/json");

プライベート文字列のホスト名。
プライベート文字列 baseURL;

保護された MyHttpClient(文字列 userName, 文字列 userPassword, 文字列 hostName, 文字列 baseURL ) {
    素晴らしい();
    クレデンシャル defaultcreds = new UsernamePasswordCredentials(userName,
            利用者パスワード);
    this.getState().setCredentials(AuthScope.ANY, defaultcreds);
    this.hostName = ホスト名;
    this.baseURL = baseURL;
}


プライベート GetMethod getGetMethod(String url) は URIException をスローします {
    GetMethod httpMethod = new GetMethod(new HttpsURL("https://"+hostName+baseURL+url).getEscapedURI());
    addCommonHeaders(httpMethod);
    httpメソッドを返します。
}
プライベート JSONArtifact getResponseAsJSONObject(InputStream inputStream) が IOException をスローします {
    InputStreamReader リーダー = 新しい InputStreamReader(inputStream);
    試す {
        JSONArtifact json = JSON.parse(リーダー);
        json を返します。
    } キャッチ (NullPointerException e) {
        // TODO 自動生成された catch ブロック
        e.printStackTrace();
    } キャッチ (JSONException e) {
        // TODO 自動生成された catch ブロック
        e.printStackTrace();
    }
    null を返します。
         }

アダプタ:

    関数 getResponse(ユーザー、パスワード) {
        var client = new com.itdove.mypackage.MyHttpClient(user,password,"myurl","mybaseurl");
        戻る {
            配列 : client.executeGet("mypath")
        };
    }

これで動作しますが、このソリューションはサービス URL をパラメーターとして提供しません。

    関数 getResponseAdapters(パス、ユーザー名、パスワード) {

        変数入力 = {
            メソッド:「取得」、
            返されたContentType: 'json',
            ヘッダー: {
                'ユーザーエージェント':'Mozilla',
                'Authorization': 'Basic '+Base64.encode(ユーザー名+':'+パスワード),
            } 、
            パス : '/resources/' + パス
        };

        return WL.Server.invokeHttp(入力);
    }

    関数 getResponse(ユーザー名、パスワード) {
        getMySCAWSAdapters (パス、ユーザー名、パスワード) を返します。
    }

コレクション

                vAPPArrayAdapterOptions = {
                    名前: 'myResponseAdapter',
                    交換: ''、
                    削除する: ''、
                    追加: ''、
                    ロード: {
                        手順: 'getResponse',
                        params: ["ユーザー","パスワード"],
                        キー:「配列」
                    }、
                    受け入れる: 関数 (データ) {
                        戻ります (data.status === 200);
                    }
                }、

    ...
                    vAPPArray = wlJsonStore.initCollection(
                            "vAPPアレイ",
                            vAPPArraySearchFields、
                            {アダプタ: vAPPArrayAdapterOptions,
                            onSuccess: initCollectionSuccessCallback、
                            onFailure: initCollectionFailureCallback、
                            負荷:真});

どうもありがとうドミニク

4

1 に答える 1

0

解決策を見つけました:

まず、com.ibm.json.java.JSONArtifact の代わりに apache wink JSONArtifact を使用していました。

次に、コレクターの実装メソッドを次のように変更して、ステータスを追加しました(必要かどうかはわかりません)

function getResponse(ユーザー、パスワード、ホスト名) {
    var client = new com.itdove.mypackage.IWDHttpClient(user,password,hostname,"mypath");
    戻る {
        配列 :client.executeGet("mymethod"),
        statusCode: client.getStatusCode(),
        statusReason: client.getStatusReason()
    };
}

myCollector.js で、initCollection を呼び出す前に、ユーザー、パスワード、ホスト名を次のように設定します。

        params = [ settings.json.user, settings.json.password, settings.json.hostname ];
        myAdapterOptions.load["params"] = params;

于 2013-03-17T13:29:09.990 に答える