Worklight 5.0.6:Ajax 请求异常:向数据适配器发送大数据时表单太大
Posted
技术标签:
【中文标题】Worklight 5.0.6:Ajax 请求异常:向数据适配器发送大数据时表单太大【英文标题】:Worklight 5.0.6 : Ajax request exception: Form too large while sending large data to data adapter 【发布时间】:2013-08-21 09:39:58 【问题描述】:我的问题与 developerworks 论坛上发布的问题相对相同(论坛因迁移而只读),即:
我有一个与外部 Web 服务接口的 http 适配器。部分 有效载荷是音频和图像。我们达到了表单大小限制。 请参阅本文末尾附加的例外情况。我继续阅读 码头配置需要调整到的以前的帖子 容纳更大的有效载荷。我们想控制这个大小限制 服务器端应用程序层,并认为创建一个 jetty-web.xml 定义最大表单大小:
400000
在 Worklight 中,这是解决此问题的正确方法吗?
如果这是正确的方法,您能否提供详细信息 jetty-web.xml 应该放在 server/conf 下,还是需要 是在应用大战的WEB-INF下吗?
如果文件需要放在WEB-INF下,你能解释一下如何 完成在 WL 项目期间放置在 WEB-INF 下的这个文件 构建。
感谢 E:Ajax 请求异常:Form too large802600>200000 2013-02-06 11:39:48 FWLSE0117E:错误代码:1,错误描述: INTERNAL_ERROR,错误消息:FWLSE0069E:发生内部错误 在小工具请求期间表格太大802600>200000,用户身份 wl_authenticityRealm=null,GersServiceAdapterRealm=(名称:USAEMP4, loginModule:GersServiceAdapterLoginModule), wl_remoteDisableRealm=(名称:NullLoginModule, loginModule:NullLoginModule), SampleAppRealm=null, wl_antiXSRFRealm=(名称:antiXSRF, loginModule:WLAntiXSRFLoginModule), wl_deviceAutoProvisioningRealm=null,WorklightConsole=null, wl_deviceNoProvisioningRealm=(名称:设备, loginModule:WLDeviceNoProvisioningLoginModule), 我的服务器=(名称: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
s-s-rCFIC: 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的生产环境上测试。
感谢您的帮助
【问题讨论】:
你试过适配器了吗? 是的,我使用 WLStudio 向导生成的 sql 适配器 【参考方案1】:我了解到您使用的是 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 设置为相同的位置。
【讨论】:
我忘了说,但这是服务器端配置,因此生产服务器可能会应用不同的配置(因为它不会是Jetty) 感谢您的回答,您的信息是正确的,当您说它在生产中有所不同时,因为在生产中的 WAS 7 + WL5.06 下不会出现此问题 您介意将您的问题设置为已回答吗?谢谢【参考方案2】:解决问题的另一种方法是使用不再使用 Jetty 作为测试环境的 WL Studio 版本 6
【讨论】:
以上是关于Worklight 5.0.6:Ajax 请求异常:向数据适配器发送大数据时表单太大的主要内容,如果未能解决你的问题,请参考以下文章
在 Worklight 中构建和部署失败并出现 openjpa 致命一般错误
IBM Worklight 5.0.6.1 - 使用加密的 worklight.properties 文件保护 Worklight 控制台