0

私の質問は、developerworksフォーラムに投稿されたものと比較的同じです(フォーラムは移行のために読み取り専用です)。

外部 Web サービスとのインターフェイスとなる http アダプターがあります。ペイロードの一部は音声と画像です。フォーム サイズの制限に達しています。この投稿の最後に添付されている例外を参照してください。以前の投稿で、より大きなペイロードに対応するために桟橋の構成を調整する必要があることを読みました。サーバー側のアプリケーション層でこのサイズ制限を制御したいので、jetty-web.xml を作成して最大フォーム サイズを定義することを考えました。

400000

Worklight では、これはこの問題を解決するための適切なアプローチですか?

これが適切なアプローチである場合、jetty-web.xml を server/conf の下に配置する必要があるかどうか、またはアプリケーション ウォーの WEB-INF の下に配置する必要があるかどうかの詳細を提供できますか?

ファイルを WEB-INF の下に配置する必要がある場合、WL プロジェクトのビルド中にこのファイルを WEB-INF の下に配置する方法を説明できますか。

ありがとう E: Ajax リクエスト例外: フォームが大きすぎます802600>200000 2013-02-06 11:39:48 FWLSE0117E: エラー コード: 1、エラーの説明: INTERNAL_ERROR、エラー メッセージ: FWLSE0069E: ガジェット リクエスト中に内部エラーが発生しました フォームが大きすぎます802600> 200000、ユーザー ID {wl_authenticityRealm=null、GersServiceAdapterRealm=(name:USAEMP4、loginModule:GersServiceAdapterLoginModule)、wl_remoteDisableRealm=(name:NullLoginModule、loginModule:NullLoginModule)、SampleAppRealm=null、wl_antiXSRFRealm=(name:antiXSRF、loginModule:WLAntiXSRF) =null、WorklightConsole=null、wl_deviceNoProvisioningRealm=(name:device、loginModule:WLDeviceNoProvisioningLoginModule)、myserver=(name:3e857b6a-d2f6-40d1-8c9c-10ca1b96c8df、loginModule:WeakDummy)、wl_anonymousUserRealm=(name:3e857b6a-d2f6-40d1-8c9c-10ca1b96c8df、loginModule:WeakDummy)}.

まったく同じ問題があります。ワークライト アダプターに大量のデータを送信すると、アプリケーションが失敗し、次のエラー メッセージがログに記録されます。

2013-08-21 09:48:17] FWLSE0020E: Ajax request exception: Form too large202534>200000
[2013-08-21 09:48:18] FWLSE0117E: Error code: 1, error description: INTERNAL_ERROR, error message: FWLSE0069E: An internal error occurred during gadget request Form too large202534>200000, User Identity {wl_authenticityRealm=null, wl_remoteDisableRealm=(name:null, loginModule:NullLoginModule), SampleAppRealm=null, wl_antiXSRFRealm=(name:b2isf3704k2fl8hovpa6lv9mig, loginModule:WLAntiXSRFLoginModule), wl_deviceAutoProvisioningRealm=null, WorklightConsole=null, wl_deviceNoProvisioningRealm=(name:40a24da9-0a32-464a-8dec-2ab402c683ae, loginModule:WLDeviceNoProvisioningLoginModule), myserver=(name:2b1a7864-37c4-47f0-9f5c-49621b6915b5, loginModule:WeakDummy), wl_anonymousUserRealm=(name:2b1a7864-37c4-47f0-9f5c-49621b6915b5, loginModule:WeakDummy)}.

これは、WL.Client.invokeProcedure(...) を呼び出してアダプター プロシージャを呼び出すと、呼び出されたプロシージャの最初の行の前に発生します... 呼び出されたプロシージャの開始をログに記録しようとすると、デバッグ ログに何も書き込まれません。 ...

ソースコードを提供できます:

これは、dhtml ユーザー イベント (onclick) によって呼び出されます。

// Construct the param to pass to the WL adapter insert procedure
var paramObject = {
    QCDART: machine,                    // machine is a javascript variable as long int
    QTITRE: title,                      // title is a javascript variable as string(255)
    QDESC: desc,                        // desc is a javascript variable as string(255)
    QHODAT: todayDateDb2IntFormat,      // todayDateDb2IntFormat is a javascript variable as long int
    QACTIF: active,                     // active is a javascript variable as int
    SSRCFIC: currentPdfFileDataBase64,  // currentPdfFileDataBase64 is a javascript variable as base64 encoded string from a binary file > 150 ko approx.
    SMIMFIC: 'application/pdf',         
    SSIZFIC: currentPdfFileSize         // currentPdfFileSize is a javascript variable as long int
};

// Construct adapter invocation data
var invocationData = {
    adapter : 'IseriesDB2Backend', // adapter name
    procedure : 'addModeleReleves', // procedure name
    parameters : [paramObject] // parameters if any
};

WL.Client.invokeProcedure(invocationData, {
    timeout: 60000,
    onSuccess: function() {
        // Notify success
        alert('OK');
    }, // invokeProcedure success callback
    onFailure: function(invocationResult) {
        alert('ERROR');
    } // invokeProcedure failure callback
});

これは私のアダプターのソースコードです:

var addModeleReleveStatement = WL.Server.createSQLStatement("select QCDDOC from FINAL TABLE (insert into ERIHACFICH.DOCENTQ (QCDART, QTITRE, QDESC, QHODAT, QACTIF) values (?, ?, ?, ?, ?))");
function addModeleReleves(params) {
    WL.Logger.debug('Starting adapter procedure...');

    var modeleReleveResult =  WL.Server.invokeSQLStatement({
        preparedStatement : addModeleReleveStatement,
        parameters : [params.QCDART, params.QTITRE, params.QDESC, params.QHODAT, params.QACTIF]
    });

    if(modeleReleveResult.isSuccessful) {
        WL.Logger.debug('Success !');
    }

    WL.Logger.debug('Adapter procedure ended !');

    // Return result (with the last id inside)
    return modeleReleveResult;
}

currentPdfFileDataBase64 と呼ばれる JavaScript 変数が小さい場合、すべて正常に動作していますが、約 200000 文字の長さを超えると失敗します...

最後に、この問題は開発環境 (WL Studio 5.0.6 + WL Server 5.0.6) で発生すると言えます。SLES + Websphere アプリケーション サーバー 7 + ワークライトに基づく運用環境ではテストしていません。

助けてくれてありがとう

4

2 に答える 2

0

Worklight が提供するテスト サーバーを使用しているとのことですが、

これは Jetty の制限のように見えるので、次のいずれかを試すことができます。

1) Worklight を起動する前に、システム・プロパティー org.eclipse.jetty.server.Request.maxFormContentSize をより大きな値に設定します (つまり、-Dorg.eclipse.jetty.server.Request.maxFormContentSize=25000000 を eclipse.ini の末尾に追加します)。

また

2) 代わりに、この別のシステム プロパティ -Dorg.mortbay.jetty.Request.maxFormContentSize=25000000 を同じ場所に設定します。

于 2013-08-21T16:59:50.590 に答える
0

この問題を解決する別の方法は、Jetty をテスト環境として使用しなくなった WL Studio バージョン 6 を使用することでした。

于 2013-08-29T08:54:10.423 に答える