Worklight 5.0.6:Ajax请求异常:将大数据发送到数据适配器时表单太大

时间:2013-08-21 09:39:58

标签: ajax exception request adapter ibm-mobilefirst

我的问题与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 =(name:USAEMP4,   的LoginModule:GersServiceAdapterLoginModule)   wl_remoteDisableRealm =(名称:NullLoginModule,   loginModule:NullLoginModule),SampleAppRealm = null,   wl_antiXSRFRealm =(name:antiXSRF,loginModule:WLAntiXSRFLoginModule),   wl_deviceAutoProvisioningRealm = null,WorklightConsole = null,   wl_deviceNoProvisioningRealm =(名称:装置,   的LoginModule:WLDeviceNoProvisioningLoginModule)   MYSERVER =(名称:3e857b6a-d2f6-40d1-8c9c-10ca1b96c8df,   的LoginModule:WeakDummy)   wl_anonymousUserRealm =(名称:3e857b6a-d2f6-40d1-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 varable很小,一切都正常工作,但如果它超过大约200000个字符长度则失败...

最后,我可以说在开发环境(WL Studio 5.0.6 + WL Server 5.0.6)中出现问题,我没有在基于SLES + Websphere应用服务器7 + worklight的生产环境中测试它。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

我知道您正在使用Worklight提供的测试服务器。

看起来这是一个Jetty限制,所以你可以尝试以下任何一个:

1)将系统属性org.eclipse.jetty.server.Request.maxFormContentSize设置为更大的值(即将-Dorg.eclipse.jetty.server.Request.maxFormContentSize = 25000000添加到eclipse.ini的末尾)推出Worklight。

2)相反,将其他系统属性-Dorg.mortbay.jetty.Request.maxFormContentSize = 25000000设置为相同的位置。

答案 1 :(得分:0)

另一种解决问题的方法是使用不再使用Jetty的WL Studio版本6作为测试环境