2013-08-21 12 views
0

我的问题是相对较developerWorks上论坛发布的一个(论坛仅仅是由于迁移读取)至极是一样的:工作灯5.0.6:Ajax请求例外:表过大,而大数据发送到数据适配器

我有一个与外部Web服务接口的http适配器。有效载荷的部分 是音频和图像。我们遇到了表单大小限制。 请在此帖子末尾查看附加的例外情况。我已阅读 以前的帖子,码头配置需要调整到 容纳更大的有效载荷。我们希望在 控制这个大小限制的服务器端应用程序层,并认为建立一个 码头-web.xml中定义的最高形式的大小:

在工作灯,这是正确的做法解决这个问题?

如果这是正确的方法,您可以提供详细信息, jetty-web.xml应放在server/conf下,还是需要 在应用程序大战的WEB-INF下?

如果需要将文件放在WEB-INF下,可以解释如何在WL项目 构建过程中将 放置在WEB-INF下。

由于E:Ajax请求例外:表单太large802600> 200000 2013年2月6日11时39分48秒FWLSE0117E:错误代码:1,错误描述: INTERNAL_ERROR,错误消息:FWLSE0069E:发生内部错误 (:USAEMP4, 的LoginModule:GersServiceAdapterLoginModule名) wl_remoteDisableRealm =小工具请求表格太large802600> 200000,用户身份 {wl_authenticityRealm = NULL,GersServiceAdapterRealm =期间(名称:NullLoginModule, 的LoginModule:NullLoginModule),SampleAppRealm = NULL, wl_antiXSRFRealm =(名称:antiXSRF,loginModule:WLAntiXSRFLoginModule), wl_deviceAutoProvisioningRealm = null,WorklightConso勒= NULL, wl_deviceNoProvisioningRealm =(名称:设备, 的LoginModule:WLDeviceNoProvisioningLoginModule) MYSERVER =(名称:3e857b6a-d2f6-40d1-8c9c-10ca1b96c8df, 的LoginModule:WeakDummy) wl_anonymousUserRealm =(名称: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 + worklight的生产环境中进行测试。

感谢您的帮助

+1

您是否尝试过适配器? – rooftop

+0

是的,我使用WLStudio向导生成的SQL适配器 – erica

回答

0

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

看起来这是一个码头的限制,你可以尝试任何这些:

1)设置系统属性org.eclipse.jetty.server.Request.maxFormContentSize到一个更大的值(即加-Dorg .eclipse.jetty.server.Request.maxFormContentSize = 25000000)到eclipse.ini的结尾,然后启动Worklight。

2)相反,设置该其它系统属性-Dorg.mortbay.jetty.Request.maxFormContentSize = 25000000到同一个地方。

+0

我忘了提及,但这是服务器端配置,因此不同配置可能适用于生产服务器(因为它不会是Jetty) –

+0

感谢您的回答,为您的当你说生产中的信息不同时,你说得对的信息是正确的,因为在WAS 7 + WL5.06的生产环境下,这个问题不会发生 – erica

+0

你介意将问题设置为回答吗?谢谢 –

0

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

+0

太棒了。请标记为已回答。 –

相关问题