0

我的问题与 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: Error code: 1, error description: INTERNAL_ERROR, error message: FWLSE0069E: an internal error occurred during gadget request Form too large802600> 200000, 用户身份 {wl_authenticityRealm=null, GersServiceAdapterRealm=(name:USAEMP4, loginModule:GersServiceAdapterLoginModule), wl_remoteDisableRealm=(name:NullLoginModule, loginModule:NullLoginModule), SampleAppRealm=null, wl_antiXSRFRealm=(name:antiXSRF, loginModule:WLAndeviceProvisioningModule:WLAn =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 application server 7 + worklight的生产环境上测试它。

谢谢你的帮助

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 回答