簡體   English   中英

Worklight 5.0.6:Ajax請求異常:向數據適配器發送大數據時,表單太大

[英]Worklight 5.0.6 : Ajax request exception: Form too large while sending large data to data adapter

我的問題與在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,用戶身份{wl_authenticityRealm = null,GersServiceAdapterRealm =(名稱:USAEMP4,loginModule:GersServiceAdapterLoginModule),wl_remoteDisableRealm = {name:NullLoginModule,loginModule:NullLoginModule),SampleAppRealm = null,wl_AntiXSRFS = null,WorklightConsole = null,wl_deviceNoProvisioningRealm = [名稱:設備,loginModule:WLDeviceNoProvisioningLoginModule),myserver = [名稱:3e857b6a-d2f6-40d1-8c9c-10ca1b96c8df,loginModule:WeakDummy),wl_(anonyma3d61-1-6 8c9c-10ca1b96c8df,loginModule:WeakDummy)}。

我有完全相同的問題:我將大量數據發送到Worklight適配器,並且我的應用程序失敗,並在日志中顯示以下錯誤消息:

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 + worklight的生產環境中進行測試。

謝謝你的幫助

我了解您正在使用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設置到同一位置。

解決該問題的另一種方法是使用WL Studio版本6,該版本不再使用Jetty作為測試環境。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM